{"id":13731209,"url":"https://github.com/mrDIMAS/DmitrysEngine","last_synced_at":"2025-05-08T04:32:13.960Z","repository":{"id":151071781,"uuid":"161035676","full_name":"mrDIMAS/DmitrysEngine","owner":"mrDIMAS","description":"[abandoned] C99 cross-platform 3D game engine with absolute minimum of external dependencies","archived":false,"fork":false,"pushed_at":"2019-07-28T13:57:18.000Z","size":127997,"stargazers_count":152,"open_issues_count":1,"forks_count":13,"subscribers_count":11,"default_branch":"master","last_synced_at":"2024-11-10T02:52:22.208Z","etag":null,"topics":["3d-game-engine","c","engine","game-development","game-engine","math","sound","user-interface"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrDIMAS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-09T12:13:52.000Z","updated_at":"2024-09-29T17:49:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"eaf1fb53-0fdb-4872-b005-e80d5a2dbd72","html_url":"https://github.com/mrDIMAS/DmitrysEngine","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrDIMAS%2FDmitrysEngine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrDIMAS%2FDmitrysEngine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrDIMAS%2FDmitrysEngine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrDIMAS%2FDmitrysEngine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrDIMAS","download_url":"https://codeload.github.com/mrDIMAS/DmitrysEngine/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224702158,"owners_count":17355508,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-game-engine","c","engine","game-development","game-engine","math","sound","user-interface"],"created_at":"2024-08-03T02:01:25.346Z","updated_at":"2024-11-14T22:30:30.119Z","avatar_url":"https://github.com/mrDIMAS.png","language":"C","readme":"# Dmitry's Engine\n\nExperimental C99 cross-platform single-compilation-unit (SCU) 3D game engine with absolute minimum of external dependencies.\n\nPlease note, that this engine is at early development stage and some features maybe very brittle. \n\n## Projects on this engine\n* [Shooter](https://github.com/mrDIMAS/Shooter) - 3d shooter game that I writing using this engine.\n\n## Tutorials\n* Can be found in `tutorials` folder. Why there is only few tutorials? Because API of engine is not stabilized yet.\n\n## Features\n* Single compilation unit - no need to build as separate library: just add `de_main.h` and `de_main.c` to your project.\n* C99 with full compatibility with C++.\n* FBX support - both ASCII and binary\n* Scene graph with these nodes:\n\t* Base (pivot)\n\t* Mesh\n\t* Light\n\t* Camera\n\t* Particle system\n* Automatic assets (resources) management \n\t* Textures\n\t* Models\n\t* Sound buffers\n* Modern rendering techniques, renderer based on OpenGL 3.3 Core.\n    * Deferred shading\n    * Normal mapping\n\t* Skeletal animation\n\t* Shadows\n\t* Instancing\n\t* Frustum culling\n\t* Particle systems (very simple for now)\n* Sound\n\t* 2D + 3D \n\t* WAV format support \n\t* Streaming for large sounds \n* TTF fonts support (compound characters support is not implemented yet)\n* Advanced GUI (inspired by WPF) with declarative UI creation using designated initializers with these widgets:\n\t* Window\n\t* Text box\n\t* Text block\n\t* Border\n\t* Button\n\t* Scroll bar\n\t* Scroll viewer\n\t* Scroll content presenter\n\t* Canvas\n\t* Grid\n\t* Stack panel\n\t* Slide selector\t\n\t* Image\n\t* Check box\n* Path finding (classic A* algorithm)\n* TGA image loading\n* Ray casting\n* Position-based physics (GJK-EPA based)\n* Built-in save/load functionality via object visitor - state of engine can be saved/loaded just in a single call.\n* Documentation - almost every function of the engine has description in Doxygen format.\n* Extremely fast compilation, thus very low iteration times - feature can be tested very fast.\n* Easy to hack and modify\n\n## Screenshots\n\n![Why](pics/game1.png?raw=true \"Game 1\")\n\n![Why](pics/game2.png?raw=true \"Game 2\")\n\n![Why](pics/menu1.png?raw=true \"Menu 1\")\n\n![Why](pics/menu2.png?raw=true \"Menu 1\")\n\n## Planned features\n* Renderer improvements\n\t* Materials (probably PBR)\n\t* Performance optimizations\n\t* Levels of details (LODs)\t\n\t* Instancing optimizations (batching, etc.)\n* GUI improvements\n\t* Styles\t\t\n\t* More widgets\n* Async resource loading\n* Stability\t\n* Support more 3D formats (obj, 3ds, etc)\n* Compound character support in fonts.\n* Terrain\n* Editor\n\n## Dependencies\n- miniz_tinfl - to decompress FBX compressed data.\n\n## Code statistics\n- ~22500 significant lines of code\n- Pure C99\n\n## Supported compilers\n### Compiling as C\nIf compiling as C, you will need C99-compatible compiler:\n- Windows:  Visual Studio 2013 or higher, mingw 4.8.1 or higher\n- Linux: GCC 4.5 or higher\n\nIf you using lower version of Visual Studio, then you should compile engine as C++, because lower versions supports only C89.\n### Compiling as C++\nIf compling as C++, you will need C++98 or higher compiler.\n\n## How to build?\n### Windows\n\nRequired packages: None.\n\nOptions for linker: `opengl32.lib; dsound.lib; gdi32.lib; dxguid.lib; winmm.lib`\n\n### Linux\nRequired packages: `libx11-dev, mesa-common-dev, libgl1-mesa-dev, libxrandr-dev.`\n\nOptions for linker: `-lGL -lpthread -lasound -lX11 -lXrandr`\n\n## Why C?\n* Very fast compilation compared to C++\n* Very simple - what you have is just plain memory and procedures that operates on it.\n* Strict ABI\n* Small but enough number of features - nothing distracts you from your actual goal.\n* Why not one of those other fancy languages? Let Benjamin Franklin says for me: \"He who sacrifices freedom for security deserves neither.\"\n\nAnd of course:\n\n![Why](pics/why.png?raw=true \"Why\")\n\n## Why engine called in that way?\nAt very beginning engine was called Dark Engine, but then I found that there is already one engine with that name (Thief game series using it). Then I started to looking at some fancy adjectives that could fit into `de` prefix that I was already using for my functions, and I haven't found anything suitable. And then I said - \"fuck it, let it be like Dmitry's Engine, I'm too tired of fancy names\".\n","funding_links":[],"categories":["Engines"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FmrDIMAS%2FDmitrysEngine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FmrDIMAS%2FDmitrysEngine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FmrDIMAS%2FDmitrysEngine/lists"}