]> git.tdb.fi Git - libs/gl.git/blobdiff - shaderlib/common.glsl
Remove unused world_halfway_dir variable from common.glsl
[libs/gl.git] / shaderlib / common.glsl
index 94237c7acfd3cec3626497c85761db24b00e9106..dd8ac11f2564642078f9360aef97317e79b07497 100644 (file)
@@ -8,6 +8,7 @@ uniform EnvMap
 
 uniform sampler2D normal_map;
 uniform samplerCube environment_map;
+uniform samplerCube irradiance_map;
 
 layout(constant_id=auto) const bool use_normal_map = false;
 
@@ -51,8 +52,6 @@ void standard_transform()
 
        out vec3 world_light_dir = light_sources[0].position.xyz-world_vertex.xyz*light_sources[0].position.w;
 
-       out vec3 world_halfway_dir = normalize(world_light_dir-world_look_dir);
-
        out float fog_coord = eye_vertex.z;
 
        if(use_clipping)
@@ -84,15 +83,21 @@ virtual vec3 get_fragment_normal()
                return normalize(world_normal);
 }
 
-virtual vec3 get_environment_sample(vec3 direction)
+virtual vec3 get_environment_sample(vec3 direction, float roughness)
 {
-       return texture(environment_map, env_world_matrix*direction).rgb;
+       float lod = (2-roughness)*roughness*(textureQueryLevels(environment_map)-1);
+       return textureLod(environment_map, env_world_matrix*direction, lod).rgb;
 }
 
 virtual vec3 get_reflection(vec3 normal, vec3 look)
 {
        vec3 reflect_dir = reflect(look, normal);
-       return get_environment_sample(reflect_dir);
+       return get_environment_sample(reflect_dir, 0.0);
+}
+
+virtual vec3 get_irradiance_sample(vec3 normal)
+{
+       return texture(irradiance_map, env_world_matrix*normal).rgb;
 }
 
 vec3 apply_fog(vec3 color)