Bläddra i källkod

Fixed shadow mapping on iOS 6.

Lasse Öörni 13 år sedan
förälder
incheckning
5a30a43307
1 ändrade filer med 6 tillägg och 6 borttagningar
  1. 6 6
      Bin/CoreData/Shaders/GLSL/Lighting.frag

+ 6 - 6
Bin/CoreData/Shaders/GLSL/Lighting.frag

@@ -73,19 +73,19 @@ float GetShadow(vec4 shadowPos)
             return cShadowIntensity.y + cShadowIntensity.x * inLight;
         #endif
     #else
-        vec3 projShadowPos = shadowPos.xyz / shadowPos.w;
+        vec2 offsets = cShadowMapInvSize * shadowPos.w;
         #ifndef LQSHADOW
             // Take four samples and average them
             vec4 inLight = vec4(
-                texture2D(sShadowMap, projShadowPos.xy).r > projShadowPos.z,
-                texture2D(sShadowMap, vec2(projShadowPos.x + cShadowMapInvSize.x, projShadowPos.y)).r > projShadowPos.z,
-                texture2D(sShadowMap, vec2(projShadowPos.x, projShadowPos.y + cShadowMapInvSize.y)).r > projShadowPos.z,
-                texture2D(sShadowMap, projShadowPos.xy + cShadowMapInvSize).r > projShadowPos.z
+                texture2DProj(sShadowMap, shadowPos).r * shadowPos.w > shadowPos.z,
+                texture2DProj(sShadowMap, vec4(shadowPos.x + offsets.x, shadowPos.yzw)).r * shadowPos.w > shadowPos.z,
+                texture2DProj(sShadowMap, vec4(shadowPos.x, shadowPos.y + offsets.y, shadowPos.zw)).r * shadowPos.w > shadowPos.z,
+                texture2DProj(sShadowMap, vec4(shadowPos.xy + offsets.xy, shadowPos.zw)).r * shadowPos.w > shadowPos.z
             );
             return cShadowIntensity.y + dot(inLight, vec4(cShadowIntensity.x));
         #else
             // Take one sample
-            return cShadowIntensity.y + (texture2D(sShadowMap, projShadowPos.xy).r > projShadowPos.z) ? cShadowIntensity.x : 0.0;
+            return cShadowIntensity.y + (texture2DProj(sShadowMap, shadowPos).r * shadowPos.w > shadowPos.z) ? cShadowIntensity.x : 0.0;
         #endif
     #endif
 }