Files
gren/assets/shaders/mesh.vert
2026-01-09 13:50:52 +01:00

45 lines
867 B
GLSL

#version 450 core
out gl_PerVertex {
vec4 gl_Position;
};
layout(std140, binding = 0) uniform PerFrame {
mat4 uView;
mat4 uProj;
vec4 uLightDir; // xyz used, w padding
};
layout(std140, binding = 1) uniform PerObject {
mat4 uModel;
};
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec3 aNormal;
layout(location = 2) in vec2 aUV;
out VS_OUT {
vec3 wPos;
vec3 wNrm;
vec2 uv;
flat int hasNrm;
flat int hasUV;
} v;
void main() {
vec4 wpos4 = uModel * vec4(aPos, 1.0);
v.wPos = wpos4.xyz;
float nLen2 = dot(aNormal, aNormal);
if(nLen2 > 1e-10) {
mat3 nrmMat = mat3(transpose(inverse(uModel)));
v.wNrm = normalize(nrmMat * aNormal);
v.hasNrm = 1;
} else {
v.wNrm = vec3(0.0);
v.hasNrm = 0;
}
v.uv = aUV;
v.hasUV = (abs(aUV.x) + abs(aUV.y)) > 1e-10 ? 1 : 0;
gl_Position = uProj * uView * wpos4;
}