I've always been fascinated with game development but graphics programming always held a special place in my heart. During the years preceding colledge i've tried learning OpenGL on and off for several years but never got too far as i felt pretty overwhelmed by the amount of details. Looking back, working with OpenGL looks so easy (now i know why TheCherno said that OpenGL is the easiest API to work with) compared to Vulkan.

It was around May of 2024 when i decided i was going to dive head-first into the world of modern graphics APIs. I had been working on my thesis project for a while now (a VR-based handwritten signature recognition system) when i started growing tired of Unity and the "pre-packaged" formula, i constantly felt like i was being spoon-fed by the engine. In heinsight, that granted me the ability of developing the app quite swiftly and the experience has been mostly hassle-free but i couldn't help but wonder how much more power i could squeeze from the integrated chip of my allmighty Oculus Quest 2, and i made it my objective for next year to learn and develop a cool game in VR from scratch.

I wanted to learn an API that was not confined to the platform i was working on so i decided to take a peek at the new kid on the blog: WebGPU. I fell in love with WGPU as it looked to me as a "virtual" API, some sort of "Java for graphics" if i can define it like so. You would write code in this modern graphics API style and under the hood WGPU would hook to whatever native graphics API was available on the system, either Vulkan, OpenGL (in case the system was old enough i guess?), DirectX or Metal. All of this could happen on the web (as the name implies) but could also be harnessed to write native desktop applications too thanks to native bindings.

My relationship with WebGPU was tragically short-lived: i felt like the maturity of the resources available were not on par with more mature ecosystems like OpenGL or Vulkan, not to mention most resources were for JavaScript while i was trying to develop using C++ and constantly felt like a second-class citizen while having a very brittle and fragmented landscape. Even after years WebGPU's support on modern browsers if fairly limited, with Chrome having the most painless out-of-the-box experience.

After plenty of back-and-forth i decided to switch to Vulkan, thanks to its maturity, abundance of resources online, and performance(do i really want a "middle man library" like WebGPU if i need to squeeze all the performance out of a constrained platform like the Quest2?). Not to mention i think Vulkan would be much a more useful skill for a future job.

So, i began the (i must admit, extremely painful) journey. The first month was spent browsing resources like The Vulkan Tutorial as well as some others just to get a feel for what the API was like, and oh boy i wasn't ready for the amount of code i had to read, comprehend and write just to get a humble triangle on the screen. The longest "Hello World" of my entire dev career so far. Once i read the tutorial cover-to-cover i decided to program a little game to deepen my knowledge of the API. I began by replacing all the manual allocations with VMA (the vulkan memory allocator), implementing texture arrays and started experimenting with putting multiple sprites on screen. Development has been quite slow as i had other things on my plate, not to mention i was doing this in the middle of summer so i had plenty of distractions to fill my day.

At last i was able to get this game to light by the end of november, as well as getting my master's degree by the end of october ^^ what a year. Stay tuned for other updates!