mirror of
https://github.com/raysan5/raylib.git
synced 2025-09-07 11:58:13 +00:00
Reviewed shaders_deferred_render (#4676)
Fixed: g-buffer textures binding Fixed: Clearing screen with white would leak onto g-buffer textures Reviewed comments
This commit is contained in:
@@ -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++)
|
||||
|
Reference in New Issue
Block a user