73 lines
1.3 KiB
GLSL
73 lines
1.3 KiB
GLSL
#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));
|
|
}
|