X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=shaderlib%2Fsinglepass.glsl;h=eef6a5322aabed050dbfa6272a2337d7fd09bfd1;hb=6ba314198dce795408690456fa1f0ef559aa1532;hp=f8940f7ddfbd02ee9582d1cf45ccbc50d8e6417f;hpb=859015dce969a0d9ba2bc603d6dbb2685159e393;p=libs%2Fgl.git diff --git a/shaderlib/singlepass.glsl b/shaderlib/singlepass.glsl index f8940f7d..eef6a532 100644 --- a/shaderlib/singlepass.glsl +++ b/shaderlib/singlepass.glsl @@ -1,35 +1,5 @@ -struct LightSourceParameters -{ - vec4 position; - vec4 diffuse; - vec4 specular; -}; - -struct MaterialParameters -{ - vec4 ambient; - vec4 diffuse; - vec4 specular; - float shininess; -}; - -struct ClipPlane -{ - vec4 equation; -}; - -uniform mat4 eye_obj_matrix; -uniform mat3 eye_obj_normal_matrix; -uniform Transform -{ - mat4 projection_matrix; -}; - -uniform Material -{ - MaterialParameters material; - float reflectivity; -}; +// Deprecated; use phong.glsl instead. +import msp_interface; const bool use_vertex_color = false; @@ -37,54 +7,15 @@ const bool use_lighting = false; const bool use_specular = false; const bool use_sky = false; const bool use_fog = false; -uniform Lighting -{ - // Declared as an array for compatibility reasons - LightSourceParameters light_sources[1]; - vec4 ambient_color; - vec4 sky_color; - vec3 eye_sky_dir; - float horizon_limit; - vec4 fog_color; - float fog_density; -}; const bool use_diffuse_map = false; -uniform sampler2D diffuse_map; - const bool use_normal_map = false; -uniform sampler2D normal_map; const bool use_shadow_map = false; -uniform sampler2DShadow shadow; -uniform ShadowMap -{ - float shadow_darkness; - mat4 shd_eye_matrix; -}; -const bool use_reflection = false; const bool use_environment_map = false; -uniform samplerCube environment; -uniform EnvMap -{ - mat3 env_eye_matrix; -}; - -const int max_clip_planes = 0; -uniform Clipping -{ - ClipPlane clip_planes[max_clip_planes]; -}; - -////// vertex -in vec4 vertex; -in vec4 texcoord; -in vec4 color; -in vec3 normal; -in vec3 tangent; -in vec3 binormal; +#pragma MSP stage(vertex) vec4 get_vertex_position() { return vertex; @@ -114,7 +45,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; @@ -128,9 +59,7 @@ void main() passthrough; } -////// fragment -out vec4 frag_color; - +#pragma MSP stage(fragment) vec4 get_diffuse_sample() { return texture(diffuse_map, texcoord.xy); @@ -141,23 +70,28 @@ vec3 get_normal_sample() return texture(normal_map, texcoord.xy).xyz*2.0-1.0; } +vec4 get_environment_sample(vec3 direction) +{ + return texture(environment_map, direction); +} + vec3 normal; vec4 diffuse_sample; vec3 singlepass_lighting() { - float shadow_sample = texture(shadow, shadow_coord); + float shadow_sample = texture(shadow_map, shadow_coord); float shadow_intensity = mix(1.0, shadow_sample, shadow_darkness); 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; } @@ -168,23 +102,23 @@ vec3 singlepass_lighting() vec3 diffuse_light = diffuse_intensity*light_sources[0].diffuse.rgb; vec3 half_vec = normalize(light_dir-incident_dir); - float specular_intensity = pow(max(dot(half_vec, normal), 0.0), material.shininess); + float specular_intensity = pow(max(dot(half_vec, normal), 0.0), basic_material.shininess); if(use_shadow_map) specular_intensity *= shadow_intensity; vec3 specular_light = specular_intensity*light_sources[0].specular.rgb; - vec3 result = material.ambient.rgb*ambient_light+material.diffuse.rgb*diffuse_light; + vec3 result = basic_material.diffuse.rgb*ambient_light+basic_material.diffuse.rgb*diffuse_light; if(use_diffuse_map) result *= diffuse_sample.rgb; if(use_specular) - result += material.specular.rgb*specular_light; + result += basic_material.specular.rgb*specular_light; return result; } float singlepass_transparency() { - float alpha = material.diffuse.a; + float alpha = basic_material.diffuse.a; if(use_diffuse_map) alpha *= diffuse_sample.a; return alpha; @@ -195,19 +129,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 +158,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) {