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.
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.
For an example on how to use this library, take a look here.
nvgBezierTo
should be replaced by vg::cubicTo
. Note that there is also vg::quadraticTo
for a lower degree Bezier curve.nvgSave
and nvgRestore
are to be replaced by vg::pushState()
and vg::popState()
.uint32_t
as colors, instead of a struct of 4 floats.
When converting, you might want to consider to use vg::color4ub
instead of vg::color4f
.
Also note that there are a few predefined colors available in vg::Colors::
.SVG (using simple-svg)
Demo
Custom gradients (indexed triangle lists w/ per-vertex colors)
In your project, you can add these files as a new CMake target, using the following, assuming you have this project as a submodule in a folder ext/vg-renderer
:
add_library(vg-renderer STATIC
"ext/vg-renderer/src/vg.cpp"
"ext/vg-renderer/src/stroker.cpp"
"ext/vg-renderer/src/path.cpp"
"ext/vg-renderer/src/vg_util.cpp"
"ext/vg-renderer/src/libs/fontstash.cpp"
"ext/vg-renderer/src/libs/stb_truetype.cpp"
"ext/vg-renderer/src/libtess2/bucketalloc.c"
"ext/vg-renderer/src/libtess2/dict.c"
"ext/vg-renderer/src/libtess2/geom.c"
"ext/vg-renderer/src/libtess2/mesh.c"
"ext/vg-renderer/src/libtess2/priorityq.c"
"ext/vg-renderer/src/libtess2/sweep.c"
"ext/vg-renderer/src/libtess2/tess.c"
)
target_include_directories(vg-renderer PUBLIC "ext/vg-renderer/include/")
# Add the bgfx and bx libraries to link with this target:
# I made a macro in my project that does this. You can roll your own.
link_bgfx_libs(vg-renderer Release)