diff --git a/examples/Makefile b/examples/Makefile index 82198b76e..fe0ee9fbd 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -563,7 +563,7 @@ SHADERS = \ shaders/shaders_multi_sample2d \ shaders/shaders_write_depth \ shaders/shaders_hybrid_render \ - shaders/shaders_deferred_shading + shaders/shaders_deferred_render AUDIO = \ audio/audio_module_playing \ diff --git a/examples/Makefile.Web b/examples/Makefile.Web index f956ff7ce..c57453ab3 100644 --- a/examples/Makefile.Web +++ b/examples/Makefile.Web @@ -469,7 +469,7 @@ SHADERS = \ shaders/shaders_multi_sample2d \ shaders/shaders_write_depth \ shaders/shaders_hybrid_render \ - shaders/shaders_deferred_shading + shaders/shaders_deferred_render AUDIO = \ audio/audio_module_playing \ diff --git a/examples/README.md b/examples/README.md index 8ecd7741e..0fed8acd0 100644 --- a/examples/README.md +++ b/examples/README.md @@ -176,7 +176,7 @@ Examples using raylib shaders functionality, including shaders loading, paramete | 114 | [shaders_mesh_instancing](shaders/shaders_mesh_instancing.c) | shaders_mesh_instancing | ⭐️⭐️⭐️⭐️ | 3.7 | **4.2** | [seanpringle](https://github.com/seanpringle) | | 115 | [shaders_multi_sample2d](shaders/shaders_multi_sample2d.c) | shaders_multi_sample2d | ⭐️⭐️☆☆ | 3.5 | 3.5 | [Ray](https://github.com/raysan5) | | 116 | [shaders_spotlight](shaders/shaders_spotlight.c) | shaders_spotlight | ⭐️⭐️☆☆ | 2.5 | 3.7 | [Chris Camacho](https://github.com/codifies) | -| 117 | [shaders_deferred_shading](shaders/shaders_deferred_shading.c) | shaders_deferred_shading | ⭐️⭐️⭐️⭐️ | 4.5 | 4.5 | [Justin Andreas Lacoste](https://github.com/27justin) | +| 117 | [shaders_deferred_render](shaders/shaders_deferred_render.c) | shaders_deferred_render | ⭐️⭐️⭐️⭐️ | 4.5 | 4.5 | [Justin Andreas Lacoste](https://github.com/27justin) | ### category: audio diff --git a/examples/shaders/resources/shaders/glsl330/deferred_shading.fs b/examples/shaders/resources/shaders/glsl330/deferred_shading.fs index 64de325ff..c9c6a313f 100644 --- a/examples/shaders/resources/shaders/glsl330/deferred_shading.fs +++ b/examples/shaders/resources/shaders/glsl330/deferred_shading.fs @@ -9,11 +9,11 @@ uniform sampler2D gNormal; uniform sampler2D gAlbedoSpec; struct Light { - int enabled; - int type; // Unused in this demo. - vec3 position; - vec3 target; // Unused in this demo. - vec4 color; + int enabled; + int type; // Unused in this demo. + vec3 position; + vec3 target; // Unused in this demo. + vec4 color; }; const int NR_LIGHTS = 4; @@ -24,31 +24,32 @@ const float QUADRATIC = 0.032; const float LINEAR = 0.09; void main() { - vec3 fragPosition = texture(gPosition, texCoord).rgb; - vec3 normal = texture(gNormal, texCoord).rgb; - vec3 albedo = texture(gAlbedoSpec, texCoord).rgb; - float specular = texture(gAlbedoSpec, texCoord).a; + vec3 fragPosition = texture(gPosition, texCoord).rgb; + vec3 normal = texture(gNormal, texCoord).rgb; + vec3 albedo = texture(gAlbedoSpec, texCoord).rgb; + float specular = texture(gAlbedoSpec, texCoord).a; - vec3 ambient = albedo * vec3(0.1f); - vec3 viewDirection = normalize(viewPosition - fragPosition); + vec3 ambient = albedo * vec3(0.1f); + vec3 viewDirection = normalize(viewPosition - fragPosition); - for(int i = 0; i < NR_LIGHTS; ++i) { - if(lights[i].enabled == 0) continue; - vec3 lightDirection = lights[i].position - fragPosition; - vec3 diffuse = max(dot(normal, lightDirection), 0.0) * albedo * lights[i].color.xyz; + for(int i = 0; i < NR_LIGHTS; ++i) + { + if(lights[i].enabled == 0) continue; + vec3 lightDirection = lights[i].position - fragPosition; + vec3 diffuse = max(dot(normal, lightDirection), 0.0) * albedo * lights[i].color.xyz; - vec3 halfwayDirection = normalize(lightDirection + viewDirection); - float spec = pow(max(dot(normal, halfwayDirection), 0.0), 32.0); - vec3 specular = specular * spec * lights[i].color.xyz; + vec3 halfwayDirection = normalize(lightDirection + viewDirection); + float spec = pow(max(dot(normal, halfwayDirection), 0.0), 32.0); + vec3 specular = specular * spec * lights[i].color.xyz; - // Attenuation - float distance = length(lights[i].position - fragPosition); - float attenuation = 1.0 / (1.0 + LINEAR * distance + QUADRATIC * distance * distance); - diffuse *= attenuation; - specular *= attenuation; - ambient += diffuse + specular; - } + // Attenuation + float distance = length(lights[i].position - fragPosition); + float attenuation = 1.0 / (1.0 + LINEAR * distance + QUADRATIC * distance * distance); + diffuse *= attenuation; + specular *= attenuation; + ambient += diffuse + specular; + } - finalColor = vec4(ambient, 1.0); + finalColor = vec4(ambient, 1.0); } diff --git a/examples/shaders/resources/shaders/glsl330/deferred_shading.vs b/examples/shaders/resources/shaders/glsl330/deferred_shading.vs index d6bd88d1c..f2b1bd7c4 100644 --- a/examples/shaders/resources/shaders/glsl330/deferred_shading.vs +++ b/examples/shaders/resources/shaders/glsl330/deferred_shading.vs @@ -6,6 +6,6 @@ layout (location = 1) in vec2 vertexTexCoord; out vec2 texCoord; void main() { - gl_Position = vec4(vertexPosition, 1.0); - texCoord = vertexTexCoord; + gl_Position = vec4(vertexPosition, 1.0); + texCoord = vertexTexCoord; } diff --git a/examples/shaders/shaders_deferred_shading.c b/examples/shaders/shaders_deferred_render.c similarity index 97% rename from examples/shaders/shaders_deferred_shading.c rename to examples/shaders/shaders_deferred_render.c index 1aacd88ef..58d4b1dd9 100644 --- a/examples/shaders/shaders_deferred_shading.c +++ b/examples/shaders/shaders_deferred_render.c @@ -48,8 +48,7 @@ int main(void) { const int screenWidth = 800; const int screenHeight = 450; - InitWindow(screenWidth, screenHeight, "raylib [shaders] example - deferred shading"); - + InitWindow(screenWidth, screenHeight, "raylib [shaders] example - deferred render"); Camera camera = { 0 }; camera.position = (Vector3){ 5.0f, 4.0f, 5.0f }; // Camera position @@ -70,12 +69,12 @@ int main(void) { "resources/shaders/glsl330/deferred_shading.fs"); deferredShader.locs[SHADER_LOC_VECTOR_VIEW] = GetShaderLocation(deferredShader, "viewPosition"); - // Initialize the G-buffer GBuffer gBuffer = { 0 }; gBuffer.framebuffer = rlLoadFramebuffer(screenWidth, screenHeight); - if(!gBuffer.framebuffer) { + if(!gBuffer.framebuffer) + { TraceLog(LOG_WARNING, "Failed to create framebuffer"); exit(1); } @@ -93,13 +92,11 @@ int main(void) { // Activate the draw buffers for our framebuffer rlActiveDrawBuffers(3); - // Now we attach our textures to the framebuffer. rlFramebufferAttach(gBuffer.framebuffer, gBuffer.positionTexture, RL_ATTACHMENT_COLOR_CHANNEL0, RL_ATTACHMENT_TEXTURE2D, 0); rlFramebufferAttach(gBuffer.framebuffer, gBuffer.normalTexture, RL_ATTACHMENT_COLOR_CHANNEL1, RL_ATTACHMENT_TEXTURE2D, 0); rlFramebufferAttach(gBuffer.framebuffer, gBuffer.albedoSpecTexture, RL_ATTACHMENT_COLOR_CHANNEL2, RL_ATTACHMENT_TEXTURE2D, 0); - // Finally we attach the depth buffer. gBuffer.depthRenderbuffer = rlLoadTextureDepth(screenWidth, screenHeight, true); rlFramebufferAttach(gBuffer.framebuffer, gBuffer.depthRenderbuffer, RL_ATTACHMENT_DEPTH, RL_ATTACHMENT_RENDERBUFFER, 0); @@ -107,7 +104,8 @@ int main(void) { // Make sure our framebuffer is complete. // NOTE: rlFramebufferComplete() automatically unbinds the framebuffer, so we don't have // to rlDisableFramebuffer() here. - if(rlFramebufferComplete(gBuffer.framebuffer) != true) { + if(rlFramebufferComplete(gBuffer.framebuffer) != true) + { TraceLog(LOG_WARNING, "Framebuffer is not complete"); exit(1); } @@ -139,7 +137,8 @@ int main(void) { const float CUBE_SCALE = 0.25; Vector3 cubePositions[MAX_CUBES]; float cubeRotations[MAX_CUBES]; - for(int i = 0; i < MAX_CUBES; i++) { + for(int i = 0; i < MAX_CUBES; i++) + { cubePositions[i] = (Vector3) { .x = (float)(rand() % 10) - 5, .y = (float)(rand() % 5), @@ -161,7 +160,8 @@ int main(void) { //--------------------------------------------------------------------------------------- // Main game loop - while (!WindowShouldClose()) { + while (!WindowShouldClose()) + { // Update //---------------------------------------------------------------------------------- UpdateCamera(&camera, CAMERA_ORBITAL); @@ -205,7 +205,8 @@ int main(void) { DrawModel(model, Vector3Zero(), 1.0f, WHITE); DrawModel(cube, (Vector3) { 0.0, 1.0f, 0.0 }, 1.0f, WHITE); - for(int i = 0; i < MAX_CUBES; i++) { + for(int i = 0; i < MAX_CUBES; i++) + { Vector3 position = cubePositions[i]; DrawModelEx(cube, position, (Vector3) { 1, 1, 1 }, cubeRotations[i], (Vector3) { CUBE_SCALE, CUBE_SCALE, CUBE_SCALE }, WHITE); @@ -219,7 +220,8 @@ int main(void) { rlDisableFramebuffer(); rlClearScreenBuffers(); // Clear color & depth buffer - switch(activeTexture) { + switch(activeTexture) + { case DEFERRED_SHADING: BeginMode3D(camera); rlDisableColorBlend(); @@ -252,7 +254,8 @@ int main(void) { // forward rendering BeginMode3D(camera); rlEnableShader(rlGetShaderIdDefault()); - for(int i = 0; i < MAX_LIGHTS; i++) { + for(int i = 0; i < MAX_LIGHTS; i++) + { if(lights[i].enabled) DrawSphereEx(lights[i].position, 0.2f, 8, 8, lights[i].color); else DrawSphereWires(lights[i].position, 0.2f, 8, 8, ColorAlpha(lights[i].color, 0.3f)); } diff --git a/examples/shaders/shaders_deferred_shading.png b/examples/shaders/shaders_deferred_render.png similarity index 100% rename from examples/shaders/shaders_deferred_shading.png rename to examples/shaders/shaders_deferred_render.png