An example of a game and a custom rendering engine, using Vulkan.
This engine does not support any other graphics API than Vulkan.
This project is not compatible with Vulkan SDK > 1.3.211.
This repository includes:
- a simple application,
- the rendering engine (
frametech
), - a custom standard library (
ftstd
),
The custom standard library, ftstd
(for "FrameTech STanDard library"), is enough to run and debug the engine only, and has no ambition to be pushed in production.
FrameTech
has no ambition to be pushed in production either.
- macOS on Apple Silicon / Intel chips,
- Windows 10/11 with a dedicated graphics card and Vulkan enabled.
This repository includes extern repositories / dependencies, like imgui
, vma
, or glm
.
I tend to avoid git submodules as much as possible, so this repository contains everything to build and run the application.
The Vulkan engine uses VMA
as memory allocator dependency.
Thanks to the ImGui and GLM teams for providing such great tools for free.
Create an empty directory like out/build
in the root of the project.
Build the Makefiles using cmake like this: cmake -S ../../ -B . -DCMAKE_BUILD_TYPE=Debug -T ClangCL
.
The project is compatible with:
- Visual Studio 2022 (
-G "Visual Studio 17 2022"
), - Xcode (
-G Xcode
)
I did not try MSVC to compile the project but it should works (however you may have to tweak the compiler's options).
Once the Makefiles have been built, go in your out/build
folder and launch make, or open your project in Visual
Studio for Microsoft Windows.
The game settings must be in a file called game.toml
, and must follow TOML specifications:
APPLICATION_NAME = "Example"
APPLICATION_FPS_TARGET = 60
APPLICATION_VERSION = "0.1.0"
APPLICATION_DEPENDENCIES = ["TEXTURES", "SOUNDS"]
The file must be at the root of the executable call.
TODO: propose a list of specs keys and their description.
- Multiple buffers allocation using one VkBuffer only,
- Improve the shaders bindings,
- Make a todo statement about what to move from pipeline / render / swapchain / ... to ...,
- Make the configuration external to the build (like FPS limit),