#version 460 core #pragma shader_stage(vertex) #extension GL_EXT_nonuniform_qualifier : enable layout(location = 0) out vec2 outUV; struct VertexData { float position[3]; float uv[2]; }; layout(std430, set = 0, binding = 0) readonly buffer Vertices { VertexData data[]; } vertexBuffer[]; vec3 GetPosition(uint bufferId, uint vertexIdx) { return vec3( vertexBuffer[bufferId].data[vertexIdx].position[0], vertexBuffer[bufferId].data[vertexIdx].position[1], vertexBuffer[bufferId].data[vertexIdx].position[2] ); } vec2 GetUV(uint bufferId, uint vertexIdx) { return vec2( vertexBuffer[bufferId].data[vertexIdx].uv[0], vertexBuffer[bufferId].data[vertexIdx].uv[1] ); } layout(set = 1, binding = 0) uniform Camera { mat4 model; mat4 view; mat4 proj; } ubo; layout(push_constant) uniform Block { uint textureHandle; uint vertexBufferHandle; }; void main() { outUV = GetUV(vertexBufferHandle, gl_VertexIndex); gl_Position = ubo.proj * ubo.view * ubo.model * vec4(GetPosition(vertexBufferHandle, gl_VertexIndex), 1.0f); }