#version 450 #extension GL_EXT_buffer_reference : require #include "ui_common.glsl" layout(location = 0) out vec4 fragColor; layout(location = 1) out vec2 fragUV; layout(location = 2) out flat uint glyph; layout(location = 3) out flat uint index; layout(location = 4) out flat uint type; layout(location = 5) out flat vec2 container_offset; const uint color_index[6] = { 0, 1, 2, 1, 3, 2 }; 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]; // Top Left if(pc.layer.container.anchor == 0) { container_offset = pc.layer.container.offset; } // Top Right if(pc.layer.container.anchor == 1) { container_offset = pc.layer.container.offset + vec2(pc.layer.container.context.extent.x - pc.layer.container.size.x, 0); } // Bottom Left if(pc.layer.container.anchor == 2) { container_offset = pc.layer.container.offset + vec2(0, pc.layer.container.context.extent.y - pc.layer.container.size.y); } // Bottom Right if(pc.layer.container.anchor == 3) { container_offset = pc.layer.container.offset + vec2(pc.layer.container.context.extent.x - pc.layer.container.size.x, pc.layer.container.context.extent.y - pc.layer.container.size.y); } if(drawable.type == 1) { index = (drawable.var >> 16) & 0xFFFF; glyph = drawable.var & 0xFFFF; Font font = pc.layer.container.context.fonts.f[index]; Symbol symbol = font.symbols.s[glyph]; fragUV = pos * vec2(symbol.width, symbol.height); pos = pos * vec2(symbol.width, symbol.height) + vec2(symbol.left, -symbol.top); } else if(drawable.type == 2) { fragUV = pos; index = drawable.var; } gl_Position = vec4((pos * drawable.size + drawable.pos + container_offset) * pc.layer.container.context.screen * 2, 0.0, 1.0) - vec4(1.0, 1.0, 0.0, 0.0); fragColor = drawable.color[color_index[gl_VertexIndex]]; type = drawable.type; }