Updated OSX object shader to use the pre-multiplied alpha pipeline
This commit is contained in:
@@ -25,7 +25,7 @@
|
|||||||
// or implied, of Kearwood Gilbert.
|
// or implied, of Kearwood Gilbert.
|
||||||
//
|
//
|
||||||
|
|
||||||
//#extension GL_EXT_shadow_samplers : require
|
// #extension GL_EXT_shadow_samplers : require
|
||||||
|
|
||||||
#if FOG_TYPE > 0
|
#if FOG_TYPE > 0
|
||||||
// FOG_TYPE 1 - Linear
|
// FOG_TYPE 1 - Linear
|
||||||
@@ -272,14 +272,14 @@ void main()
|
|||||||
|
|
||||||
if(shadowMapCoord1.x >= -1.0 && shadowMapCoord1.x <= 1.0 && shadowMapCoord1.y >= -1.0 && shadowMapCoord1.y <= 1.0 && shadowMapCoord1.z >= 0.0 && shadowMapCoord1.z <= 1.0) {
|
if(shadowMapCoord1.x >= -1.0 && shadowMapCoord1.x <= 1.0 && shadowMapCoord1.y >= -1.0 && shadowMapCoord1.y <= 1.0 && shadowMapCoord1.z >= 0.0 && shadowMapCoord1.z <= 1.0) {
|
||||||
#if DEBUG_PSSM == 1
|
#if DEBUG_PSSM == 1
|
||||||
diffuseMaterial = diffuseMaterial * vec4(0.75, 0.75, 0.5, 1.0) + vec4(0.0, 0.0, 0.5, 0.0);
|
diffuseMaterial = diffuseMaterial * vec4(0.75, 0.75, 0.5, 1.0) + vec4(0.0, 0.0, 0.5 * diffuseMaterial.a, 0.0);
|
||||||
#endif
|
#endif
|
||||||
highp vec2 shadowMapPos = (shadowMapCoord1 / shadowMapCoord1.w).st;
|
highp vec2 shadowMapPos = (shadowMapCoord1 / shadowMapCoord1.w).st;
|
||||||
shadowMapDepth = texture2D(shadowTexture1, shadowMapPos).z;
|
shadowMapDepth = texture2D(shadowTexture1, shadowMapPos).z;
|
||||||
vertexShadowDepth = (shadowMapCoord1 / shadowMapCoord1.w).z;
|
vertexShadowDepth = (shadowMapCoord1 / shadowMapCoord1.w).z;
|
||||||
} else if(shadowMapCoord2.s >= -1.0 && shadowMapCoord2.s <= 1.0 && shadowMapCoord2.t >= -1.0 && shadowMapCoord2.t <= 1.0 && shadowMapCoord2.z >= 0.0 && shadowMapCoord2.z <= 1.0) {
|
} else if(shadowMapCoord2.s >= -1.0 && shadowMapCoord2.s <= 1.0 && shadowMapCoord2.t >= -1.0 && shadowMapCoord2.t <= 1.0 && shadowMapCoord2.z >= 0.0 && shadowMapCoord2.z <= 1.0) {
|
||||||
#if DEBUG_PSSM == 1
|
#if DEBUG_PSSM == 1
|
||||||
diffuseMaterial = diffuseMaterial * vec4(0.75, 0.50, 0.75, 1.0) + vec4(0.0, 0.5, 0.0, 0.0);
|
diffuseMaterial = diffuseMaterial * vec4(0.75, 0.50, 0.75, 1.0) + vec4(0.0, 0.5 * diffuseMaterial.a, 0.0, 0.0);
|
||||||
#endif
|
#endif
|
||||||
highp vec2 shadowMapPos = (shadowMapCoord2 / shadowMapCoord2.w).st;
|
highp vec2 shadowMapPos = (shadowMapCoord2 / shadowMapCoord2.w).st;
|
||||||
shadowMapDepth = texture2D(shadowTexture2, shadowMapPos).z;
|
shadowMapDepth = texture2D(shadowTexture2, shadowMapPos).z;
|
||||||
@@ -288,7 +288,7 @@ void main()
|
|||||||
#if SHADOW_QUALITY >= 3
|
#if SHADOW_QUALITY >= 3
|
||||||
else if(shadowMapCoord3.s >= -1.0 && shadowMapCoord3.s <= 1.0 && shadowMapCoord3.t >= -1.0 && shadowMapCoord3.t <= 1.0 && shadowMapCoord3.z >= 0.0 && shadowMapCoord3.z <= 1.0) {
|
else if(shadowMapCoord3.s >= -1.0 && shadowMapCoord3.s <= 1.0 && shadowMapCoord3.t >= -1.0 && shadowMapCoord3.t <= 1.0 && shadowMapCoord3.z >= 0.0 && shadowMapCoord3.z <= 1.0) {
|
||||||
#if DEBUG_PSSM == 1
|
#if DEBUG_PSSM == 1
|
||||||
diffuseMaterial = diffuseMaterial * vec4(0.50, 0.75, 0.75, 1.0) + vec4(0.5, 0.0, 0.0, 0.0);
|
diffuseMaterial = diffuseMaterial * vec4(0.50, 0.75, 0.75, 1.0) + vec4(0.5 * diffuseMaterial.a, 0.0, 0.0, 0.0);
|
||||||
#endif
|
#endif
|
||||||
highp vec2 shadowMapPos = (shadowMapCoord3 / shadowMapCoord3.w).st;
|
highp vec2 shadowMapPos = (shadowMapCoord3 / shadowMapCoord3.w).st;
|
||||||
shadowMapDepth = texture2D(shadowTexture3, shadowMapPos).z;
|
shadowMapDepth = texture2D(shadowTexture3, shadowMapPos).z;
|
||||||
@@ -320,11 +320,37 @@ void main()
|
|||||||
|
|
||||||
#if ENABLE_DIFFUSE == 1
|
#if ENABLE_DIFFUSE == 1
|
||||||
// -------------------- Add diffuse light --------------------
|
// -------------------- Add diffuse light --------------------
|
||||||
gl_FragColor += diffuseMaterial * vec4(material_diffuse, 1.0) * vec4(vec3(lamberFactor), 1.0);
|
gl_FragColor += diffuseMaterial * vec4(material_diffuse * lamberFactor, 1.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// -------------------- Apply material_alpha --------------------
|
||||||
|
|
||||||
|
#if ALPHA_BLEND == 1
|
||||||
|
gl_FragColor.a = diffuseMaterial.a;
|
||||||
|
gl_FragColor *= material_alpha;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// -------------------- Add specular light --------------------
|
||||||
|
// Additive, not masked against diffuse alpha
|
||||||
|
#if ENABLE_SPECULAR == 1
|
||||||
|
#if HAS_SPEC_MAP == 1 && ENABLE_PER_PIXEL == 1
|
||||||
|
gl_FragColor.rgb += material_specular * vec3(texture2D(specularTexture, spec_uv)) * specularFactor;
|
||||||
|
#else
|
||||||
|
gl_FragColor.rgb += material_specular * specularFactor;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// -------------------- Multiply light map --------------------
|
||||||
|
#if HAS_LIGHT_MAP == 1
|
||||||
|
mediump vec3 lightMapColor = vec3(texture2D(lightmapTexture, lightmap_uv));
|
||||||
|
//gl_FragColor = vec4(gl_FragColor.r * lightMapColor.r, gl_FragColor.g * lightMapColor.g, gl_FragColor.b * lightMapColor.b, gl_FragColor.a);
|
||||||
|
gl_FragColor.rgb *= lightMapColor;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------- Add reflected light --------------------
|
||||||
#if HAS_REFLECTION_CUBE_MAP == 1
|
#if HAS_REFLECTION_CUBE_MAP == 1
|
||||||
// -------------------- Add reflected light --------------------
|
// Reflected light is additive and not modulated by the light map
|
||||||
#if HAS_NORMAL_MAP == 1
|
#if HAS_NORMAL_MAP == 1
|
||||||
// Calculate reflection vector as I - 2.0 * dot(N, I) * N
|
// Calculate reflection vector as I - 2.0 * dot(N, I) * N
|
||||||
mediump vec3 incidenceVec = -normalize(eyeVec);
|
mediump vec3 incidenceVec = -normalize(eyeVec);
|
||||||
@@ -338,43 +364,33 @@ void main()
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// -------------------- Add specular light --------------------
|
// -------------------- Apply Fog --------------------
|
||||||
#if ENABLE_SPECULAR == 1
|
#if FOG_TYPE == 1 || FOG_TYPE == 2 || FOG_TYPE == 3
|
||||||
#if HAS_SPEC_MAP == 1 && ENABLE_PER_PIXEL == 1
|
|
||||||
gl_FragColor += vec4(material_specular * vec3(texture2D(specularTexture, spec_uv)) * specularFactor, 0.0);
|
#if FOG_TYPE == 1
|
||||||
#else
|
// Linear fog
|
||||||
gl_FragColor += vec4(material_specular * specularFactor, 0.0);
|
lowp float fog_alpha = clamp((fog_far - gl_FragCoord.z / gl_FragCoord.w) * fog_scale, 0.0, 1.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if FOG_TYPE == 2
|
||||||
|
// Exponential fog
|
||||||
|
mediump float fog_z = gl_FragCoord.z / gl_FragCoord.w - fog_near;
|
||||||
|
lowp float fog_alpha = clamp(exp2(fog_density_premultiplied_exponential * fog_z), 0.0, 1.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if FOG_TYPE == 3
|
||||||
|
// Exponential squared fog
|
||||||
|
mediump float fog_z = max(gl_FragCoord.z / gl_FragCoord.w - fog_near, 0.0);
|
||||||
|
lowp float fog_alpha = clamp(exp2(fog_density_premultiplied_squared * fog_z * fog_z), 0.0, 1.0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ALPHA_BLEND == 1
|
||||||
|
gl_FragColor.rgb = mix(fog_color.rgb * gl_FragColor.a, gl_FragColor.rgb, fog_alpha);
|
||||||
|
#else
|
||||||
|
gl_FragColor.rgb = mix(fog_color.rgb, gl_FragColor.rgb, fog_alpha);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if ALPHA_BLEND == 1
|
|
||||||
gl_FragColor.a = gl_FragColor.a * material_alpha;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// -------------------- Multiply light map --------------------
|
|
||||||
|
|
||||||
#if HAS_LIGHT_MAP == 1
|
|
||||||
mediump vec3 lightMapColor = vec3(texture2D(lightmapTexture, lightmap_uv));
|
|
||||||
gl_FragColor = vec4(gl_FragColor.r * lightMapColor.r, gl_FragColor.g * lightMapColor.g, gl_FragColor.b * lightMapColor.b, gl_FragColor.a);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// -------------------- Apply Fog --------------------
|
|
||||||
#if FOG_TYPE == 1
|
|
||||||
// Linear fog
|
|
||||||
gl_FragColor.rgb = mix(fog_color.rgb, gl_FragColor.rgb, clamp((fog_far - gl_FragCoord.z / gl_FragCoord.w) * fog_scale, 0.0, 1.0));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if FOG_TYPE == 2
|
|
||||||
// Exponential fog
|
|
||||||
mediump float fog_z = gl_FragCoord.z / gl_FragCoord.w - fog_near;
|
|
||||||
gl_FragColor.rgb = mix(fog_color.rgb, gl_FragColor.rgb, clamp(exp2(fog_density_premultiplied_exponential * fog_z), 0.0, 1.0));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if FOG_TYPE == 3
|
|
||||||
// Exponential squared fog
|
|
||||||
mediump float fog_z = max(gl_FragCoord.z / gl_FragCoord.w - fog_near, 0.0);
|
|
||||||
gl_FragColor.rgb = mix(fog_color.rgb, gl_FragColor.rgb, clamp(exp2(fog_density_premultiplied_squared * fog_z * fog_z), 0.0, 1.0));
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user