Code Monkey home page Code Monkey logo

darmok's Introduction

darmok

Dathon trying to explain the importance of Darmok

C++ game engine combining opensource libraries & tools that I like

currently using:

planned to use:

Trying to target the following platforms:

  • desktop (windows, macos, linux)
  • mobile (iOS, Android) (pending)

Some philosofical decisions (could be controversial)

  • use modern C++ (20) patterns where possible
  • no game editor, will use external tools (blender, ldtk, etc...)
  • use as much stl as possible (need to look into memory management at some point)
  • no naked pointers
  • throw exceptions for error handling
  • try to keep the API similar to Unity3D (where it makes sense) so that it's easy to port game logic

WARNING: currently in early stages of development

Frequently Asked Questions

  • Will it have feature X?

Depends on what I need. Anyone is welcome to fork and submit PRs.

Current State

I'm still learning CMake, so if you see something that should be fixed please let me know.

Working features

  • bgfx window setup (GLFW on windows & linux)
  • update logic methods with delta time
  • renderer: threaded render graph that compiles passes inputs and outputs
    • unlit
    • forward with phong lighting (point, ambient)
  • entity component scene using entt
    • transform, camera
  • sprites and spritesheets
  • loading models using assimp (FBX, etc...)
  • serializing models from assimp into binary using cereal
  • lua scripting
    • lua debugging
  • multiple UI options
    • imgui for tooling
    • RmlUI for ingame (support for multiple canvases)
  • skeletal animations using ozz (reading from binary)
  • 3d physics using jolt
    • rigidbodies
    • character controller
  • tool to export asset folders
    • shaders & vertex layouts
    • copy files
    • assimp to custom binary model format
    • ozz skeleton & animations
  • dynamic font texture generation
  • play sounds and music (wav & mp3)

Upcoming

  • support for nested rmlui data models in lua
  • move miniaudio to use taskflow tasks
  • check memory leak when reloading darmok-lua
  • luajit support (maybe compile using importer)
  • camera frustrum culling
  • more renderer features
    • other types of lights
    • deferred
    • PBR
    • SSAO
  • text improvements
    • finish all the TextRenderConfig options
    • dynamic distance field rendering with border support
  • clipboard text support (UTF8)
  • asset loading progress
  • possible refactors
    • maybe replace Data for std::vector<uint8_t> and DataView for std::span<uint8_t>
    • loaders should return unique_ptr
    • move lua bindings to separate library?
    • coroutines could be useful in some places
  • more stuff serialization
    • binary texture atlas
    • material
  • custom UI module (rmlui is nice but slow)

In the future

  • more unit tests
  • performance profiling
  • 2d physics
  • instancing
  • 3d physics materials
  • multithreaded updates (Ubisoft)
  • support multiple imgui app components with different transforms
  • spine animations
  • unify use of allocators everywhere
  • progressive asset loaders
  • multithreaded rendering with taskflow
  • lua debugging would be nice
  • particle systems (maybe effekseer)
  • more sound options (spatialization, effects)

Interesting Related Projects

Example code

local program = Program.new(StandardProgramType.Forward)

local camEntity = app.scene:create_entity()
local camTrans = camEntity:add_component(Transform, { 0, 2, -2 })
camTrans:look_at({ 0, 0, 0 })
local cam = camEntity:add_component(Camera)
cam:set_projection(60, { 0.3, 1000 })
local renderer = cam:add_renderer(ForwardRenderer)
renderer:add_component(PhongLightingComponent)

local lightEntity = app.scene:create_entity()
lightEntity:add_component(Transform, { 1, 1, -2 })
lightEntity:add_component(PointLight)

local cubeMesh = MeshData.new_cube().createMesh(program.vertex_layout)
local greenTex = app.assets:load_color_texture(Color.green)
app.scene:create_entity():add_component(Renderable, cubeMesh, program, greenTex)

darmok's People

Contributors

miguelibero avatar

Stargazers

 avatar yingnierxiao avatar

Watchers

 avatar  avatar

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.