Skip to content

Commit

Permalink
Reviewed shaders_deferred_render
Browse files Browse the repository at this point in the history
Fixed: g-buffer textures binding
Fixed: Clearing screen with white would leak onto g-buffer textures
Reviewed comments
  • Loading branch information
veins1 authored Jan 10, 2025
1 parent 433cc23 commit 00a80e1
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions examples/shaders/shaders_deferred_render.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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
Expand All @@ -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++)
Expand Down

0 comments on commit 00a80e1

Please sign in to comment.