Files
PCG_6/shaders/default.vert

73 lines
1.3 KiB
GLSL
Raw Permalink Normal View History

2026-03-28 22:36:32 +01:00
#version 460 core
struct PositionData {
float x;
float y;
float z;
};
struct UvData {
float u;
float v;
};
struct NormalData {
float x;
float y;
float z;
};
layout (binding = 0, std430) restrict readonly buffer _positions {
PositionData pos_data[];
};
layout (binding = 1, std430) restrict readonly buffer _uvs {
UvData uv_data[];
};
layout (binding = 2, std430) restrict readonly buffer _normals {
NormalData norm_data[];
};
vec4 getPosition(int index) {
return vec4(
pos_data[index].x,
pos_data[index].y,
pos_data[index].z,
1
);
}
vec2 getUv(int index) {
return vec2(
uv_data[index].u,
uv_data[index].v
);
}
vec3 getNormal(int index) {
return vec3(
norm_data[index].x,
norm_data[index].y,
norm_data[index].z
);
}
uniform mat4 u_model_matrix;
uniform mat4 u_normal_matrix;
layout (binding = 0, std140) uniform SharedMatrices {
mat4 projection;
mat4 cam_matrix;
};
out vec2 v_texcoord;
out vec3 v_normal;
out vec3 v_position;
void main() {
gl_Position = projection * cam_matrix * u_model_matrix * getPosition(gl_VertexID);
v_texcoord = getUv(gl_VertexID);
v_normal = mat3(u_normal_matrix) * getNormal(gl_VertexID);
v_position = vec3(u_model_matrix * getPosition(gl_VertexID));
}