From 2ddc4bacba8fc6809de924c3d6912d4812226231 Mon Sep 17 00:00:00 2001 From: Ray <raysan5@gmail.com> Date: Mon, 6 May 2019 09:41:54 +0200 Subject: [PATCH] Example review --- .../{palette-switch.fs => palette_switch.fs} | 58 +++++++++--------- .../{palette-switch.fs => palette_switch.fs} | 54 ++++++++--------- .../{palette-switch.fs => palette_switch.fs} | 60 +++++++++---------- examples/shaders/shaders_palette_switch.c | 60 +++++++------------ 4 files changed, 106 insertions(+), 126 deletions(-) rename examples/shaders/resources/shaders/glsl100/{palette-switch.fs => palette_switch.fs} (96%) rename examples/shaders/resources/shaders/glsl120/{palette-switch.fs => palette_switch.fs} (96%) rename examples/shaders/resources/shaders/glsl330/{palette-switch.fs => palette_switch.fs} (85%) diff --git a/examples/shaders/resources/shaders/glsl100/palette-switch.fs b/examples/shaders/resources/shaders/glsl100/palette_switch.fs similarity index 96% rename from examples/shaders/resources/shaders/glsl100/palette-switch.fs rename to examples/shaders/resources/shaders/glsl100/palette_switch.fs index 65a7bd299..7f09137e7 100644 --- a/examples/shaders/resources/shaders/glsl100/palette-switch.fs +++ b/examples/shaders/resources/shaders/glsl100/palette_switch.fs @@ -1,29 +1,29 @@ -#version 100 - -precision mediump float; - -const int colors = 8; - -// Input vertex attributes (from vertex shader) -varying vec2 fragTexCoord; -varying vec4 fragColor; - -// Input uniform values -uniform sampler2D texture0; -uniform ivec3 palette[colors]; - -void main() -{ - // Texel color fetching from texture sampler - vec4 texelColor = texture(texture0, fragTexCoord) * fragColor; - - // Convert the (normalized) texel color RED component (GB would work, too) - // to the palette index by scaling up from [0, 1] to [0, 255]. - int index = int(texelColor.r * 255.0); - ivec3 color = palette[index]; - - // Calculate final fragment color. Note that the palette color components - // are defined in the range [0, 255] and need to be normalized to [0, 1] - // for OpenGL to work. - gl_FragColor = vec4(color / 255.0, texelColor.a); -} +#version 100 + +precision mediump float; + +const int colors = 8; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform ivec3 palette[colors]; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture(texture0, fragTexCoord) * fragColor; + + // Convert the (normalized) texel color RED component (GB would work, too) + // to the palette index by scaling up from [0, 1] to [0, 255]. + int index = int(texelColor.r * 255.0); + ivec3 color = palette[index]; + + // Calculate final fragment color. Note that the palette color components + // are defined in the range [0, 255] and need to be normalized to [0, 1] + // for OpenGL to work. + gl_FragColor = vec4(color / 255.0, texelColor.a); +} diff --git a/examples/shaders/resources/shaders/glsl120/palette-switch.fs b/examples/shaders/resources/shaders/glsl120/palette_switch.fs similarity index 96% rename from examples/shaders/resources/shaders/glsl120/palette-switch.fs rename to examples/shaders/resources/shaders/glsl120/palette_switch.fs index b4384502d..ab3f79c78 100644 --- a/examples/shaders/resources/shaders/glsl120/palette-switch.fs +++ b/examples/shaders/resources/shaders/glsl120/palette_switch.fs @@ -1,27 +1,27 @@ -#version 120 - -const int colors = 8; - -// Input fragment attributes (from fragment shader) -varying vec2 fragTexCoord; -varying vec4 fragColor; - -// Input uniform values -uniform sampler2D texture0; -uniform ivec3 palette[colors]; - -void main() -{ - // Texel color fetching from texture sampler - vec4 texelColor = texture(texture0, fragTexCoord) * fragColor; - - // Convert the (normalized) texel color RED component (GB would work, too) - // to the palette index by scaling up from [0, 1] to [0, 255]. - int index = int(texelColor.r * 255.0); - ivec3 color = palette[index]; - - // Calculate final fragment color. Note that the palette color components - // are defined in the range [0, 255] and need to be normalized to [0, 1] - // for OpenGL to work. - gl_FragColor = vec4(color / 255.0, texelColor.a); -} +#version 120 + +const int colors = 8; + +// Input fragment attributes (from fragment shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform ivec3 palette[colors]; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture(texture0, fragTexCoord) * fragColor; + + // Convert the (normalized) texel color RED component (GB would work, too) + // to the palette index by scaling up from [0, 1] to [0, 255]. + int index = int(texelColor.r * 255.0); + ivec3 color = palette[index]; + + // Calculate final fragment color. Note that the palette color components + // are defined in the range [0, 255] and need to be normalized to [0, 1] + // for OpenGL to work. + gl_FragColor = vec4(color / 255.0, texelColor.a); +} diff --git a/examples/shaders/resources/shaders/glsl330/palette-switch.fs b/examples/shaders/resources/shaders/glsl330/palette_switch.fs similarity index 85% rename from examples/shaders/resources/shaders/glsl330/palette-switch.fs rename to examples/shaders/resources/shaders/glsl330/palette_switch.fs index 61b532ed3..7c8a488cd 100644 --- a/examples/shaders/resources/shaders/glsl330/palette-switch.fs +++ b/examples/shaders/resources/shaders/glsl330/palette_switch.fs @@ -1,30 +1,30 @@ -#version 330 - -const int colors = 8; - -// Input fragment attributes (from fragment shader) -in vec2 fragTexCoord; -in vec4 fragColor; - -// Input uniform values -uniform sampler2D texture0; -uniform ivec3 palette[colors]; - -// Output fragment color -out vec4 finalColor; - -void main() -{ - // Texel color fetching from texture sampler - vec4 texelColor = texture(texture0, fragTexCoord)*fragColor; - - // Convert the (normalized) texel color RED component (GB would work, too) - // to the palette index by scaling up from [0, 1] to [0, 255]. - int index = int(texelColor.r * 255.0); - ivec3 color = palette[index]; - - // Calculate final fragment color. Note that the palette color components - // are defined in the range [0, 255] and need to be normalized to [0, 1] - // for OpenGL to work. - finalColor = vec4(color / 255.0, texelColor.a); -} +#version 330 + +const int colors = 8; + +// Input fragment attributes (from fragment shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform ivec3 palette[colors]; + +// Output fragment color +out vec4 finalColor; + +void main() +{ + // Texel color fetching from texture sampler + vec4 texelColor = texture(texture0, fragTexCoord)*fragColor; + + // Convert the (normalized) texel color RED component (GB would work, too) + // to the palette index by scaling up from [0, 1] to [0, 255]. + int index = int(texelColor.r*255.0); + ivec3 color = palette[index]; + + // Calculate final fragment color. Note that the palette color components + // are defined in the range [0, 255] and need to be normalized to [0, 1] + // for OpenGL to work. + finalColor = vec4(color/255.0, texelColor.a); +} diff --git a/examples/shaders/shaders_palette_switch.c b/examples/shaders/shaders_palette_switch.c index d0b561907..a2fa0b278 100644 --- a/examples/shaders/shaders_palette_switch.c +++ b/examples/shaders/shaders_palette_switch.c @@ -29,7 +29,7 @@ #define VALUES_PER_COLOR 3 static const int palettes[MAX_PALETTES][COLORS_PER_PALETTE*VALUES_PER_COLOR] = { - { + { // 3-BIT RGB 0, 0, 0, 255, 0, 0, 0, 255, 0, @@ -39,7 +39,7 @@ static const int palettes[MAX_PALETTES][COLORS_PER_PALETTE*VALUES_PER_COLOR] = { 255, 255, 0, 255, 255, 255, }, - { + { // AMMO-8 (GameBoy-like) 4, 12, 6, 17, 35, 24, 30, 58, 41, @@ -49,7 +49,7 @@ static const int palettes[MAX_PALETTES][COLORS_PER_PALETTE*VALUES_PER_COLOR] = { 190, 220, 127, 238, 255, 204, }, - { + { // RKBV (2-strip film) 21, 25, 26, 138, 76, 88, 217, 98, 117, @@ -85,8 +85,8 @@ int main() // NOTE: If uniform variable could not be found in the shader, function returns -1 int paletteLoc = GetShaderLocation(shader, "palette"); - // Initial index not set, will be automatically bounded below. - int currentPalette = -1; + int currentPalette = 0; + int lineHeight = screenHeight/COLORS_PER_PALETTE; SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -96,21 +96,15 @@ int main() { // Update //---------------------------------------------------------------------------------- - int paletteIndex = currentPalette; - if (IsKeyPressed(KEY_RIGHT)) paletteIndex++; - else if (IsKeyPressed(KEY_LEFT)) paletteIndex--; + if (IsKeyPressed(KEY_RIGHT)) currentPalette++; + else if (IsKeyPressed(KEY_LEFT)) currentPalette--; - if (paletteIndex >= MAX_PALETTES) paletteIndex = 0; - else if (paletteIndex < 0) paletteIndex = MAX_PALETTES - 1; + if (currentPalette >= MAX_PALETTES) currentPalette = 0; + else if (currentPalette < 0) currentPalette = MAX_PALETTES - 1; // Send new value to the shader to be used on drawing. - // Note that we are sending RGB triplets w/o the alpha channel *only* if the current - // palette index has changed (in order to save performances). - if (currentPalette != paletteIndex) - { - currentPalette = paletteIndex; - SetShaderValueV(shader, paletteLoc, palettes[currentPalette], UNIFORM_IVEC3, COLORS_PER_PALETTE); - } + // NOTE: We are sending RGB triplets w/o the alpha channel + SetShaderValueV(shader, paletteLoc, palettes[currentPalette], UNIFORM_IVEC3, COLORS_PER_PALETTE); //---------------------------------------------------------------------------------- // Draw @@ -121,33 +115,19 @@ int main() BeginShaderMode(shader); - // Draw horizontal screen-wide rectangles with increasing "palette index". - // The used palette index is encoded in the RGB components of the pixel. - int linesPerRectangle = screenHeight / COLORS_PER_PALETTE; - int leftover = screenHeight % COLORS_PER_PALETTE; - int y = 0; - - for (int i = 0; i < COLORS_PER_PALETTE; ++i) + for (int i = 0; i < COLORS_PER_PALETTE; i++) { - int height = linesPerRectangle; - - if (leftover > 0) - { - height += 1; - leftover -= 1; - } - - DrawRectangle(0, y, screenWidth, height, (Color){ i, i, i, 255 }); - - y += height; + // Draw horizontal screen-wide rectangles with increasing "palette index" + // The used palette index is encoded in the RGB components of the pixel + DrawRectangle(0, lineHeight*i, GetScreenWidth(), lineHeight, (Color){ i, i, i, 255 }); } EndShaderMode(); - DrawText("CURRENT PALETTE:", 10, 15, 20, RAYWHITE); - DrawText(paletteText[currentPalette], 240, 15, 20, RED); - DrawText("< >", 540, 10, 30, DARKBLUE); - + DrawText("< >", 10, 10, 30, DARKBLUE); + DrawText("CURRENT PALETTE:", 60, 15, 20, RAYWHITE); + DrawText(paletteText[currentPalette], 300, 15, 20, RED); + DrawFPS(700, 15); EndDrawing(); @@ -158,7 +138,7 @@ int main() //-------------------------------------------------------------------------------------- UnloadShader(shader); // Unload shader - CloseWindow(); // Close window and OpenGL context + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0;