#extension GL_EXT_buffer_reference : require #extension GL_EXT_scalar_block_layout : require #extension GL_EXT_nonuniform_qualifier : require #include "global.glsl" layout(std430, buffer_reference, buffer_reference_align = 4) readonly buffer PositionBuffer { vec3 positions[]; }; struct OtherData { vec3 normal; vec3 tangent; vec2 uv; }; layout(std430, buffer_reference, buffer_reference_align = 4) readonly buffer OtherDataBuffer { OtherData other_data[]; }; layout(push_constant, std430) uniform constants { mat4 local_to_world; PositionBuffer positions; OtherDataBuffer other_data; uint color_texture; uint color_sampler; } PushConstants; #if VERTEX_SHADER // QUAD vec2 positions[6] = vec2[]( vec2(-1, -1), vec2(-1, 1), vec2(1, 1), vec2(1, 1), vec2(1, -1), vec2(-1, -1) ); layout(location = 0) out vec2 OutUV; void main() { PositionBuffer positions_ptr = PushConstants.positions; OtherDataBuffer other_data_ptr = PushConstants.other_data; OutUV = other_data_ptr.other_data[gl_VertexIndex].uv; gl_Position = vec4(positions_ptr.positions[gl_VertexIndex], 1.0) * PushConstants.local_to_world * Global.view.world_to_clip; } #endif #if FRAGMENT_SHADER layout(location = 0) in vec2 InUV; layout(location = 0) out vec4 FragColor; void main() { FragColor = vec4(1); // vec4(texture(sampler2D(global_textures2d[PushConstants.color_texture], global_samplers[PushConstants.color_sampler]), InUV).rgb, 1.0); } #endif