roleplay/client/shader_src/string.comp

31 lines
992 B
Plaintext

#version 450
#extension GL_EXT_buffer_reference : require
#include "ui_common.glsl"
layout(std430, push_constant) uniform PushConstant {
Context context;
Layer layer;
} pc;
layout(local_size_x = 1) in;
void main() {
uint gID = gl_GlobalInvocationID.x;
String string = pc.layer.strings.s[gID];
Font font = pc.context.fonts.f[pc.layer.font_index];
uint buffer_pos = atomicAdd(pc.layer.draw.instance_count, string.len);
float x = 0;
for(uint i = 0; i < string.len; i++) {
uint code = pc.layer.codes.c[string.offset + i];
Symbol symbol = font.symbols.s[code];
pc.layer.drawables.d[buffer_pos + i].pos = string.pos + vec2(x, 0);
x += string.size*symbol.advance/font.width;
pc.layer.drawables.d[buffer_pos + i].size = vec2(string.size, string.size);
pc.layer.drawables.d[buffer_pos + i].color = string.color;
pc.layer.drawables.d[buffer_pos + i].code = pc.layer.codes.c[string.offset + i];
pc.layer.drawables.d[buffer_pos + i].type = 1;
}
}