Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
0.8.3:renderpass [2021/02/11 15:50] – [How to use] admin0.8.3:renderpass [2021/02/12 22:13] – [Render Targets] admin
Line 51: Line 51:
 **2) Additional opaque texture** **2) Additional opaque texture**
 ^ Texture-ID ^Format ^InternalFormat^DataType^ ^ Texture-ID ^Format ^InternalFormat^DataType^
-|Albedo Texture|BGRA (Windows) / RGBA|BGRA (Windows) / RGBA|UnsignedByte|+|Albedo Texture|BGRA (Windows) / RGBA|RGBA8|UnsignedByte|
  
 **3) Additional translucent texture** **3) Additional translucent texture**
Line 61: Line 61:
 **4) Composite texture / final output texture** **4) Composite texture / final output texture**
 ^ Texture-ID ^Format ^InternalFormat^DataType^ ^ Texture-ID ^Format ^InternalFormat^DataType^
-|Composite Texture|BGRA (Windows) / RGBA|BGRA (Windows) / RGBA|UnsignedByte|+|Composite Texture|BGRA (Windows) / RGBA|RGBA8|UnsignedByte|
  
 This texture will be filled by an embedded composite render-pass, which combines opaque and translucent albedo textures. This texture will be filled by an embedded composite render-pass, which combines opaque and translucent albedo textures.
Line 105: Line 105:
 Instead it renders __opague__-marked elements __at first__ and then all other elements. Instead it renders __opague__-marked elements __at first__ and then all other elements.
  
-__Opaque__ rendering will perform __without blending__, while for "translucent" rendering blending is activated.+__Opaque__ rendering will be performed __without blending__, while for "translucent" rendering blending will be activated.
  
 ==== Compatibility with Render-Pass ==== ==== Compatibility with Render-Pass ====
  
-For render-passes it is also allowed to use legacy rendering.+The core mechanism of render-pass handling is still available, but it might influence your final result, when using forward and legacy renderer inconsistently. 
 +Read more about [[#render-pass|render-passes]] in the following sections. 
 + 
 +You can activate legacy rendering for render-passes like in the following snippet:
  
 <file pascal> <file pascal>
Line 117: Line 120:
 [...] [...]
  
-constructor TMyRenderPass.Create();+constructor TMyRenderPass.Create(AOwner : TComponent; 
 +  const AId : String = 'MyRenderPass1');
 begin begin
   inherited;   inherited;
Line 135: Line 139:
 ^ Type ^ Description ^ ^ Type ^ Description ^
 | TRenderPassType.Pre | render-pass will be executed before main loop. | | TRenderPassType.Pre | render-pass will be executed before main loop. |
-| TRenderPassType.Intermediate | render-pass will be executed in between main loop (**very ineffective** - because executed each renderlist element) |+| TRenderPassType.Intermediate | render-pass will be executed in between main loop (**not recommended - very ineffective** - because executed each renderlist element) |
 | TRenderPassType.Post | render-pass will be executed after main loop. | | TRenderPassType.Post | render-pass will be executed after main loop. |
  
Line 149: Line 153:
  
 //Elder methods: RenderListToContext and RectToContext were removed while pipeline refactoring.// //Elder methods: RenderListToContext and RectToContext were removed while pipeline refactoring.//
- 
-The [[FBO|framebuffer object (FBO)]] is a structure inside of each render-pass and the main-loop. Render results are stored into that buffers. This allows to forward results from one step to another. 
  
 ^ Type ^ Description ^ ^ Type ^ Description ^
Line 159: Line 161:
 FMethod := TRenderPassMethod.RenderListToFBO; FMethod := TRenderPassMethod.RenderListToFBO;
 </file> </file>
 +
 +The [[FBO|framebuffer object (FBO)]] is a structure inside of each render-pass and the main-loop. 
 +(Or better to say: A structure in each context of a TRenderer).
 +
 +Render results are stored into that buffers. This allows to forward results from one step to another.
  
 ==== Rendering Procedure ==== ==== Rendering Procedure ====
  
 Because it's not enough to tell the renderer what and where to render, we need to define a way of rendering. Because it's not enough to tell the renderer what and where to render, we need to define a way of rendering.
-Therefore the render-pass controller supplies a property FRenderProc.+Therefore the render-pass controller supplies a property **FRenderProc**.
 Currently there are 2 ways defined: Currently there are 2 ways defined:
   * DefaultRendering   * DefaultRendering
Line 198: Line 205:
  
 ^Flag^Description^ ^Flag^Description^
-|TRendererFlag.IgnoreRenderTargets|Will not create any of the meta-textures (Albedo, TranslucentAlbedo, Alpha, Position), but will create the final composite texture of RGBA8 format.|+|TRendererFlag.IgnoreRenderTargets|Will not create any of the meta-textures (Albedo, TranslucentAlbedo, Alpha, Position), but will create the final composite texture of BGRA (Windows) / RGBA format.|
 |TRendererFlag.IgnoreCompositeCtrl|Will not create the embedded composite render pass to merge meta-textures.| |TRendererFlag.IgnoreCompositeCtrl|Will not create the embedded composite render pass to merge meta-textures.|
  
Line 255: Line 262:
  
 1) For **RenderListToFBO** rendering: 1) For **RenderListToFBO** rendering:
-   * Create a global material shader for all objects and override the object-specific shaders +   * Create a global material shader for all objects and override the object-specific shaders (f.e. depth value rendering) 
-   * Use the object-specific shaders, by returning NIL in the CreateMaterial() method+   * Use the object-specific shaders, by returning NIL in the CreateMaterial() method (f.e. reflection rendering) 
 2) For **RectToFBO** rendering: 2) For **RectToFBO** rendering:
-   * Create a global material shader+   * Create a global material shader (f.e. blur post-effect)
  
 To create an global material shader for your render-pass you need to extend **TGorillaRenderPassMaterialSource** and **TGorillaRenderPassMaterial**. To create an global material shader for your render-pass you need to extend **TGorillaRenderPassMaterialSource** and **TGorillaRenderPassMaterial**.