This is my home game engine and experimental platform. Including work done while attending the Guildhall@SMU, this engine is designed to operate on as many cores as possible without using any locking mechanisms, such as mutexes or critical sections. It features multiple lockfree data types, deferred rendering, a highly efficient graph and job based task management, extensive use of SIMD, as well as custom memory management, windowing, fonts, input, and I/O systems.
Lockfree Data Types
- data_buffer: multiple producer, multiple consumer ring buffer
- data_cluster: dynamic size block of data destined for the data buffer
- queue
- set (fixed size array)
- stack
- state_stack (like a stack, but always has at least one element)
Rendering
- Currently OpenGL based, designed to be easy to switch
- Command buffer based, all commands (including creation/destruction) are deferred
- One dedicated thread to process render commands
- Entirely lockfree
- Guaranteed command state and ordering
Task Management
- Schedulerless task management
- One worker thread per core
- Supports core reservations (e.g., rendering thread)
- Individual jobs or graph based dependency trees
- Graphs can be built offline and optimized for I/D cache coherency