project-aster/samples/04_scenes/shader/model.vert.glsl

56 lines
1.6 KiB
GLSL

#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;
}