#version 450 #define SHADING_UNIFORMS 1 layout(binding = 0) uniform sampler2D tex; layout(binding = 1) uniform samplerCube dstex; layout(std140, binding = SHADING_UNIFORMS) uniform fu { vec4 diffuse; vec4 specular; float shininess; float fog_density; } s; /* varyings */ layout(location = 4) in vec3 pos; layout(location = 5) in vec2 tex_coord; layout(location = 6) in vec3 world_normal; layout(location = 0) out vec4 color; const vec3 sky_color = vec3(0.35, 0.5, 0.65); void main() { vec4 itexel = texture(dstex, normalize(world_normal)); vec4 texel = texture(tex, tex_coord); vec3 object_color = s.diffuse.xyz * texel.xyz * itexel.xyz; float dist = -pos.z; float fog = clamp(exp(-s.fog_density * dist), 0.0, 1.0); color.xyz = mix(sky_color, object_color, fog); color.w = 1.0; }