瀏覽代碼

Reviewed shaders_deferred_render (#4676)

Fixed: g-buffer textures binding
Fixed: Clearing screen with white would leak onto g-buffer textures
Reviewed comments
veins1 8 月之前
父節點
當前提交
08b089f620
共有 1 個文件被更改,包括 17 次插入17 次删除
  1. 17 17
      examples/shaders/shaders_deferred_render.c

+ 17 - 17
examples/shaders/shaders_deferred_render.c

@@ -134,14 +134,15 @@ int main(void)
     }
 
     // Now we initialize the sampler2D uniform's in the deferred shader.
-    // We do this by setting the uniform's value to the color channel slot we earlier
-    // bound our textures to.
+    // We do this by setting the uniform's values to the texture units that
+    // we later bind our g-buffer textures to.
     rlEnableShader(deferredShader.id);
-
-        rlSetUniformSampler(rlGetLocationUniform(deferredShader.id, "gPosition"), 0);
-        rlSetUniformSampler(rlGetLocationUniform(deferredShader.id, "gNormal"), 1);
-        rlSetUniformSampler(rlGetLocationUniform(deferredShader.id, "gAlbedoSpec"), 2);
-
+        int texUnitPosition = 0;
+        int texUnitNormal = 1;
+        int texUnitAlbedoSpec = 2;
+        SetShaderValue(deferredShader, rlGetLocationUniform(deferredShader.id, "gPosition"), &texUnitPosition, RL_SHADER_UNIFORM_SAMPLER2D);
+        SetShaderValue(deferredShader, rlGetLocationUniform(deferredShader.id, "gNormal"), &texUnitNormal, RL_SHADER_UNIFORM_SAMPLER2D);
+        SetShaderValue(deferredShader, rlGetLocationUniform(deferredShader.id, "gAlbedoSpec"), &texUnitAlbedoSpec, RL_SHADER_UNIFORM_SAMPLER2D);
     rlDisableShader();
 
     // Assign out lighting shader to model
@@ -208,11 +209,10 @@ int main(void)
         // Draw
         // ---------------------------------------------------------------------------------
         BeginDrawing();
-        
-            ClearBackground(RAYWHITE);
-        
+
             // Draw to the geometry buffer by first activating it
             rlEnableFramebuffer(gBuffer.framebuffer);
+            rlClearColor(0, 0, 0, 0);
             rlClearScreenBuffers();  // Clear color and depth buffer
             
             rlDisableColorBlend();
@@ -246,14 +246,14 @@ int main(void)
                     BeginMode3D(camera);
                         rlDisableColorBlend();
                         rlEnableShader(deferredShader.id);
-                            // Activate our g-buffer textures
-                            // These will now be bound to the sampler2D uniforms `gPosition`, `gNormal`,
+                            // Bind our g-buffer textures
+                            // We are binding them to locations that we earlier set in sampler2D uniforms `gPosition`, `gNormal`,
                             // and `gAlbedoSpec`
-                            rlActiveTextureSlot(0);
+                            rlActiveTextureSlot(texUnitPosition);
                             rlEnableTexture(gBuffer.positionTexture);
-                            rlActiveTextureSlot(1);
+                            rlActiveTextureSlot(texUnitNormal);
                             rlEnableTexture(gBuffer.normalTexture);
-                            rlActiveTextureSlot(2);
+                            rlActiveTextureSlot(texUnitAlbedoSpec);
                             rlEnableTexture(gBuffer.albedoSpecTexture);
 
                             // Finally, we draw a fullscreen quad to our default framebuffer
@@ -269,8 +269,8 @@ int main(void)
                     rlBlitFramebuffer(0, 0, screenWidth, screenHeight, 0, 0, screenWidth, screenHeight, 0x00000100);    // GL_DEPTH_BUFFER_BIT
                     rlDisableFramebuffer();
 
-                    // Since our shader is now done and disabled, we can draw our lights in default
-                    // forward rendering
+                    // Since our shader is now done and disabled, we can draw spheres
+                    // that represent light positions in default forward rendering
                     BeginMode3D(camera);
                         rlEnableShader(rlGetShaderIdDefault());
                             for(int i = 0; i < MAX_LIGHTS; i++)