#version 450 #pragma shader_stage(vertex) #extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable #extension GL_EXT_buffer_reference : require layout(location=0) out vec4 outWorldNormal; layout(location=1) out vec4 outWorldPosition; layout(location=2) out vec4 outColor; layout(location=3) out vec2 outUV0; struct VertexData { vec4 Normal; vec2 TexCoord0; vec2 TexCoord1; vec4 Color; }; layout(std430, buffer_reference, buffer_reference_align=16) readonly buffer VPositionRef { vec4 Positions[]; }; layout(std430, buffer_reference, buffer_reference_align=16) readonly buffer VDataRef { VertexData Data[]; }; layout(set=1, binding=0) uniform Camera { mat4 View; // 64 mat4 Projection; // 128 mat4 InvView; // 192 mat4 InvProjection; // 256 vec4 Position; // 272 } camera; layout(push_constant) uniform Constants { mat4 globalTransform; VPositionRef vertexPos; VDataRef vertexDat; uint64_t materialIdx; } pcb; void main() { vec3 colors[] = { vec3( 1.0f, 0.0f, 0.0f ), vec3( 0.0f, 1.0f, 0.0f ), vec3( 0.0f, 0.0f, 1.0f ), }; gl_Position = camera.Projection * camera.View * pcb.globalTransform * vec4(pcb.vertexPos.Positions[gl_VertexIndex].xyz, 1.0f); outColor = vec4(pcb.vertexDat.Data[gl_VertexIndex].Color.rgb, 1.0f); //vec3(colors[gl_VertexIndex % 3]); // TODO // layout(location=0) out vec4 outWorldNormal; // layout(location=1) out vec4 outWorldPosition; // layout(location=2) out vec4 outColor; // layout(location=3) out vec2 outUV0; }