This project aims to implement a simple model renderer that produces consistent results across different graphics API backends. The sole goal of this project is to "taste" different graphics APIs. As a result, I won't implement advanced features like ray tracing or physics based rendering. Note that some techniques are only available on specific APIs — for example, ray tracing is limited to Vulkan, DX12, and Metal.
Supported graphics APIs:
- OpenGL 4.6 (with Direct State Access)
- DirectX 11
- DirectX 12
- Metal 4 (using metal-cpp)
- Vulkan 1.4
Only the latest version of each API is supported in order to take full advantage of their capabilities.
Requirements:
- C/C++ compiler with C++20 and above
- CMake
- Dependencies for GLFW
Preferred IDE and build system are optional requirements. This includes:
- Ninja
- CLion
- Xcode
- Visual Studio
This repository uses Git submodules. Clone the repository with
$ git clone --recurse-submodules git clone --recurse-submodules If you have already cloned the repository without --recursive-submodules, run
$ git submodule update --init --recursiveThen run CMake with your preferred generator. For example
$ cmake -S . -B build -G Ninja -D<options>
$ cmake --build build