The goal of the ODFAEG project is to create a game engine (based on the simplicity of the SFML project) adapted for any kind of games.
So this is a big project I started 15 years ago.
Some of existing SFML project on this forum are integrated to my engine like the thor library.
Here is the already implemented features (there are 6 modules (core, math, physics, window, graphics, network, audio) :
In the core module :
-A resource manager to hold any external resource like textures, shaders, sounds, fonts, etc... (possibility to load from memory or from files or from input stream)
-A resource cache to hold resource managers of several types.
-A variant system with visistors and multiple visitors and also an any class.
-An utility class to convert numbers to string, verifying is a string is a number, find files, etc...
-Multiple dispatching.
-A serialisation system with template archives like the one of the boost library.
-Timers and workers.
In the math module :
-Vectors and matrices. (I still have to implement quaternions)
-Compute min and max (extends).
-Computing the position of a dynamic object in a curve with provided elapsed time.
-Creating distributions.
-Rays, planes and triangles.
-Getting the path between an actual object position and another position in the scene.
In the physics module :
-5 bounding volumes (AABBs, OBBs, Spheres, Ellipsoïds, Polygons)
-Getting informations when collisions happen.
-Emmiters, Particules and Affectors.
-Computing position depending on physics. (jumping, falling, flying, etc...) I've not finished this feature yet.
In the window module :
-An interface to create windows (SFML windows for opengl or GLFW window for vulkan)
-Generic events to have smfl events or glfw events.
-Possibility to create custom events with signals and slots.
In the graphic module :
-Possibility to render 2D or 3D objects.
-Possibility to choose between an Entity base class and inheritance or an ECS system with entt. (I need both implementations depending on which projet I want to create)
-Possibility to use opengl or vulkan api for the rendering api. (I haven't finished the vulkan implementation yet)
-5 types of renders (PerPixelLinkedListRenderer (OIT), ShadowMappingRenderer, ReflectRefractRenderer, LightMappingRenderer and RaytracingRenderer) I've not finished the raytracing renderer yet.
-A component managers to be able to display renderers in a specific order. (layered renderers)
-Textures management. (2D, cubemaps) 3D textures management not implemented yet..
-Terrain generation (2D or 3D with heights) and possibility to get the height at a specific position.
-I've still to test the labyrinth generation yet in 2D and 3D.
-9 entities types to render. (2D/3DWalls, 2D decors, 2D animations with interpolation, particles systems, 3D models, the skybox, tiles, bigtiles, ponctual lights) I haven't finished to implement directionnal lights. I also have to implement skeletal animations.
-Animations updater, particle system updaters and visible entities updater.
-World and scene management with a grid to discart objects which are not in the camera's global bounds.
-Transformations, local and global bounds.
-Vertices batching and indirect rendering to reduce the number of draw calls.
-Instanced rendering.
-billboarding.
-Views management. (2D/3D)
-Possibility to create custom entities or renderers or workers/timers.
-RenderTextures for offscreen rendering.
-Shaders management.
-GUIs and overlay management.
-I've still to implement multi-threaded rendring.
-I've still to implement the support for androïd architectures and web games.
-I've still to implement cinematic management. ( videos)
-I've still to implement voxels management for games like minecraft.
In the audio module :
-Loading musics/sounds.
-Playing musics/sounds.
-Spatialisation of the sound.
In the network module :
-Server/Client management.
-Users management.
-TCP Packet encryption.
-TCP/UDP mode.
Tools (in progress)
-ODFAEGCreator to create scenes and editing scripts.
-Documentation and tutorials.
git rep of the project :
https://github.com/LaurentDuroisin7601/ODFAEG/tree/master