From 317c1eaeeb2bd67e54711639cbb13391dfa44c87 Mon Sep 17 00:00:00 2001 From: Maicon Santana Date: Mon, 29 Sep 2025 16:44:48 +0100 Subject: [PATCH] Add ascii post processing (#5213) --- .../resources/shaders/glsl100/ascii.fs | 67 ++++++++++ .../resources/shaders/glsl120/ascii.fs | 65 ++++++++++ .../resources/shaders/glsl330/ascii.fs | 66 ++++++++++ examples/shaders/shaders_ascii_effect.c | 119 ++++++++++++++++++ examples/shaders/shaders_ascii_effect.png | Bin 0 -> 45176 bytes 5 files changed, 317 insertions(+) create mode 100644 examples/shaders/resources/shaders/glsl100/ascii.fs create mode 100644 examples/shaders/resources/shaders/glsl120/ascii.fs create mode 100644 examples/shaders/resources/shaders/glsl330/ascii.fs create mode 100644 examples/shaders/shaders_ascii_effect.c create mode 100644 examples/shaders/shaders_ascii_effect.png diff --git a/examples/shaders/resources/shaders/glsl100/ascii.fs b/examples/shaders/resources/shaders/glsl100/ascii.fs new file mode 100644 index 000000000..a4a930c3c --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/ascii.fs @@ -0,0 +1,67 @@ +#version 100 + +precision mediump float; + +// Input from the vertex shader +varying vec2 fragTexCoord; + +// Output color for the screen +varying vec4 finalColor; + +uniform sampler2D texture0; +uniform vec2 resolution; +uniform float fontSize; + +float greyScale(in vec3 col) { + return dot(col, vec3(0.2126, 0.7152, 0.0722)); +} + +float character(float n, vec2 p) +{ + p = floor(p * vec2(4.0, -4.0) + 2.5); + + // Check if the coordinate is inside the 5x5 grid (0 to 4). + if (clamp(p.x, 0.0, 4.0) == p.x && clamp(p.y, 0.0, 4.0) == p.y) { + + if (int(mod(n / exp2(p.x + 5.0 * p.y), 2.0)) == 1) { + return 1.0; // The bit is on, so draw this part of the character. + } + } + + return 0.0; // The bit is off, or we are outside the grid. +} + +// ----------------------------------------------------------------------------- +// Main shader logic +// ----------------------------------------------------------------------------- +void main() +{ + vec2 charPixelSize = vec2(fontSize, fontSize * 1.8); + vec2 uvCellSize = charPixelSize / resolution; + + vec2 cellUV = floor(fragTexCoord / uvCellSize) * uvCellSize; + + vec3 cellColor = texture2D(texture0, cellUV).rgb; + float gray = greyScale(cellColor); + + float n = 4096; + + // limited character set + if (gray > 0.2) n = 65600.0; // : + if (gray > 0.3) n = 163153.0; // * + if (gray > 0.4) n = 15255086.0; // o + if (gray > 0.5) n = 13121101.0; // & + if (gray > 0.6) n = 15252014.0; // 8 + if (gray > 0.7) n = 13195790.0; // @ + if (gray > 0.8) n = 11512810.0; // # + + vec2 localUV = (fragTexCoord - cellUV) / uvCellSize; // Range [0.0, 1.0] + + vec2 p = localUV * 2.0 - 1.0; + + float charShape = character(n, p); + + vec3 final_col = cellColor * charShape; + + gl_FragColor = vec4(final_col, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl120/ascii.fs b/examples/shaders/resources/shaders/glsl120/ascii.fs new file mode 100644 index 000000000..3521c8b33 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl120/ascii.fs @@ -0,0 +1,65 @@ +#version 120 + +// Input from the vertex shader +varying vec2 fragTexCoord; + +// Output color for the screen +varying vec4 finalColor; + +uniform sampler2D texture0; +uniform vec2 resolution; +uniform float fontSize; + +float greyScale(in vec3 col) { + return dot(col, vec3(0.2126, 0.7152, 0.0722)); +} + +float character(float n, vec2 p) +{ + p = floor(p * vec2(4.0, -4.0) + 2.5); + + // Check if the coordinate is inside the 5x5 grid (0 to 4). + if (clamp(p.x, 0.0, 4.0) == p.x && clamp(p.y, 0.0, 4.0) == p.y) { + + if (int(mod(n / exp2(p.x + 5.0 * p.y), 2.0)) == 1) { + return 1.0; // The bit is on, so draw this part of the character. + } + } + + return 0.0; // The bit is off, or we are outside the grid. +} + +// ----------------------------------------------------------------------------- +// Main shader logic +// ----------------------------------------------------------------------------- +void main() +{ + vec2 charPixelSize = vec2(fontSize, fontSize * 1.8); + vec2 uvCellSize = charPixelSize / resolution; + + vec2 cellUV = floor(fragTexCoord / uvCellSize) * uvCellSize; + + vec3 cellColor = texture2D(texture0, cellUV).rgb; + float gray = greyScale(cellColor); + + float n = 4096; + + // limited character set + if (gray > 0.2) n = 65600.0; // : + if (gray > 0.3) n = 163153.0; // * + if (gray > 0.4) n = 15255086.0; // o + if (gray > 0.5) n = 13121101.0; // & + if (gray > 0.6) n = 15252014.0; // 8 + if (gray > 0.7) n = 13195790.0; // @ + if (gray > 0.8) n = 11512810.0; // # + + vec2 localUV = (fragTexCoord - cellUV) / uvCellSize; // Range [0.0, 1.0] + + vec2 p = localUV * 2.0 - 1.0; + + float charShape = character(n, p); + + vec3 final_col = cellColor * charShape; + + gl_FragColor = vec4(final_col, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/ascii.fs b/examples/shaders/resources/shaders/glsl330/ascii.fs new file mode 100644 index 000000000..4477f948d --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/ascii.fs @@ -0,0 +1,66 @@ +#version 330 + +// Input from the vertex shader +in vec2 fragTexCoord; + +// Output color for the screen +out vec4 finalColor; + +uniform sampler2D texture0; +uniform vec2 resolution; +uniform float fontSize; + +float greyScale(in vec3 col) { + return dot(col, vec3(0.2126, 0.7152, 0.0722)); +} + +float character(float n, vec2 p) +{ + p = floor(p * vec2(4.0, -4.0) + 2.5); + + // Check if the coordinate is inside the 5x5 grid (0 to 4). + if (clamp(p.x, 0.0, 4.0) == p.x && clamp(p.y, 0.0, 4.0) == p.y) { + + if (int(mod(n / exp2(p.x + 5.0 * p.y), 2.0)) == 1) { + return 1.0; // The bit is on, so draw this part of the character. + } + } + + return 0.0; // The bit is off, or we are outside the grid. +} + +// ----------------------------------------------------------------------------- +// Main shader logic +// ----------------------------------------------------------------------------- + +void main() +{ + vec2 charPixelSize = vec2(fontSize, fontSize * 1.8); + vec2 uvCellSize = charPixelSize / resolution; + + vec2 cellUV = floor(fragTexCoord / uvCellSize) * uvCellSize; + + vec3 cellColor = texture(texture0, cellUV).rgb; + float gray = greyScale(cellColor); + + float n = 4096; + + // limited character set + if (gray > 0.2) n = 65600.0; // : + if (gray > 0.3) n = 163153.0; // * + if (gray > 0.4) n = 15255086.0; // o + if (gray > 0.5) n = 13121101.0; // & + if (gray > 0.6) n = 15252014.0; // 8 + if (gray > 0.7) n = 13195790.0; // @ + if (gray > 0.8) n = 11512810.0; // # + + vec2 localUV = (fragTexCoord - cellUV) / uvCellSize; // Range [0.0, 1.0] + + vec2 p = localUV * 2.0 - 1.0; + + float charShape = character(n, p); + + vec3 final_col = cellColor * charShape; + + finalColor = vec4(final_col, 1.0); +} \ No newline at end of file diff --git a/examples/shaders/shaders_ascii_effect.c b/examples/shaders/shaders_ascii_effect.c new file mode 100644 index 000000000..c505d8516 --- /dev/null +++ b/examples/shaders/shaders_ascii_effect.c @@ -0,0 +1,119 @@ +/******************************************************************************************* +* +* raylib [shaders] example - ascii effect +* +* Example complexity rating: [★☆☆☆] 1/4 +* +* Example originally created with raylib 5.5, last time updated with raylib 5.6 +* +* Example contributed by Maicon Santana (@maiconpintoabreu) and reviewed by Ramon Santamaria (@raysan5) +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software +* +* Copyright (c) 2025-2025 Maicon Santana (@maiconpintoabreu) +* +********************************************************************************************/ + +#include "raylib.h" + +#if defined(PLATFORM_DESKTOP) + #define GLSL_VERSION 330 +#else // PLATFORM_ANDROID, PLATFORM_WEB + #define GLSL_VERSION 100 +#endif + +//------------------------------------------------------------------------------------ +// Program main entry point +//------------------------------------------------------------------------------------ +int main(void) +{ + // Initialization + //-------------------------------------------------------------------------------------- + const int screenWidth = 800; + const int screenHeight = 450; + + InitWindow(screenWidth, screenHeight, "raylib [shaders] example - ascii effect"); + + // Texture to test static drawing + Texture2D fudesumi = LoadTexture("resources/fudesumi.png"); + // Texture to test moving drawing + Texture2D raysan = LoadTexture("resources/raysan.png"); + + // Load shader to be used on postprocessing + Shader shader = LoadShader(0, TextFormat("resources/shaders/glsl%i/ascii.fs", GLSL_VERSION)); + + // These locations are used to send data to the GPU. + int resolutionLoc = GetShaderLocation(shader, "resolution"); + int fontSizeLoc = GetShaderLocation(shader, "fontSize"); + + // Set the character size for the ASCII effect + float fontSize = 4.0f; + + // Send the updated values to the shader + float resolution[2] = { (float)screenWidth, (float)screenHeight }; + SetShaderValue(shader, resolutionLoc, resolution, SHADER_UNIFORM_VEC2); + SetShaderValue(shader, fontSizeLoc, &fontSize, SHADER_UNIFORM_FLOAT); + + Vector2 circlePos = (Vector2){40.0f, (float)screenHeight * 0.5f}; + float circleSpeed = 1.0f; + + // RenderTexture to apply the postprocessing later + RenderTexture2D target = LoadRenderTexture(screenWidth, screenHeight); + + SetTargetFPS(60); // Set our game to run at 60 frames-per-second + //-------------------------------------------------------------------------------------- + + // Main game loop + while (!WindowShouldClose()) // Detect window close button or ESC key + { + // Update + //---------------------------------------------------------------------------------- + if (circlePos.x > 200.0f || circlePos.x < 40.0f) { + circleSpeed *= -1; + } + circlePos.x += circleSpeed; + + // Draw + //---------------------------------------------------------------------------------- + + BeginTextureMode(target); + ClearBackground(WHITE); // The background of the scene itself + + DrawTexture(fudesumi, 500, -30, WHITE); // Using custom shader + DrawTextureV(raysan, circlePos, WHITE); + + EndTextureMode(); + BeginDrawing(); + + ClearBackground(RAYWHITE); + + BeginShaderMode(shader); + + // Draw the scene texture (that we rendered earlier) to the screen. + // The shader will process every pixel of this texture. + DrawTextureRec(target.texture, + (Rectangle){ 0, 0, (float)target.texture.width, (float)-target.texture.height }, + (Vector2){ 0, 0 }, + WHITE); + EndShaderMode(); + + DrawRectangle(0, 0, screenWidth, 40, BLACK); + DrawText("Ascii effect", 120, 10, 20, LIGHTGRAY); + DrawFPS(10, 10); + + EndDrawing(); + //---------------------------------------------------------------------------------- + } + + // De-Initialization + //-------------------------------------------------------------------------------------- + UnloadShader(shader); // Unload shader + UnloadTexture(fudesumi); // Unload texture + UnloadTexture(raysan); // Unload texture + + CloseWindow(); // Close window and OpenGL context + //-------------------------------------------------------------------------------------- + + return 0; +} diff --git a/examples/shaders/shaders_ascii_effect.png b/examples/shaders/shaders_ascii_effect.png new file mode 100644 index 0000000000000000000000000000000000000000..eee5cc90b620c14cc111bb9a8348765cb77e827d GIT binary patch literal 45176 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 literal 0 HcmV?d00001