Project for studying Vulkan and a general rendering engine playground for myself.
- This project has a few moving pieces to it:
vk_study
: This is the executable that actually contains the Vulkan rendering engine. It mostly uses a unity build system. Meaning, all#includes
are in a single place (vk_study.h
) and most of the project is compiled all at once through the compilation ofvk_study.cpp
alone.asset_baker
: This executable is responsible for massaging assets in external formats into a format that thevk_study
executable can then directly load into memory. The idea is that we "bake" the assets into a format that is exactly how we want to consume them. This avoids the need to parse or arrange assets during runtime ofvk_study
. This executable also partitions the information about external file formats away from the rest of the project. Removing dependencies fromvk_study
.- External formats include: .jpg, .png, .tga, .gltf, .glb, .obj
- Some source files are compiled separately as static libraries:
assetlib
: This library contains the definitions of the custom asset file formats. It defines how the structure of the custom assets, implements saving/compressing and loading/decompressing. This library is the communication line betweenasset_baker
andvk_study
.noop_math
: Custom math library originating from NoopScenes project
sdl2_DIR
environment variable in third_party/CMakeLists.txt must be set to the SDL2 library path- Ex: "C:/developer/dependencies/libs/SDL2-2.0.18"
- Ensure that the working directory when running
vk_study
orvk_baker
is the root directory of the project. vk_baker
takes two command line string arguments.- Argument 1: Directory of the assets
- Argument 2: Directory of include file metadata output
- Ex:
asset_baker.exe assets/ assets_metadata/
SDL2.dll
must be placed in same directory asvk_study.exe
.
This render demonstrates the current capabilities of drawing ~36,000 cubes with a ShaderToy-esque background.
- Dear Imgui for debugging GUIs
- stb (image/image_write) for loading image files
- syoyo's tinygltf for loading 3D files (gltf/glb)
- tinyobjloader for loading 3D files (obj)
- vk-bootstrap for simplifying Vulkan initialization
- VulkanMemoryAllocator for simplifying the management of Vulkan images/buffers
- LZ4 for compressing/decompressing custom asset files
- nlohmann's json for custom asset file headers
- SPIRV-Reflect for reflection on GLSL shaders
- vblanco20-1 and their fantastic Vulkan Guide
- Sascha Willems and his amazing Vulkan education contributions everywhere you look.
- Graphics Programming Discord
- /r/vulkan