Focused on multithreaded and distributed vulkan applications and LOD rendering. Development started as part of a semester project
-
3 level framework
- wrap: RAI wrappers for all important Vulkan objects
- util: convenience classes to allocate memory, load textures, wrap geometry etc.
- app: hierarchical application and launcher classes to run the same high-level application in different modes
-
simple scenegraph implementation supporting:
- Transform Node: scale, translation, rotation, children
- Shape Node: geometry
- Light Node: color, intensity, location, radius
- Camera Node: automatically created, not loaded from json
the scene is described in a json file based on the JSON Scenegraph specification each model requires a name ($DEF)
- Minimal: drawing a triangle
- Simple: drawing sphere.obj and sponza.obj (external) with 1st person navigation
- Compute: calculating an animated texture usinga computer shader
- Clustered: drawing sponza.obj (external, PBR) using clustered shading
- Scenegraph drawing a Scenegraph based on the JSON Scenegraph format
- Scenegraph Clustered drawing a Scenegraph based on the JSON Scenegraph format with clustered PBR shading
- LOD MPI draws an xyz_rgb file with bvh with 3 processes. 1 presenter and 2 workers
- LOD draws an xyz_rgb file with bvh
each application can be run in different modes
- level 1 specified in the main function, worker mode currently only used in LOD MPI app
- Window: a window is created and the application renders to the window
- Worker: the application renders tp an image and tranmits it via MPI to a presenter
- level 2 can be chosen at runtime using the "-t 1 to 3" argument
- Single: application runs in 1 thread
- Threaded: application has a separate drawing thread in parallel to logic, recording and presenting
- Threaded Transfer: application additionally has a thread for data transfer
- SPIR-V Cross for shader compilation
- cmdline for argument parsing
- GLFW for window and context creation
- GLM for mathematics
- GLI for dds image loading
- stb_image for tga image loading
- tinyobjloader for obj model loading
- lamure (bvh) for bvh and xzy_rgb model loading
- jsoncpp for json scenegraph loading
this framework is licensed under the GPL v3
- SPIR-V Cross is licensed under Apache license 2.0
- cmdline is licensed under 3 clause BSD revised
- GLFW is licensed under the zlib/libpng license
- GLM is licensed under the Happy Bunny License (Modified MIT)
- GLI is licensed under the Happy Bunny License (Modified MIT)
- stb_image is public domain
- tinyobjloader is licensed under 2 clause BSD
- lamure is licensed under 3 clause BSD
- jsoncpp is public domain