FEngine


FEngine is a game engine prototype I made to learn how to use the Vulkan API. My objective was to create the beginning of a developement environnement as in a commercial Game Engines like Unity. It is written entirely in C++ and uses GLFW for managing windows, context and input. FEngine is composed of four major modules which will be described in the next paragraphs.


Vulkan
Vulkan is extremely verbose compared to other graphics API like OpenGL. It means that even simple instructions will take hundreds of lines of code, which is messy. For example, rendering my first triangle with vulkan took me about 1400 line. The vulkan module typically encapsulate vulkan objects into more managable and compact classes.
Renderer
The renderer gives a simplified interface to render onto the screen. It encapsulates a lot of the vulkan objects and manages their creation and destruction ( render pipelines, commands buffers and descriptors). It also handles the rendering data like mesh and textures.
Scene
The scene module is inspired from Unity. Scene object are created via GameObjects. They are composed of multiple components that implement functionnality. (transform, mesh, camera etc.)
Editor
The Editor offers a Gui to access and modify the gameobjects of the scene. It makes the link between the renderer and the Scene which are completely independants otherwise. The Editor uses ImGui to render windows and widgets as seen in the following image and video.

More details about the project here. All sources on github.
Special thanks to Vincent Calisto for introducing me to Vulkan !
Project refences : vulkan tutorial, S.Willems vulkan ressources, lunarg, glm, ImGui, Unity, GLFW


Chania