Files
wschod/game/res/shaders/uiwidget.frag
T
2025-06-15 08:50:09 +02:00

63 lines
1.4 KiB
GLSL

#version 100
precision mediump float;
uniform bool has_background_image;
uniform vec4 background_color;
uniform float border_width;
uniform vec4 border_color;
uniform vec2 widget_size;
uniform bool has_icon;
uniform bool has_scrollbar;
uniform vec2 scrollbar_position;
uniform vec2 scrollbar_size;
uniform sampler2D background_image;
uniform sampler2D icons;
varying vec2 f_uv;
varying vec2 f_icon_uv;
void main ()
{
vec2 border_uv = vec2 (border_width) / widget_size;
float x_border = step (f_uv.x, border_uv.x) + step (1.0 - border_uv.x, f_uv.x);
float y_border = step (f_uv.y, border_uv.y) + step (1.0 - border_uv.y, f_uv.y);
float is_border = clamp (x_border + y_border, 0.0, 1.0);
vec4 bgc = has_background_image ? texture2D (background_image, f_uv) : background_color;
vec4 base_color = mix (bgc, border_color, is_border);
if (is_border > 0.5)
{
gl_FragColor = base_color;
return;
}
if (has_scrollbar) {
bool in_scrollbar =
f_uv.x >= scrollbar_position.x &&
f_uv.x <= (scrollbar_position.x + scrollbar_size.x) &&
f_uv.y >= scrollbar_position.y &&
f_uv.y <= (scrollbar_position.y + scrollbar_size.y);
if (in_scrollbar) {
gl_FragColor = vec4 (1, 1, 1, 1);
return;
}
}
if (has_icon)
{
vec4 fg = texture2D (icons, f_icon_uv);
gl_FragColor = mix (base_color, fg, fg.a);
base_color = mix (base_color, fg, fg.a);
}
gl_FragColor = base_color;
}