Dapple is intended to be a modern and optimized 3D game engine written mostly in C++ without the use of any third party libraries.
I decided to go with OpenGL for Dapple's graphics API for its reliable cross platform functionality.
Some libraries have become so standardized that it was quite difficult to figure out how to get OpenGL working without them. In particular, GLFW for creating windows with an OpenGL context and GLAD for loading OpenGL functions. But thankfully I was able to find a few scraps on the internet pointing me in the right direction and figured the rest out myself.
The goal is to make maximum use of OpenGL's AZDO (Approaching Zero Driver Overhead) features to free up the CPU as much as possible.
I have developed my own math library for Dapple using C++ intrinsics, capable of all necessary operations on vectors, matrices, and quaternions.
I have implemented many common forms of custom dynamic memory management for optimized performance and all are capable of aligned allocations:
Stack Allocator
Double-Ended Stack Allocator
Pool Allocator
Single-Frame Allocator
Double-Buffered Allocator
The asset manager uses a thread-safe priority queue to asynchronously load files from the disk in the background.
Strings are a common cause of slowdown in game engines with their relatively large memory requirements and slow copies.
To combat this, I have opted to ban the use of C++ std::string in my engine. As much as possible, instances of strings are hashed at compile time into more manageable integer types. When the use of a string is absolutely necessary, I have opted to favor C style strings so that any copying is intentional and obvious.