roleplay/client/shader_src/ui.vert

49 lines
1.2 KiB
GLSL

#version 450
2024-10-14 14:16:59 -06:00
#extension GL_EXT_buffer_reference : require
#include "ui_common.glsl"
2024-10-18 18:34:31 -06:00
layout(std430, push_constant) uniform PushConstant {
Context context;
Layer layer;
2024-10-18 18:34:31 -06:00
} pc;
layout(location = 0) out vec4 fragColor;
layout(location = 1) out vec2 fragUV;
2024-10-20 22:39:54 -06:00
layout(location = 2) out flat uint code;
layout(location = 3) out flat uint index;
layout(location = 4) out flat uint type;
const vec2 square[6] = {
vec2(0.0, 0.0),
vec2(1.0, 0.0),
vec2(0.0, 1.0),
vec2(1.0, 0.0),
vec2(1.0, 1.0),
vec2(0.0, 1.0),
};
void main() {
Drawable drawable = pc.layer.drawables.d[gl_InstanceIndex];
vec2 pos = square[gl_VertexIndex];
2024-10-21 10:09:52 -06:00
if(drawable.type == 1){
// Glyph
Font font = pc.context.fonts.f[pc.layer.font_index];
Symbol symbol = font.symbols.s[drawable.code];
2024-10-20 22:39:12 -06:00
fragUV = pos * vec2(symbol.width, symbol.height);
pos = pos * vec2(symbol.width, symbol.height) + vec2(symbol.left, -symbol.top);
2024-10-21 10:09:52 -06:00
} else {
fragUV = pos;
}
gl_Position = vec4((pos * drawable.size + drawable.pos + pc.layer.container.offset) * pc.context.screen * 2, 0.0, 1.0) - vec4(1.0, 1.0, 0.0, 0.0);
fragColor = drawable.color;
code = drawable.code;
type = drawable.type;
index = pc.layer.font_index;
}