About the New Rendering Backend
During the last few weeks a lot of work has been done in order to address the most recurring issue reported in the forums. As a new release of GameStart is closing in, I take a few minutes to present the work done on the renderer.
The need for a new renderer.
Gamestart abstracts its rendering component on a very high level with functions like DrawGeometry(). The GL3 renderer (the default, deferred, OpenGL based renderer) initial implementation goes back to 2005 (some threads with deferred examples can be found on GameDev) and implements this high level functionality directly.
The reason for such a high-level abstraction is that it leaves all the implementation details to the renderer and impose no restriction on the objects it should work with. A good example of a renderer with significantly different internals than those of GL3 is the raytraced renderer.

The shader tree sample as rendered by the raytracer.
(Notice the global illumination and the aliasing-free shadows. Thanks Thomas!)
To follow the evolutions in realtime graphics rendering the GL3 renderer went through several revisions to try and take advantage of them. Unfortunately, as several users pointed out in the forums its performance have stayed sub-par.
The middle-ground.
When I reached the "Write a modern renderer" entry of my todo list several weeks ago I was (yet again) faced with an interesting problem: OpenGL or DirectX? While the answer for GameStart obviously is OpenGL there are a few important things to consider:
- Unfortunately the driver GL implementation is not always as good as it should. For example all recent Forceware breaks the GL3 renderer on 8600 cards only. Rendering will happen as expected for 2 or 3 launches in a row then on the next launch the fps is counted in seconds per frame. I confirmed this problem on 3 different configurations and with different GL-heavy applications.
- Beside the increased stability, DirectX has better out of the box support and (it would seem) a slight speed advantage.
- OpenGL is not available on every platform out there and sometimes you'd rather not use it even if you could (I am thinking of PSGL for example, the PS3 GL implementation).
So with OpenGL not being the only obvious choice I settled for the middle-ground and abstracted objects common to every single realtime API I know of (VBO, RBO, etc...) and implemented a new EGL renderer on top of this abstraction.
Impact on existing projects.
With GameStart using a data description as generic as possible there should be no impact on existing projects. I took the opportunity of this change to cleanup some gray areas of the material description (mostly related to the blending mode) so there might be a few adjustments to do for this.

Alpha dithering is now a thing of the past.
GameStart has proper blending for shader-tree materials.
Beside that, the only changes switching to the new EGL renderer will bring are:
- MSAA support for the forward-technique path,
- True alpha support with shader based rendering (both forward and deferred paths),
- Higher quality post-processes (large kernel blooms do not echo anymore),
- An overall speed boost on all render path from 200% to 600%.
- A common base for all renderer with as little as possible work to be done to add a new platform (EGL stands for embedded GL and the current desktop renderer works on shader-enabled mobile devices such as the HTC Desire).
I should mention that EGL is not polished yet so there are significant speed gains to still be had. Seeing the huge performance increase I should mention that it's not that GL3 was poorly written, but it was 6 years old. And this was starting to show a lot. The new EGL renderer makes hardware instantiation painless to implement due to a much closer to the hardware API.
For the time being this is a shader-capable only renderer, but as things evolve a fixed-function variant will be built. In the interim GL3 stays fully functional and can still provide acceptable results for fixed-function hardware.
Integration and estimated release.
EGL already runs inside GameStart but needs to go through more testing, we are planning a release by mid-March. This renderer should allow a good number of lower-end hardware to run GameStart with decent results. Stay tuned for more updates!
- Mr.Admin's blog
- Log in or register to post comments