diff options
| author | LLLL Colonq <llll@colonq> | 2024-03-03 00:10:10 -0500 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2024-03-03 00:10:10 -0500 |
| commit | 070108cf09b1b561613b6eea04723afbbb464507 (patch) | |
| tree | 01503df63f16ef6ef4ab4a37b24305286bb2477c /src/assets/shaders/text/frag.glsl | |
Initial commit (new winit)
Diffstat (limited to 'src/assets/shaders/text/frag.glsl')
| -rw-r--r-- | src/assets/shaders/text/frag.glsl | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/assets/shaders/text/frag.glsl b/src/assets/shaders/text/frag.glsl new file mode 100644 index 0000000..3a1694f --- /dev/null +++ b/src/assets/shaders/text/frag.glsl @@ -0,0 +1,55 @@ +#version 300 es +precision highp float; + +uniform sampler2D texture_data; +uniform int text_length; +uniform int text[256]; +uniform int char_width; +uniform int char_height; +uniform int font_width; +uniform int font_height; +uniform int text_width; +uniform int text_height; + +in vec2 vertex_texcoord; +out vec4 frag_color; + +void main() +{ + vec2 inverted_texcoord = vec2(vertex_texcoord.x, 1.0 - vertex_texcoord.y); + vec2 texcoord_pixels = inverted_texcoord * vec2(float(text_width), float(text_height)); + int texcoord_char_x = int(floor(texcoord_pixels.x)) / char_width; + int texcoord_char_y = int(floor(texcoord_pixels.y)) / char_height; + + int x = 0; + int y = 0; + int i = 0; + for (; i < text_length; ++i) { + if (x == texcoord_char_x && y == texcoord_char_y) { + break; + } + if (text[i] == 10) { + x = 0; + y += 1; + } else { + x += 1; + } + } + if (i == text_length || text[i] == 10) discard; + + int entry = text[i] - 32; + vec2 texcoord_base = vec2( + float(entry % (font_width / char_width)) * float(char_width), + float(entry / (font_width / char_width)) * float(char_height) + ); + // vec2 texcoord_base = vec2(8.0, 0.0); + vec2 texcoord_off = vec2( + mod(texcoord_pixels.x, float(char_width)), + mod(texcoord_pixels.y, float(char_height)) + ); + vec2 texcoord_final = (texcoord_base + texcoord_off) / vec2(float(font_width), float(font_height)); + + vec4 texel = texture(texture_data, texcoord_final); + if (texel.rgb == vec3(0.0, 0.0, 0.0)) discard; + frag_color = texel; +}
\ No newline at end of file |
