vkvg

Vulkan Vector Graphics

**vkvg** is an open source *2D graphics library* written in **c** using [Vulkan](https://www.khronos.org/vulkan/) as backend. It's **api** follows the same pattern as [Cairo](https://www.cairographics.org/), but new functions and original drawing mechanics may be added. **vkvg** is in early development stage, api may change, any contribution is welcome. For API documentation and usage, please refer to the [Cairo](https://www.cairographics.org/) documentation for now.

#### Current status: - Fill (stencil even-odd, non-zero with ear clipping). - Stroke. - Basic painting operation. - Font system with caching operational. - Linear Gradients. - Line caps and joins. - Context should be thread safe, extensive tests required. - Image loading and writing with [stb lib](https://github.com/nothings/stb) - Test includes svg rendering with [nanoSVG](https://github.com/memononen/nanosvg) ### Requirements: - [CMake](https://cmake.org/): version > 12. - [Vulkan](https://www.khronos.org/vulkan/) - [FontConfig](https://www.freedesktop.org/wiki/Software/fontconfig/) - [Freetype](https://www.freetype.org/) - [Harfbuzz](https://www.freedesktop.org/wiki/Software/HarfBuzz/) - GLSLC: spirv compiler, included in [LunarG SDK](https://www.lunarg.com/vulkan-sdk/) (building only) - [xxd](https://linux.die.net/man/1/xxd): generate headers with precompiled shaders (building only) - [GLFW](http://www.glfw.org/): optional, if present tests are built. if `glslc` or `xxd` are not present, a precompiled version of the shaders is stored in the git tree. ### Building ```bash #fetch sources from github git clone --recursive https://github.com/jpbruyere/vkvg.git cd vkvg # Create build directory mkdir build cd build # Run CMake, optionaly setup glslc path cmake .. make ``` A [detailed tutorial](doc/windows_build_tutorial.md) is available for Windows. ### To Do - [x] Use Scissor where possible. - [x] Improve stroke algorithms. - [ ] Radial gradients. - [x] Dashed lines. - [ ] Operators. - [x] Optimize vulkan memory allocations by sub-allocating from a single shared memory chunk per type. - [x] Optimize command submissions. - [x] Test SDF font rendering. - [x] Avoid line joins inside curves and arc. - [ ] Structured unit testing. - [ ] Perf and memory checks. - [ ] Code clean and comment. - [ ] Documentations.