MeltedForge is a game engine written in C using Vulkan, with a focus on minimal dependencies, performance, and clean design.
The link to tests and apps made using MeltedForge is here :-
- Window & Input
- Basic window creation & handling
- Fullscreen windows
- Window icons
- Basic mouse and keyboard input
- A Basic ECS
- Multiple entities support
- Can add/remove components to/from a scene
- Can attach/detach components from entities
- Basic scene management
- Scene load/save
- Material system
- Support for fustrum culling (On the CPU as of now)
- GLTF 2.0 model loading along with the material data
- Can load complex models (Tested with Sponza & Bistro Internal)
- Engine & editor level UI
- UI customization (Using Dear ImGui's styles)
- RenderGraph
- A helper tool which manages attachments, passes, framebuffers for us and helps us to render and invoke several interlinked passes
- Can get each attachment's pixel data on the CPU
- Can get ImTextureID for each attachment in it for viewing it in ImGui (Provided ui is enabled in the renderer)
- Can get a dedicated resource set containing every attachment in order as given when creating the rendergraph
- Currently MSAA is not supported for rendergraph's attachments
- A binary serialization/deserialization api
- Explicit gpu resource management control for resources like:
- Vertex buffers
- Index buffers
- Textures and skyboxes
- UBOs
- SSBOs
- Storage images
- Image samplers (
sampler2DandsamplerCubein glsl) - Resource set and layout management (MFResourcSet and MFResourceSetLayout)
- Skybox support
- Only 2D equirectangular images as input
- HDR format supported as well
- Optional to generate utility IBL textures such as BRDF LUT, Prefiltered Map and Irradiance map
- Basic PBR support
- Diffuse IBL support
- Specular IBL support
- MSAA support for native window
- Can get the image pixels from the native window, and images as well.
- Support for compute pipelines and compute dispatches too
- Can fetch and tell which optional GPU features are available, like Buffer Device Address, descriptor indexing, etc
- Support for headless rendering, meaning the engine can render to an image even if a window isn't provided
- Documentation
- To satisfy my curiosity.
- To showcase what C can really do in game/game engine dev these days
- To serve as a helpful learning resource for both me (@CloudCodingSpace) and other devs
- To gain experience in this field
- Beginner-friendly setup and usage
- Low-end device friendly
- Cross-OS (Only on desktop platforms)
- Advanced real time rendering techniques support such as
- Motion blur
- Clustered rendering
- Forward+ rendering
- Mesh shaders and the meshlet pipeline (Only if mesh shaders are supported in wide GPUs in the future)
- Text rendering
- Sound system support
- Animation system
- Multithreading
- Async resource handling
- Dynamic texture streaming
- Support for shader languages like HLSL & Slang.
Note: The documentation is currently a work in progress. The code is here.
The deployed url for the docs is here. It would be great if it would be pointed out for any grammartical errors or any suggestions spotted. If so, then it would be much appreciated if a pull request is opened in the documentation's repo.
There is a public read-only todo list of this engine. It is hosted on trello. It can be found here
Note: The following are the important conditions met by the PC for building/running MeltedForge
- Vulkan SDK (Get from here)
- A GPU driver with modern Vulkan support (Vulkan 1.2+)
- A modern C & C++ compiler with the support of latest language standards with the corresponding runtime libraries and build toolchain (Preferably GCC & G++ or MSVC, but currently clang is not tested and is not supported)
- CMake (Get from here)
Note: This repo uses submodules. Make sure to clone it recursively.
git clone --recursive https://github.com/CloudCodingSpace/MeltedForge.gitThe make change the directory into the repo's remote folder/directory. Then create a folder/directory like bin/out/build for the binary output. Then run the following commands :-
cmake -S . -B <path-to-build-dir>
cmake --build <path-to-build-dir> --parallel- This engine is mostly using C. But there is some usage of other languages like C++ since 3rd party vendors like Dear ImGui and Assimp use it.
- Currently supports compilers like GCC, G++ and MSVC.
- Aims at having support for Clang & Clang++, but currently it is not tested and does not have official support for it.
- Currently tested in and developed on Windows with MSVC and GCC/G++
- Linux isn't tested yet.
The third party libraries used in this engine are :-
- Stb (For single header libraries for things like image loading, noise, etc)
- CGLTF (For loading models)
- Glfw (For cross-platform windowing and input handling)
- Slog (For logging)
- Tracy (For profiling, only in debug mode with the MSVC compiler)
- CImGui (C bindings for ImGUi, used for editor UI)
Licenses for these libraries are included. (In MeltedForge/libs, in their own respective folders)
This project may not have been possible if not for some of these sources and communities :-
- LearnOpenGL for foundation of graphics
- Vulkan tutorial for basics of vulkan
- Graphics programming discord server's community. Link
- Polyhaven for free, 3D assets
- Khronos's glTF Samples for 3D assets
- NVidia's Bistro scenes.
This project is licensed under the Zlib license. More details in LICENSE.txt.

