Rendering Notation Part II
709
0
Advertisement
Rendering Notation Part II
After doing some additional thinking and exploration on the rendering notation concept, I've come to several conclusions. The key to the whole concept is to separate any rendering operation into its resources, and the operations that are performed on them. In the grand scheme of the D3D11 pipeline, this holds true for both the rendering pipeline and the compute shader pipeline - you bind resources to the pipeline and then execute an operation (via calling draw*** or dispatch) to modify an output resource.
For traditional rendering operations, the input is a vertex/index buffer, constant buffers, and shader resource views (which consist of either buffers or textures). The output is either 1 (or more) render targets for MRT, a depth stencil target, or a buffer connected for stream output to the geometry shader stage. Similarly, for compute shaders the input is a buffer or a texture (via a shader resource view or an unordered access view) and the output is a buffer or texture (via an unordered access view).
With this in mind, a rendering notation to describe an algorithm becomes quite simple. Each pipeline configuration represents an operator that utilizes a unique series of resources. I currently use a 'RenderEffectDX11' class to represent an entire pipeline configuration, so it is a natural one-to-one mapping. Performing such an 'operator' over a whole scene is equivalent to what I call a 'RenderView'. This is deceptively simple, and makes the possibility of using a completely data drive approach very attainable...
In fact, this is precisely what I was using in previous iterations of Hieroglyph - but I didn't clearly identify the data driven potential of the design [grin]. Since Hieroglyph 3 will be using SWIG for deeper scripting penetration, this is certanly where I will be taking the rendering system.
Finally, while putting together some demos for the engine, I have found a few areas where I can simplify the number of renderer calls and setup operations that an application needs to perform. So, I'm cleaning a few things up and the first release should be ready in the next couple of days. I'm looking forward to getting this design out there for review [cool].
Advertisement
Advertisement
Advertisement
Discussion