• Stars
    star
    145
  • Rank 246,795 (Top 5 %)
  • Language
    C
  • License
    MIT License
  • Created over 5 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

[abandoned] C99 cross-platform 3D game engine with absolute minimum of external dependencies

Dmitry's Engine

Experimental C99 cross-platform single-compilation-unit (SCU) 3D game engine with absolute minimum of external dependencies.

Please note, that this engine is at early development stage and some features maybe very brittle.

Projects on this engine

  • Shooter - 3d shooter game that I writing using this engine.

Tutorials

  • Can be found in tutorials folder. Why there is only few tutorials? Because API of engine is not stabilized yet.

Features

  • Single compilation unit - no need to build as separate library: just add de_main.h and de_main.c to your project.
  • C99 with full compatibility with C++.
  • FBX support - both ASCII and binary
  • Scene graph with these nodes:
    • Base (pivot)
    • Mesh
    • Light
    • Camera
    • Particle system
  • Automatic assets (resources) management
    • Textures
    • Models
    • Sound buffers
  • Modern rendering techniques, renderer based on OpenGL 3.3 Core.
    • Deferred shading
    • Normal mapping
    • Skeletal animation
    • Shadows
    • Instancing
    • Frustum culling
    • Particle systems (very simple for now)
  • Sound
    • 2D + 3D
    • WAV format support
    • Streaming for large sounds
  • TTF fonts support (compound characters support is not implemented yet)
  • Advanced GUI (inspired by WPF) with declarative UI creation using designated initializers with these widgets:
    • Window
    • Text box
    • Text block
    • Border
    • Button
    • Scroll bar
    • Scroll viewer
    • Scroll content presenter
    • Canvas
    • Grid
    • Stack panel
    • Slide selector
    • Image
    • Check box
  • Path finding (classic A* algorithm)
  • TGA image loading
  • Ray casting
  • Position-based physics (GJK-EPA based)
  • Built-in save/load functionality via object visitor - state of engine can be saved/loaded just in a single call.
  • Documentation - almost every function of the engine has description in Doxygen format.
  • Extremely fast compilation, thus very low iteration times - feature can be tested very fast.
  • Easy to hack and modify

Screenshots

Why

Why

Why

Why

Planned features

  • Renderer improvements
    • Materials (probably PBR)
    • Performance optimizations
    • Levels of details (LODs)
    • Instancing optimizations (batching, etc.)
  • GUI improvements
    • Styles
    • More widgets
  • Async resource loading
  • Stability
  • Support more 3D formats (obj, 3ds, etc)
  • Compound character support in fonts.
  • Terrain
  • Editor

Dependencies

  • miniz_tinfl - to decompress FBX compressed data.

Code statistics

  • ~22500 significant lines of code
  • Pure C99

Supported compilers

Compiling as C

If compiling as C, you will need C99-compatible compiler:

  • Windows: Visual Studio 2013 or higher, mingw 4.8.1 or higher
  • Linux: GCC 4.5 or higher

If you using lower version of Visual Studio, then you should compile engine as C++, because lower versions supports only C89.

Compiling as C++

If compling as C++, you will need C++98 or higher compiler.

How to build?

Windows

Required packages: None.

Options for linker: opengl32.lib; dsound.lib; gdi32.lib; dxguid.lib; winmm.lib

Linux

Required packages: libx11-dev, mesa-common-dev, libgl1-mesa-dev, libxrandr-dev.

Options for linker: -lGL -lpthread -lasound -lX11 -lXrandr

Why C?

  • Very fast compilation compared to C++
  • Very simple - what you have is just plain memory and procedures that operates on it.
  • Strict ABI
  • Small but enough number of features - nothing distracts you from your actual goal.
  • Why not one of those other fancy languages? Let Benjamin Franklin says for me: "He who sacrifices freedom for security deserves neither."

And of course:

Why

Why engine called in that way?

At 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".

More Repositories

1

rusty-shooter

[suspended] 3d shooter written in Rust using rg3d
Rust
280
star
2

StationIapetus

3rd person shooter in the very early development phase
Rust
278
star
3

tinyaudio

TinyAudio is a cross-platform audio output library
Rust
94
star
4

hrtf

Head-Related Transfer Function (HRTF) audio signal processor.
Rust
64
star
5

rg3d-ui

Retained mode, general purpose, user interface library.
Rust
57
star
6

rg3d-sound

Sound library for games
Rust
56
star
7

FishFolly

Rust
31
star
8

rg3d-physics

Simple physics library for rg3d engine.
Rust
14
star
9

SmartPool

SmartPool is an object pool single-header library for fast object allocation. All objects inside of a pool placed in a contiguous memory block to be cache-friendly.
C++
12
star
10

rg3d-core

Shared core for rg3d engine and its external modules
Rust
12
star
11

Shooter

3D shooter based on DmitrysEngine
C
12
star
12

AutomatedLIBS

Laser-Induced Break Down Spectroscopy spectra analysis software
C#
9
star
13

tbc

Texture Block Compression (BCn) written in Rust
Rust
9
star
14

hrir_sphere_builder

Tool to create sphere from IRCAM HRIR database
C++
8
star
15

TheDwarfAdventure

2D adventure RPG with destructible world
C++
4
star
16

RutheniumSound

Advanced OpenAL & EFX Wrapper
C++
3
star
17

src

The Mine - 3D horror game with adventure elements
C++
3
star
18

OldTech

Game engine based on C99
C
2
star
19

32k-shooter

Quake-like shooter with 32k binary
C++
2
star
20

SoundWorks

Software sound engine
C
1
star
21

Simple-OpenGL-Engine

Simple engine
C++
1
star
22

uvgen

Triplanar texture coordinates generator and packer
Rust
1
star
23

rectutils

Common algorithms for rectangles (clipping, transformation, quadtree, rect packing, etc.)
Rust
1
star