Skip to content
Timur Gafarov edited this page May 14, 2018 · 42 revisions

Dagon is a 3D game engine for D language based on OpenGL 3.3 and SDL2. Main goal of this project is to implement a new, modern engine for Atrium, and hence Dagon is mainly targeted to first person action games, but nothing stops you from using it in a game of any genre.

Creating assets

Dagon is a framework-style engine, meaning that it is controlled programmatically and doesn't provide you with an editor. How you will build your scenes is up to you. You are free to use any existing 3D modelling package or level editor to create your scenes, and then export them to custom format - it would require writing an importer code though. We are planning to add a built-in scene format with Blender exporter to ease things a bit, but you are recommended to use your own asset pipeline specific to your game, so that you won't be limited in any way.

Currently Dagon supports loading OBJ and IQM models.

Extending

Dagon is written with extendability in mind, so you can easily add your own drawable objects, entity behaviours, materials and asset loaders. Drawable can be anything you want - you can manually create meshes and animate them. With behaviours you can dynamically attach custom data and functionality to game entities. Your materials can use custom GLSL shaders and parameters, and your asset loaders help Dagon understand files that you want to load from disk - these can be 3D models, levels, save files, etc.

Memory Management

Dagon doesn't use D's garbage collector and manages all of its data manually with New and Delete functions. You are also expected to do so. You still can use garbage collected data in Dagon, but this may result in weird bugs, so you are strongly recommended to do things our way. Most part of the engine is built around ownership model - every object belongs to some other object (owner), and deleting the owner will delete all of its owned objects. This allows semi-automatic memory management - you have to manually delete only root owner, which usually is an Application object. When creating objects, it is recommended to make scene's assetManager their owner.

Further Reading

See tutorials.

Clone this wiki locally