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:49] – [Legacy-Renderer] 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 74: Line 74:
   * Transparency is no longer automatically handled - may produce fragments or incorrect values   * Transparency is no longer automatically handled - may produce fragments or incorrect values
   * **Gorilla3D default materials will no longer work properly!**   * **Gorilla3D default materials will no longer work properly!**
 +  * FMX / Gorilla3D still modify context state settings for blending, coloring, depth-testing, ...
  
 What you can do: What you can do:
Line 88: Line 89:
 ==== How to use ==== ==== How to use ====
  
-Since v0.8.3.1778 Gorilla3D allows to switch to legacy renderer by viewport property.+Since v0.8.3.1778 Gorilla3D allows to switch to legacy renderer by viewport property.
  
 <file pascal> <file pascal>
Line 104: 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 116: Line 120:
 [...] [...]
  
-constructor TMyRenderPass.Create();+constructor TMyRenderPass.Create(AOwner : TComponent; 
 +  const AId : String = 'MyRenderPass1');
 begin begin
   inherited;   inherited;
Line 134: 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 148: 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 158: 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 197: 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 254: 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**.