The key features are:
- Triangle Rendering
- 32-Bit Colour
- Depth Buffer / Z Buffer
- Perspective Correction
- Supports Multiple Textures
- Vertex and Fragment (Pixel) Shaders
- Multi-Threaded Rendering
- Small Filesize
The most important goal for WebRender is to provide compatiblity with as many browsers and devices as possible. Due to the compatiblity problems WebGL has with older devices, it was important for us to reach those devices that are still in use, but are not new enough to support WebGL. On general principle, WebRender will work in any browser and device from 2010 onwards, all it requires is support for the canvas element in the HTMl5 standard.
Here is the Browser compatibility list:
This is the known mobile device compatibility list. This list is not complete but can be used to determine what range this is compatible with.
|HTC One M8||2014||True||Partial||True|
|HTC One XL||2012||True||Partial||Partial|
|Samsung Galaxy Tab 10.1||2011||True||Partial||False|
Due to the advent of smart TVs and home consoles with internet connections, WebRender has also been tested on a number of other devices.
|LG Smart TV LS57||2011||True||False||False|
Proof of Concept
This first stage from March to June in 2013 was a very simple implementation of a fixed rendering pipeline that I had learnt, but never fully implemented. The results were a very simple, but reasonably well running scene of a cube on a green plane. This provided my first proof of concept, and gave me something to work from.
From this I looked to add more important features to my pipeline, first having multiple objects and basic animations, then implementing a texturing technique. This took place over July and August, and ended with a simple implementation of lighting where faces would be dulled if not pointed at the light source. It was here that I first ran into the problem of per-pixel calculations in order to perspective-correct my textures. This problem proved to be the main performance roadblock throughout the project.
The project was divided over 6 main stages, each one lasting about a month. The first stage of development was to extract the graphics rendering from the game engine it has been built into, then create a testing framework in order to track performance over the project.
Next the shader system was implemented in order to turn it into a programmable graphics pipeline. Following this, the entire library was evaluated and many sections of old code were written to run faster. Some of rasterisation code before this was still unoptimised testing code from early 2013. This greatly improved the performance of the library.
In early 2015 I developed health problems that significantly effected how much testing and development I could achieve. Despite this, the entire project, except for user documentation, was completed by June 2015, but then the project was put on hold for several months while I was unable to use a computer. The final version and website for the library was finally released in December 2015.
Due to my ongoing health concerns there are no current plans to extend the library. It would also be rather pointless to add more advanced features to the library at this point seeing that even simple scenes are very taxing to render.