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
0.8.3:renderpass [2021/02/11 15:50] – [How to use] admin0.8.3:renderpass [2021/02/12 22:16] (current) – [Render-Target] 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 85: Line 85:
  
 ^ 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|
  
 ==== How to use ==== ==== How to use ====
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**.