X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=shaderlib%2Fsinglepass.glsl;fp=shaderlib%2Fsinglepass.glsl;h=f8940f7ddfbd02ee9582d1cf45ccbc50d8e6417f;hb=859015dce969a0d9ba2bc603d6dbb2685159e393;hp=0000000000000000000000000000000000000000;hpb=f1c6ef565577ac322693255d764eea1f2cab9e77;p=libs%2Fgl.git diff --git a/shaderlib/singlepass.glsl b/shaderlib/singlepass.glsl new file mode 100644 index 00000000..f8940f7d --- /dev/null +++ b/shaderlib/singlepass.glsl @@ -0,0 +1,247 @@ +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; +}; + +const bool use_vertex_color = false; + +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; + +vec4 get_vertex_position() +{ + return vertex; +} + +vec3 get_vertex_normal() +{ + return normal; +} + +void singlepass_transform_and_lighting() +{ + out vec4 eye_vertex = eye_obj_matrix*get_vertex_position(); + gl_Position = projection_matrix*eye_vertex; + + out vec3 eye_normal = eye_obj_normal_matrix*get_vertex_normal(); + vec3 eye_tangent = eye_obj_normal_matrix*tangent; + vec3 eye_binormal = eye_obj_normal_matrix*binormal; + out mat3 eye_tbn_matrix = mat3(eye_tangent, eye_binormal, eye_normal); + + out vec3 incident_dir = normalize(eye_vertex.xyz); + if(use_normal_map) + incident_dir = incident_dir*eye_tbn_matrix; + + vec3 ldir = normalize(light_sources[0].position.xyz-eye_vertex.xyz*light_sources[0].position.w); + if(use_normal_map) + ldir = ldir*eye_tbn_matrix; + out vec3 light_dir = ldir; + + out vec3 tbn_sky_dir = eye_sky_dir*eye_tbn_matrix; + out vec3 shadow_coord = (shd_eye_matrix*eye_vertex).xyz; + out float fog_coord = eye_vertex.z; + + for(int i=0; i