VulkanSceneGraph (VSG), is a modern, cross-platform, high-performance scene graph library built upon Vulkan graphics/compute API. The software is written in C++17 and follows the CppCoreGuidelines and FOSS Best Practices. The source code is published under the MIT License, with the exception of vulkan.h, used for Vulkan extensions, which is under Apache License 2.0. This repository contains C++ headers and source and CMake build scripts to build the libvsg library. Additional support libraries and examples are provided in separate repositories, links to these are provided below. The software currently builds under Linux (desktops variants through to Jetson & Raspberry Pi), Windows (VisualStudio, MinGW & Cygwin), Android, and macOS & iOS (using MoltenVk).
Features
- Robust, thread safe memory management with custom block memory allocator and high performance smart pointers that are smaller and faster than std equivalents
- GLSL style maths class - no need for 3rd party libs like GLM
- Coherent Object model with easy to use and extend serialization, including native binary and ascii file support for all scene graph objects
- C++ classes that encapsulate Vulkan Graphics and Compute C API in robust and convenient form, with robust resource management, including serialization support. Complexities and verbose setup usually associated with Vulkan are all dealt with for you so you can concentrate on your compute and graphics tasks
- Vulkan extensions for ray tracing and mesh shading
- Built in GLSL and SPIR-V shaders for Physics Based Rendering. phong and flat shading and text rendering
- GLSL shader compilation to SPIR-V, using compiled in glslang, so users don’t need to convert offline and can leverage #pragma(tic) shader composition
- Class design focused on performance of scene graph operations by minimizing CPU bottlenecks: optimizing data density, layout, cache coherency and minimizing branching leading to better utilization of modern CPU and memory architectures. Traversals through to IO operations can be up to 10 times faster than with the OpenSceneGraph