Need help with MetalNanoVG?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

ollix
151 Stars 30 Forks MIT License 56 Commits 7 Opened issues

Description

The Metal port of NanoVG.

Services available

!
?

Need anything else?

Contributors list

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

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.