The beginnings of a powertrain
I have broken the design and implementation into several parts. First, I will begin to write the renderer. I have chosen to write this first because it is something that is not necesarilly dependant on the rest of the engine. I have decided to implement the renderer as the baseline and the rest of the engine to interface with the renderer. The renderer will be implemented using OpenGL initially. Once the OpenGL renderer is finished and the rest of the engine is under way, I may toy with implementing a parallel Direct 3D renderer to plug in as well. However, I'm not holding my breath on this one.
As for the audio subsystem, I'm going to go with OpenAL. The OpenAL seems to be a very powerful audio API that is very similar in API to OpenGL. OpenAL also allows for EAX extensions and has been used in some large scale commercial products. I am shooting to implement a full surround sound environment with sound physics, which I will discuss later on as I learn more about the physics SDK and OpenAL.
I would like to attach a physics engine to the engine structure as well. I have been quite attracted to Aegia's PhysX physics SDK by the good word that has been going around about it and their quite astonishing hardware physics processor that is now on the market. If I remember correctly, a modern CPU can support full life-like physics for approximately 10-15 objects simultaneously, whereas the Aegeia PhysX processor is capable of handling 40,000 objects. I vaguely remember this number, so I'd take it with a grain of salt. If you want an idea of what I'm talking about, refer to the Cell Factor demo video.
As for the core of the engine itself, this is still somewhat up in the air. I would like to implement a threaded architecture to support multi-core systems. I would like to seperate the I/O systems, such as the renderer, input, audio from intensive all CPU functions such as physics, AI, and resource loading.
I would like to also write in support for heightmaps for wide open terrain as well as BSP support for tight high resolution and polygon areas. Perhaps merging the two into a unique format for crossing the boundries between tight close quarters or wide open areas.
I have earnestly begun work on the renderer, and have a good chunk in place currently. I have the ability to cache vertex arrays in the renderer, with the option of using vertex buffers to store vertex array data in video RAM. The renderer has basic texturing capabilities and a quite half-assed very very basic lighting implementation just to test it. I will discuss the renderer in a later post, I just wanted to get some stuff out of my head and in writing.