|
|
@ -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(mi">0); |
|
|
|
rlActiveTextureSlot(n">texUnitPosition); |
|
|
|
rlEnableTexture(gBuffer.positionTexture); |
|
|
|
rlActiveTextureSlot(mi">1); |
|
|
|
rlActiveTextureSlot(n">texUnitNormal); |
|
|
|
rlEnableTexture(gBuffer.normalTexture); |
|
|
|
rlActiveTextureSlot(mi">2); |
|
|
|
rlActiveTextureSlot(n">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++) |
|
|
|