I'm currently designing a 3D game engine in C#. I'm not sure why, but I feel like it's appropriate to mention that the engine will soon support multiple rendering backends (OpenGL 4.6, Direct3D 12, etc).
I'm a point where i have 5 different projects within a solution in VS, and one more project that I use as a place to test all my code.
Currently this is how my solution looks:
The organisation is as follows:
- Core: Contains interfaces, enumerations and a few classes that the other projects to reference, for example it contains interfaces that are used for the rendering backend of engine. The project references Math.
- Launcher: Contains classes used to launch a game with the engine, it also reference the other 4 projects.
- Math: Contains vectors, matrices and a math helper class.
- Platform: Contains the rendering abstraction layers for OpenGL and soon Direct3D (This project reference Core amd Math because it contains interfaces for the rendering backend. It also does window and input handling.
- Rendering: This project references Core and Platform and contains higher level classes (such as mesh, material and a transform class)
All 4 projects are compiled to DLLs.
The TestGame
project references all 4 projects to use all of the engines features.
Is the architecture of the engine going to hold up when I get further into development? Or should all these projects be mashed into one project?