OWGameEngine began as a project to learn OpenGL and it is still performing that role. At it's heart it is a simple and understandable set of classes which can be inherited off to leverage core functionality. The design of the main Game Loop lends itself to efficient multi threading (hopefully]). The engine:
- Focusses on the higher level objects.
- Uses a Movie Based paradigm (Movie/Scenes/Actors/Scenery)
- Is based on modern C++/OpenGL 4.5/Windows (Visual Studio 2017)/GLFW/GLM
- The nature of the main game loop favours multi-threading
- Is a work in progress
- ResourceManager. Singleton resource cache
- Uses fixed timestep with 'catch up' integration prior to rendering
- UserInput. Wraps physical implementation of Keyboard and pointing device and emits logical commands via callbacks
- Scene. Examples of a scene include Main (where all the gameplay is), Welcome screen or Key mapping screen. Provides access to the Render functionality. Apart from setup code is pretty empty.
- Movie. Provides a fixed timestep physics step and a variable time step render step inside a Game Loop. Swaps Scenes in and out
- SafeAndRestore. Like the name says.
- MacroRecorder. Provides the ability to replay game events. Must be deterministic. Only possible with fixed physics timesteps.
- Camera
- GLFW
- glad
- glm
- nlohmann json
- FreeType
- String Billboards (fixed and variable sized)
- Font Atlas Strings
- Run Loop (fixed timestep updates/variable time step Render) based on Fix Your Timestep article by Glen Fiedler
- Resource Caching
- Inheritance Based Scene Heirachy
- Decentralised Scene Switching Logic
- Mouse/Keyboard callback Messaging
- User Input Abstraction
- A mongrelled Actor/Component Architecture (hopefully best of both worlds)
- No smart pointers (Ownership is striclty defined)
- Quaternian based Camera.
- Transparent Safe and Restore
- Transparent Macro Recording and Playback
- Efficient Rendering mechanism
- Boilerplate Key Mapping Scene
- Linux Port
- Many implementation details of efficient OpenGL
- CMake functionality
- Separation of core functionality and learning game into different repos.
- Addition os third party libraries as git submodules
- Scalable Multi-Threading design. This paper by Michael Silverman Scalable Multithreaded Game Engine Using Transactional Memory looks promising.
- Scalable Collision Detection. This looks good Collision Detection using Ellipsoids
- Steam Virtual Reality