rallyunlimited-engine/code/renderervk/shaders/fog.vert
2024-02-02 19:46:17 +03:00

65 lines
1.4 KiB
GLSL

#version 450
// 64 bytes
layout(push_constant) uniform Transform {
mat4 mvp;
};
layout(set = 1, binding = 0) uniform UBO {
// VERTEX
vec4 eyePos;
vec4 lightPos;
// VERTEX-FOG
vec4 fogDistanceVector;
vec4 fogDepthVector;
vec4 fogEyeT;
// FRAGMENT
vec4 lightColor;
vec4 fogColor;
// linear dynamic light
vec4 lightVector;
};
layout(location = 0) in vec3 in_position;
//layout(location = 1) in vec4 in_color;
//layout(location = 2) in vec2 in_tex_coord0;
//layout(location = 3) in vec2 in_tex_coord1;
//layout(location = 4) in vec2 in_tex_coord2;
//layout(location = 0) out vec4 frag_color;
//layout(location = 1) out vec2 frag_tex_coord0;
//layout(location = 2) out vec2 frag_tex_coord1;
//layout(location = 3) out vec2 frag_tex_coord1;
layout(location = 4) out vec2 fog_tex_coord;
out gl_PerVertex {
vec4 gl_Position;
};
void main() {
gl_Position = mvp * vec4(in_position, 1.0);
//frag_color = in_color;
//frag_tex_coord0 = in_tex_coord0;
// fog calculations...
float s = dot(in_position, fogDistanceVector.xyz) + fogDistanceVector.w;
float t = dot(in_position, fogDepthVector.xyz) + fogDepthVector.w;
if ( fogEyeT.y == 1.0 ) {
if ( t < 0.0 ) {
t = 1.0 / 32.0;
} else {
t = 31.0 / 32.0;
}
} else {
if ( t < 1.0 ) {
t = 1.0 / 32.0;
} else {
t = 1.0 / 32.0 + (30.0 / 32.0 * t) / ( t - fogEyeT.x );
}
}
fog_tex_coord = vec2(s, t);
}