]> git.tdb.fi Git - libs/gl.git/blobdiff - shaderlib/singlepass.glsl
Add a system for creating Pipelines from loadable templates
[libs/gl.git] / shaderlib / singlepass.glsl
index f8940f7ddfbd02ee9582d1cf45ccbc50d8e6417f..a80ca339147c028f3200fcbd2e8a2d792819f187 100644 (file)
@@ -43,7 +43,7 @@ uniform Lighting
        LightSourceParameters light_sources[1];
        vec4 ambient_color;
        vec4 sky_color;
-       vec3 eye_sky_dir;
+       vec3 eye_zenith_dir;
        float horizon_limit;
        vec4 fog_color;
        float fog_density;
@@ -63,7 +63,6 @@ uniform ShadowMap
        mat4 shd_eye_matrix;
 };
 
-const bool use_reflection = false;
 const bool use_environment_map = false;
 uniform samplerCube environment;
 uniform EnvMap
@@ -78,12 +77,12 @@ uniform Clipping
 };
 
 ////// vertex
-in vec4 vertex;
-in vec4 texcoord;
-in vec4 color;
-in vec3 normal;
-in vec3 tangent;
-in vec3 binormal;
+layout(location=0) in vec4 vertex;
+layout(location=8) in vec4 texcoord;
+layout(location=3) in vec4 color;
+layout(location=2) in vec3 normal;
+layout(location=4) in vec3 tangent;
+layout(location=5) in vec3 binormal;
 
 vec4 get_vertex_position()
 {
@@ -114,7 +113,7 @@ void singlepass_transform_and_lighting()
                ldir = ldir*eye_tbn_matrix;
        out vec3 light_dir = ldir;
 
-       out vec3 tbn_sky_dir = eye_sky_dir*eye_tbn_matrix;
+       out vec3 tbn_zenith_dir = eye_zenith_dir*eye_tbn_matrix;
        out vec3 shadow_coord = (shd_eye_matrix*eye_vertex).xyz;
        out float fog_coord = eye_vertex.z;
 
@@ -129,7 +128,7 @@ void main()
 }
 
 ////// fragment
-out vec4 frag_color;
+layout(location=0) out vec4 frag_color;
 
 vec4 get_diffuse_sample()
 {
@@ -141,6 +140,11 @@ vec3 get_normal_sample()
        return texture(normal_map, texcoord.xy).xyz*2.0-1.0;
 }
 
+vec4 get_environment_sample(vec3 direction)
+{
+       return texture(environment, direction);
+}
+
 vec3 normal;
 vec4 diffuse_sample;
 
@@ -152,12 +156,12 @@ vec3 singlepass_lighting()
        vec3 ambient_light = ambient_color.rgb;
        if(use_sky)
        {
-               vec3 sky_dir;
+               vec3 zenith_dir;
                if(use_normal_map)
-                       sky_dir = tbn_sky_dir;
+                       zenith_dir = tbn_zenith_dir;
                else
-                       sky_dir = eye_sky_dir;
-               float skylight_intensity = dot(normal, sky_dir)*0.5+0.5;
+                       zenith_dir = eye_zenith_dir;
+               float skylight_intensity = dot(normal, zenith_dir)*0.5+0.5;
                ambient_light += skylight_intensity*sky_color.rgb;
        }
 
@@ -195,19 +199,8 @@ vec3 singlepass_reflection()
        vec3 reflect_dir = reflect(incident_dir, normal);
        if(use_normal_map)
                reflect_dir = eye_tbn_matrix*reflect_dir;
-       vec3 result = vec3(0.0);
-
-       if(use_environment_map)
-               result += texture(environment, env_eye_matrix*reflect_dir).rgb*reflectivity;
 
-       if(use_sky && use_specular)
-       {
-               float reflect_altitude = clamp(dot(reflect_dir, eye_sky_dir)-horizon_limit, -1.0, 0.0);
-               float sky_specular_intensity = pow((1.0-reflect_altitude*reflect_altitude), material.shininess/2.0);
-               result += sky_specular_intensity*sky_color.rgb;
-       }
-
-       return result;
+       return get_environment_sample(env_eye_matrix*reflect_dir).rgb;
 }
 
 vec4 singlepass_color()
@@ -235,7 +228,7 @@ void main()
        else
                final_color = singlepass_color();
 
-       if(use_reflection)
+       if(use_environment_map)
                final_color += vec4(singlepass_reflection(), 0.0);
        if(use_fog)
        {