mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-23 21:02:50 +00:00
f477f2b96e
Line rendering now has its own pipeline (removing the texture issue). Glyph rendering (for fonts) has been reworked to use instanced quad rendering, with the geometry (position and texture coords) in a static buffer (uniform texture buffer), and each instance has a glyph index, color, and 2d base position. Multiple fonts can be loaded, but aren't used yet: still just the one (work needs to be done on the queues to support multiple textures/fonts). Quads haven't changed much, but buffer creation and destruction has been cleaned up to use the resource functions.
32 lines
801 B
GLSL
32 lines
801 B
GLSL
#version 450
|
|
|
|
layout (set = 0, binding = 0) uniform Matrices {
|
|
mat4 Projection3d;
|
|
mat4 View;
|
|
mat4 Sky;
|
|
mat4 Projection2d;
|
|
};
|
|
layout (set = 1, binding = 0) uniform textureBuffer glyph_data;
|
|
|
|
// per instance data
|
|
layout (location = 0) in uint glyph_index;
|
|
layout (location = 1) in vec4 glyph_color;
|
|
layout (location = 2) in vec2 glyph_position;
|
|
|
|
// rg -> offset x,y
|
|
// ba -> texture u,v
|
|
|
|
layout (location = 0) out vec2 uv;
|
|
layout (location = 1) out vec4 color;
|
|
|
|
void
|
|
main (void)
|
|
{
|
|
vec4 glyph = texelFetch (glyph_data, int(glyph_index) * 4 + gl_VertexIndex);
|
|
// offset stored in glyph components 0 and 1
|
|
vec2 position = glyph_position + glyph.xy;
|
|
gl_Position = Projection2d * vec4 (position.xy, 0.0, 1.0);
|
|
// texture uv stored in glyph components 2 and 3
|
|
uv = glyph.pq;
|
|
color = glyph_color;
|
|
}
|