For years, graphics programming remained an elusive frontier for the developer behind this technical journey. Despite having migrated Paradox's Hearts of Iron IV from DirectX 9 to 11 and understanding basic shader concepts, they lacked the deep confidence they held in C++ or multithreading. This changed during a gap between contracts, when they committed to conquering graphics programming—a decision that led through false starts, API limitations, and ultimately, hard-won mastery.

The False Starts

Initial attempts years prior had faltered when confronted with "beginner-friendly" Vulkan tutorials that dumped thousands of lines of C bootstrap code. This year, armed with more experience, they began with raylib paired with Learn OpenGL, leveraging a C++ wrapper to avoid manual resource management—"that’s definitely not a thing we should be doing 30 years after RAII was invented."

When raylib's limitations surfaced, they explored SDL3_GPU, learning crucial lessons about GPU efficiency: "Doing small mmap()/memcpy()/munmap() operations is really inefficient." Yet SDL3_GPU's fixed-function pipeline relics and lack of bindless resource support proved limiting despite its 2025 release status.

The Vulkan Breakthrough

Returning to Vulkan, the developer discovered curated resources that finally made the complex API approachable:
- The (unofficial) Vulkan Guide for foundational setup
- Rendering Engine Architecture Conference talks for cutting-edge practices
- ACM SIGGRAPH paper bibliographies to vet authoritative sources

This time, the pieces clicked. They built a thin Vulkan abstraction layer featuring a pipeline manager that dynamically recompiles shaders when source files change—a practical solution born from iterative needs.


alt="Article illustration 2"
loading="lazy">

Amazing GLTF asset renderer (Source: mropert.github.io)

Modern C++ in the Graphics Stack

The project became a proving ground for C++20:
- Modules slashed compile times despite IntelliSense quirks
- Designated initializers replaced builder patterns: "They beat any form of builder pattern or constructor overloads."

The Unending Learning Curve

The developer highlights a harsh truth in specialized tech domains: "You can never really know what you don’t know." Without conference-circuit connections, they relied on algorithmic luck (like discovering the Kaleidoscope project) and quality educational content like:
- Arseny Kapoulkine's Niagara series for advanced techniques
- Freya Holmér's shader math streams for foundational refreshers

Next Frontiers

With core proficiency achieved, attention turns to mesh shading, motivated by Sebastian Aaltonen's analysis of its viability on RTX 20xx+ hardware. The journey exemplifies how developers can conquer daunting domains through curated resources, incremental implementation, and community-driven feedback—proving that even seasoned engineers must occasionally return to apprentice mindset.

Source content adapted from mropert.github.io