Vulkan Engine (WIP)

C++, Python, Vulkan

I am currently learning how to use the Vulkan API which is a modern, low-level graphics and compute API for high-performance rendering engines. Taking what I learned from my first engine, “GLDrawer”, my new 2D game engine has a focus on performance and production-worthy features.

Compute shader lighting demo from my Terraria style game

Features

  • Feature rich editor module using DearImgui
  • Entity component system with full serialization
  • Box2D support for physics
  • Asset management system
  • High-performance, single quad tilemap renderer with dynamic shader storage referencing
  • Hardware accelerated tilemap lighting system using compute shaders

My engine also has an asset packer utility. The engine uses lots of entities such as sprites, fonts, renderers, and prefabs which are all just metadata serialized to JSON. Some of these entities reference resources like images and font atlases. The packer utility will convert all the JSON data into binary using the Flatbuffers library and combine them into a single binary file. The file has a header containing fast lookup information, and it can be optionally stored as a resource in the executable file, or accessed with a mapped pointer. This means that when creating a build with the publishing configuration, all assets are compressed to binary and can be dynamically loaded at runtime with granular control.