GithubHelp home page GithubHelp logo

tinker's Introduction

Tinker Engine

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.

Platforms supported

Windows Linux
Vulkan ✔️
DX12

Table of Contents

Project Hierarchy Description

  • Assets/ - art files
  • Benchmark/ - simple setup for running benchmarked code
  • Build/ - dir for exe/libs/dlls (generated)
  • Core/ - core engine, builds as exe
    • DataStructures/ - data structures, e.g. vector and hashmap
    • Math/ - math types and ops
    • Platform/ - platform/threading api layer as well as app main, e.g. Windows
    • Utility/ - logging, mem alloc tracking, code block timing
  • DebugUI/ - debug ui / imgui
  • Game/ - game code, builds as dll
  • Graphics/ - graphics api layer as well as backends, e.g. Vulkan
  • Output/ - dumping ground for output files, e.g. test images
  • Scripts/ - build scripts and some helpful project scripts
  • Shaders/ - all gpu shader code
    • hlsl/ - shader source
    • spv/ - compiled shader bytecode for vulkan backend
  • SPIR-V-VM/ - virtual machine for evaluating SPIR-V shaders (WIP)
  • Test/ - simple setup for running unit tests
  • ThirdParty/ - external libraries
    • dxc_2022_07_18/ - DirectXCompiler release lib
    • imgui-docking/ - Imgui lib, docking branch
    • xxHash-0.8.2/ - xxHash fast string hashing
    • constexpr-xxh3/ - compile-time string hashing (produces values identical xxHash)
  • Tools/ - code for separate tools
    • ShaderCompiler/ - calls into DXC to compile HLSL shaders to SPIR-V (+DXIL eventually)
  • ToolsBin/ - built binaries of code from Tools/
  • Utils/ - random misc, e.g. Natvis files

Feature List

  • 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
    • 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
  • Core engine features
    • Custom data structures
      • Vector
      • Hash map
      • Ring buffer
    • Custom memory allocators
    • Compile-time as well as run-time evaluated string hashes
  • 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)

Feature Roadmap

  • More debug tooling and validation
  • GPU-driven culling and drawing
  • Post processing effects
  • DX12 backend implementation
  • Async asset streaming

Build Instructions

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 and Enterprise versions will also work)
  • Vulkan SDK version 1.3.216.0 or higher from LunarG

To Build:

  • Run proj_shell.bat in the Scripts/ 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 via run_game.bat.
    You can find more detailed info on the various build scripts here.

Dependencies and Licensing

tinker's People

Contributors

klingerj avatar

Watchers

 avatar

tinker's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.