Skip to content
A vector graphics renderer for bgfx, based on ideas from NanoVG and ImDrawList (Dear ImGUI)
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
img Rewrite Feb 24, 2018
include/vg Fixed textBox() declaration (issue #13) Feb 18, 2019
src Update to latest bgfx Jan 26, 2019
LICENSE Initial commit Feb 24, 2017 Update Feb 24, 2018


A vector graphics renderer for bgfx, based on ideas from NanoVG and ImDrawList (Dear ImGUI)

Includes some small changes to FontStash. Optionally uses libtess2 for concave polygon decomposition.

Path and Stroker classes

Paths are tesselated using the Path struct (src/vg/path.cpp, .h). You can use vg::pathXXX() functions to convert your SVG commands to a polyline for uses outside this renderer.

Strokes and fills are generated using the Stroker struct (src/vg/stroker.cpp, .h). You can use vg::strokerXXX() functions to generate strokes and fills for your polylines for uses outside this renderer.

Compared to NanoVG/FontStash

  1. Generates fewer draw calls by batching multiple paths together (if they share the same state)
  2. Separate shader programs for gradients and image patterns to reduce uniform usage (NanoVG's bgfx backend uses a single program for all cases)
  3. Concave polygons are decomposed on the CPU.
  4. Command lists with support for tesselation caching.
  5. Clip in/out with the stencil buffer
  6. User-specified indexed triangle list rendering (i.e. for complex gradients and sprite atlases).
  7. Fills with image patterns can be colored.
  8. FontStash: glyph hashing uses BKDR (seems to give better distribution of glyphs in the LUT; fewer collisions when searching for cached glyphs)
  9. FontStash: optional (compile-time flag) caching of glyph indices and kerning info for ASCII chars in order to avoid repeated calls to stbtt functions.

What's not supported compared to NanoVG

  1. Miter limit (i.e miter joins never convert to bevel joins)
  2. Polygon holes (they can be emulated using clip in/out regions)
  3. Variable text line height
  4. Skew transformation matrix




SVG (using simple-svg)




Custom gradients (indexed triangle lists w/ per-vertex colors)


You can’t perform that action at this time.