X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fprogrambuilder.cpp;h=18255b95839e99180a6c3905c51ad76e63f1c5b5;hb=bbd21944fae06f134625b2f5595c3aab36c3aa9e;hp=002e3a275f7ef7e1c7eaa05e08e277d9106da734;hpb=53e2d16e5c0c49c147c0d2a7a3541071eada37fc;p=libs%2Fgl.git diff --git a/source/programbuilder.cpp b/source/programbuilder.cpp index 002e3a27..18255b95 100644 --- a/source/programbuilder.cpp +++ b/source/programbuilder.cpp @@ -45,9 +45,13 @@ anything that might need them. */ const ProgramBuilder::VariableDefinition ProgramBuilder::standard_variables[] = { { FRAGMENT, "gl_FragColor", "vec4", "frag_color", 0 }, - { FRAGMENT, "frag_color", "vec4", "basic_color", "!e!l" }, - { FRAGMENT, "frag_color", "vec4", "vec4(rgb_surface, surface_alpha)", "!el" }, - { FRAGMENT, "frag_color", "vec4", "vec4(rgb_surface+rgb_reflection, surface_alpha)", "e" }, + { FRAGMENT, "frag_color", "vec4", "incoming_color", "!f" }, + { FRAGMENT, "frag_color", "vec4", "vec4(mix(fog_color.rgb, incoming_color.rgb, fog_value), incoming_color.a)", "f" }, + { FRAGMENT, "fog_value", "float", "exp(-fog_coord*fog_density)", 0 }, + + { FRAGMENT, "incoming_color", "vec4", "basic_color", "!e!l" }, + { FRAGMENT, "incoming_color", "vec4", "vec4(rgb_surface, surface_alpha)", "!el" }, + { FRAGMENT, "incoming_color", "vec4", "vec4(rgb_surface+rgb_reflection, surface_alpha)", "e" }, { FRAGMENT, "rgb_reflection", "vec3", "reflect_sample.rgb*reflectivity", 0 }, { FRAGMENT, "reflect_sample", "vec4", "textureCube(environment, env_reflect_dir)", 0 }, @@ -106,6 +110,7 @@ const ProgramBuilder::VariableDefinition ProgramBuilder::standard_variables[] = { FRAGMENT, "diffuse_sample", "vec4", "texture2D(diffusemap, texture_coord)", 0 }, { VERTEX, "gl_Position", "vec4", "projection_matrix*eye_vertex", 0 }, + { VERTEX, "fog_coord", "float", "-eye_vertex.z", 0 }, { VERTEX, "shd_vertex", "vec3", "(shd_eye_matrix*eye_vertex).xyz", 0 }, { VERTEX, "tbn_sky_dir", "vec3", "eye_sky_dir*eye_tbn_matrix", "n" }, { VERTEX, "tbn_light_dir[i]", "vec3", "eye_light_dir[i]*eye_tbn_matrix", 0 }, @@ -143,6 +148,8 @@ const ProgramBuilder::VariableDefinition ProgramBuilder::standard_variables[] = { UNIFORM, "Lighting::sky_color", "vec4", 0, 0 }, { UNIFORM, "Lighting::eye_sky_dir", "vec3", 0, 0 }, { UNIFORM, "Lighting::horizon_limit", "float", 0, 0 }, + { UNIFORM, "Lighting::fog_color", "vec4", "gl_Fog.color", 0 }, + { UNIFORM, "Lighting::fog_density", "float", "gl_Fog.density", 0 }, { UNIFORM, "Material::material", "MaterialParameters", "gl_FrontMaterial", 0 }, { TYPE, "LightSourceParameters", "struct { vec4 position; vec4 diffuse; vec4 specular; }", "gl_LightSourceParameters", 0 }, @@ -238,7 +245,10 @@ ProgramBuilder::ProgramBuilder(const StandardFeatures &f): if(!features.legacy) { + aliases["texture1D"] = "texture"; aliases["texture2D"] = "texture"; + aliases["texture3D"] = "texture"; + aliases["textureCube"] = "texture"; aliases["shadow2D"] = "texture"; } else @@ -745,6 +755,8 @@ string ProgramBuilder::StandardFeatures::create_flags() const if(normalmap) flags += 'n'; } + if(fog) + flags += 'f'; if(shadow) flags += 's'; if(reflection) @@ -1075,6 +1087,7 @@ ProgramBuilder::StandardFeatures::Loader::Loader(StandardFeatures &f): DataFile::ObjectLoader(f) { add("custom", &StandardFeatures::custom); + add("fog", &StandardFeatures::fog); add("lighting", &StandardFeatures::lighting); add("material", &StandardFeatures::material); add("max_lights", &StandardFeatures::max_lights);