SkillAgentSearch skills...

MetalNanoVG

The Metal port of NanoVG.

Install / Use

/learn @ollix/MetalNanoVG
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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

  • Works only on macOS 10.11+, tvOS 9.0+ and iOS 8.0+.
  • Simulator support is available since iOS 13 and requires Xcode 11+ running on macOS 10.15+.
  • Not all Apple hardwares are supported even if meets the OS requirement.
  • ARC is required.

Advantages

  • Shared buffers between CPU and GPU.
  • Various Metal states are cached whenever possible.
  • Low overheads compared to OpenGL.
  • Pre-compiled shaders. (no need to compile shaders at runtime)
  • Seamless integration with powerful Metal features such as Metal Performance Shaders.

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) | | ---------- | ----------- | --------------------- | | Resolution | 1080 x 1920 | 2732 * 2048 | | Metal | 20% | 20% | | OpenGL ES2 | 35% | 33% |

Example

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

Screenshot of Fog of World

Related Skills

View on GitHub
GitHub Stars229
CategoryDevelopment
Updated6d ago
Forks46

Languages

C

Security Score

100/100

Audited on Mar 20, 2026

No findings