40 lines
746 B
GLSL
40 lines
746 B
GLSL
|
#version 450
|
||
|
#extension GL_EXT_buffer_reference : require
|
||
|
|
||
|
struct Rect {
|
||
|
vec3 pos;
|
||
|
vec2 size;
|
||
|
vec4 color;
|
||
|
};
|
||
|
|
||
|
layout(std430, buffer_reference) readonly buffer RectList {
|
||
|
Rect r[];
|
||
|
};
|
||
|
|
||
|
layout(std430, buffer_reference) readonly buffer ScreenInfo {
|
||
|
mat4 bounds;
|
||
|
};
|
||
|
|
||
|
layout(std430, push_constant) uniform PushConstant {
|
||
|
ScreenInfo screen;
|
||
|
RectList rects;
|
||
|
} pc;
|
||
|
|
||
|
layout(location = 0) out vec4 fragColor;
|
||
|
|
||
|
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() {
|
||
|
Rect rect = pc.rects.r[gl_InstanceIndex];
|
||
|
gl_Position = pc.screen.bounds * vec4(vec3(square[gl_VertexIndex] * rect.size, 0.0) + rect.pos.xyz, 1.0);
|
||
|
fragColor = rect.color;
|
||
|
}
|
||
|
|