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_2022_07_18/
- DirectXCompiler release libimgui-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
(Community
andEnterprise
versions will also work) - Vulkan SDK version 1.3.216.0 or higher from LunarG
To Build:
- Run
proj_shell.bat
in 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.
- 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)