Home

Awesome

MetalNanoVG

MetalNanoVG is the native Metal port of NanoVG that tries to get the most out of Apple's Graphics APIs.

Donation

If you found this project useful, please consider donating to show your support ❤️

Donate

Precautions

Advantages

Installation

  1. Download both NanoVG and MetalNanoVG source codes.
  2. Add both NanoVG and MetalNanoVG's src directories to the header search path.
  3. Add NanoVG's src/nanovg.c and MetalNanoVG's src/nanovg_mtl.m to the Compile Sources section in Xcode.
  4. Link the Metal and QuartzCore frameworks.
  5. For best performance, disable GPU Frame Capture and Metal API Validation as described here.

Done.

Usage

  1. Include the headers.
#include "nanovg.h"
#include "nanovg_mtl.h"
  1. Pass the CAMetalLayer object when creating the NanoVG context.
NVGcontext* ctx = nvgCreateMTL(metalLayer, NVG_ANTIALIAS | NVG_STENCIL_STROKES);

Benchmark

The following table depicts a simple CPU usage benchmark of running the NanoVG demo app on iOS devices with full Retina resolution. Both Metal and OpenGL ES2 implementations get constant 60 FPS.

iPhone 6s+iPad Pro 12.7" (2015)
Resolution1080 x 19202732 * 2048
Metal20%20%
OpenGL ES235%33%

Example

MetalNanoVG was originally created to improve the performance of the iOS app Fog of World.

Screenshot of Fog of World