#version 450 #extension GL_ARB_separate_shader_objects : enable layout(set = 0, binding = 0) uniform NodeData { mat4 world; } node; layout(set = 1, binding = 0) uniform CameraData { mat4 viewProjection; } cam; layout(set = 5, binding = 0) uniform LabelData { vec4 textSize; vec4 color; vec4 bboxCenter; float radius; float arrowLength; bool hasRoundedCorners; bool hasArrow; } labelInfo; layout(location = 0) out vec4 color; layout(location = 1) out vec2 textureCoordinates; // Background plane positions are in clipped space const vec4 PLANE[4] = vec4[]( vec4(-0.5, -0.5, 0, 1), vec4(0.5, -0.5, 0, 1), vec4(-0.5, 0.5, 0, 1), vec4(0.5, 0.5, 0, 1) ); const vec2 TEX_COORDS[4] = vec2[]( vec2(0, 0), vec2(1, 0), vec2(0, 1), vec2(1, 1) ); void main() { vec4 position = PLANE[gl_VertexIndex]; vec2 bbox = labelInfo.textSize.xy; position.xy *= bbox; position.xy += vec2(labelInfo.bboxCenter); position.z = -0.001; gl_Position = cam.viewProjection * node.world * position; textureCoordinates = TEX_COORDS[gl_VertexIndex] * bbox; }