A C++ Vulkan learning repository focused on building fundamentals through small, incremental experiments.
Unlike higher-level APIs, Vulkan demands strict control over every aspect of the GPU. This repository serves as a learning workspace where code structure and abstractions will actively evolve as new topics are introduced, and older components are refactored for better performance and architectural integrity.
What you can expect to find here:
- Vulkan initialization (Instance, Validation Layers, Physical/Logical Device selection).
- Swap chain lifecycle management (Recreation on window resize, surface capabilities, image views).
- Graphics pipeline architecture (Fixed-function state manipulation, render passes, and attachments).
- Low-level execution (Command buffers, queues, and strict synchronization primitives).
- Shader integration (GLSL compiled to SPIR-V byte-code).
Non-goals (for now):
- Providing a stable, production-ready Engine API.
- Cross-platform build systems (Currently optimized for Windows/Visual Studio).
- Long-term backward compatibility between commits.
- A Vulkan-capable GPU with up-to-date drivers.
- Vulkan SDK installed (Required for validation layers and shader compiler tools).
- Visual Studio (x64 toolchain).
- Open
Vulkan.slnin Visual Studio. - Select the
x64architecture and eitherDebugorReleasemode. - Build and run the startup project.
Note: If the build system cannot find Vulkan headers or libraries, verify that the Vulkan SDK is correctly installed and your environment variables are configured properly.
Vulkan does not consume raw GLSL text files; it requires compiled SPIR-V binaries. All shader source files are located in the Shaders/ directory.
- Windows Users: Run the provided
compile.batscript to automate the build process. - Manual Compilation: Alternatively, use the
glslcexecutable provided by the Vulkan SDK to compile.vertand.fragfiles into.spvoutputs.
Ensure that the generated .spv files remain in the location expected by the application runtime.
.
├── Shaders/ #GLSL source files and compiled SPIR-V binaries
├── lve_*.{hpp,cpp} #Vulkan wrapper classes and core abstractions
├── main.cpp #Application entry point and primary demo runner
└── Vulkan.sln #Visual Studio solution file