My second game engine project. Made with things learned from Handmade Hero, coworkers, and lessons learned from the older Joe Engine. Nearly everything written from scratch, extremely minimal libraries/dependencies. Tinker has superior software architecture, minimal dependencies, compiles faster, and has other debatably cooler features and capabilities than the Joe Engine.
| Windows | Linux | |
|---|---|---|
| Vulkan | ✔️ | ❌ |
| DX12 | ❌ | ❌ |
- Project hierarchy description
- Feature List
- Feature Roadmap
- Build Instructions
- Dependencies and Licensing
Assets/- art filesBenchmark/- simple setup for running benchmarked codeBuild/- dir for exe/libs/dlls (generated)Core/- core engine, builds as exeDataStructures/- data structures, e.g. vector and hashmapMath/- math types and opsPlatform/- platform/threading api layer as well as app main, e.g. WindowsUtility/- logging, mem alloc tracking, code block timing
DebugUI/- debug ui / imguiGame/- game code, builds as dllGraphics/- graphics api layer as well as backends, e.g. VulkanOutput/- dumping ground for output files, e.g. test imagesScripts/- build scripts and some helpful project scriptsShaders/- all gpu shader codehlsl/- shader sourcespv/- compiled shader bytecode for vulkan backend
SPIR-V-VM/- virtual machine for evaluating SPIR-V shaders (WIP)Test/- simple setup for running unit testsThirdParty/- external librariesdxc_2025_07_14/- DirectXShaderCompilerimgui-docking/- Imgui lib, docking branchxxHash-0.8.2/- xxHash fast string hashingconstexpr-xxh3/- compile-time string hashing (produces values identical xxHash)
Tools/- code for separate toolsShaderCompiler/- calls into DXC to compile HLSL shaders to SPIR-V (+DXIL eventually)
ToolsBin/- built binaries of code fromTools/Utils/- random misc, e.g. Natvis files
- Platform layer
- Win32 backend support
- Automatic hotloading of game code dll upon recompilation
- Simple thread-job system with SPSC lockless queue
- Graphics
- API-agnostic graphics layer, compiles with desired backend API (e.g. Vulkan)
- Vulkan backend support
- Dynamic rendering API feature
- "Bindless" texture binding
- Render pass timing with GPU timestamps
- Vulkan backend support
- Builds with game dll, meaning the graphics system is hotloadable
- Draw instancing
- Shader hotloading on keypress
- Calls directly into DirectXCompiler lib
- Shader pipeline state objects handled as blend/depth state permutations selected at run-time
- API-agnostic graphics layer, compiles with desired backend API (e.g. Vulkan)
- Core engine features
- Custom data structures
- Vector
- Hash map
- Ring buffer
- Custom memory allocators
- Compile-time as well as run-time evaluated string hashes
- Custom data structures
- Memory allocation tracking
- Tracks entire stack trace
- Simple linear algebra library
- SIMD matrix multiply
- Game asset file loading
- OBJ models, BMP textures
- "Cooking" of mesh vertex data into binary format
- ImGui debug UI
- Supports multi-viewport, creates and destroys windows/swap chains on demand
- Simple unit testing and benchmarking frameworks
- WIP features
- SPIR-V virtual machine
- tested to evaluate only some very simple SPIR-V shaders
- written in C99 and builds separately from rest of Tinker project
- Simple CPU-side raytracing (WIP)
- SPIR-V virtual machine
- More debug tooling and validation
- GPU-driven culling and drawing
- Post processing effects
- DX12 backend implementation
- Async asset streaming
You will need to have installed:
- Visual Studio 2019, because the project will currently check for
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat
(CommunityandEnterpriseversions will also work) - Vulkan SDK version 1.3.216.0 or higher from LunarG
To Build:
- Run
proj_shell.batin theScripts/directory. You can do this by double-clicking in the file explorer or from command line. - In that shell window, run
ez-build_release.bat. This will build every Tinker project. You should now be able to run the game viarun_game.bat.
You can find more detailed info on the various build scripts here.
clang-format can be run via:
> python clang-format.py
in a git bash at the top level dir of the repo. It relies on a package called wcmatch which should be installed like so:
> pip install wcmatch
- DirectX Shader Compiler (DXC): HLSL shader compiler (LLVM Release License)
- Imgui - docking branch: Debug ui (MIT license)
- xxHash: Run-time string hashing (2-Clause BSD License)
- constexpr-xxh3: Compile-time string hashing (2-Clause BSD License)