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 },
{ 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 },
{ 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 },
if(!features.legacy)
{
+ aliases["texture1D"] = "texture";
aliases["texture2D"] = "texture";
+ aliases["texture3D"] = "texture";
+ aliases["textureCube"] = "texture";
aliases["shadow2D"] = "texture";
}
else
if(normalmap)
flags += 'n';
}
+ if(fog)
+ flags += 'f';
if(shadow)
flags += 's';
if(reflection)
DataFile::ObjectLoader<StandardFeatures>(f)
{
add("custom", &StandardFeatures::custom);
+ add("fog", &StandardFeatures::fog);
add("lighting", &StandardFeatures::lighting);
add("material", &StandardFeatures::material);
add("max_lights", &StandardFeatures::max_lights);