Răsfoiți Sursa

* Fixed syntax error due to implicit float -> vec3 conversion in PostShadowPSSM15.frag

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9134 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
Sha..om 14 ani în urmă
părinte
comite
3bceee24fb
1 a modificat fișierele cu 139 adăugiri și 139 ștergeri
  1. 139 139
      engine/src/core-data/Common/MatDefs/Shadow/PostShadowPSSM15.frag

+ 139 - 139
engine/src/core-data/Common/MatDefs/Shadow/PostShadowPSSM15.frag

@@ -1,139 +1,139 @@
-// Because gpu_shader5 is actually where those
-// gather functions are declared to work on shadowmaps
-#extension GL_ARB_gpu_shader5 : enable
-
-#ifdef HARDWARE_SHADOWS
-    #define SHADOWMAP sampler2DShadow
-    #define SHADOWCOMPAREOFFSET(tex,coord,offset) textureProjOffset(tex, coord, offset)
-    #define SHADOWCOMPARE(tex,coord) textureProj(tex, coord)
-    #define SHADOWGATHER(tex,coord) textureGather(tex, coord.xy, coord.z)
-#else
-    #define SHADOWMAP sampler2D
-    #define SHADOWCOMPAREOFFSET(tex,coord,offset) step(coord.z, textureProjOffset(tex, coord, offset).r)
-    #define SHADOWCOMPARE(tex,coord) step(coord.z, textureProj(tex, coord).r)
-    #define SHADOWGATHER(tex,coord) step(coord.z, textureGather(tex, coord.xy))
-#endif
-
-
-#if FILTER_MODE == 0
-    #define GETSHADOW SHADOWCOMPARE
-    #define KERNEL 1
-#elif FILTER_MODE == 1
-    #ifdef HARDWARE_SHADOWS
-        #define GETSHADOW SHADOWCOMPARE
-    #else
-        #define GETSHADOW Shadow_DoBilinear_2x2
-    #endif
-    #define KERNEL 1
-#elif FILTER_MODE == 2
-    #define GETSHADOW Shadow_DoDither_2x2
-    #define KERNEL 1
-#elif FILTER_MODE == 3
-    #define GETSHADOW Shadow_DoPCF
-    #define KERNEL 4
-#elif FILTER_MODE == 4
-    #define GETSHADOW Shadow_DoPCF
-    #define KERNEL 8
-#endif
-
-out vec4 outFragColor;
-
-uniform SHADOWMAP m_ShadowMap0;
-uniform SHADOWMAP m_ShadowMap1;
-uniform SHADOWMAP m_ShadowMap2;
-uniform SHADOWMAP m_ShadowMap3;
-
-uniform vec4 m_Splits;
-uniform float m_ShadowIntensity;
-
-in vec4 projCoord0;
-in vec4 projCoord1;
-in vec4 projCoord2;
-in vec4 projCoord3;
-in float shadowPosition;
-
-float Shadow_BorderCheck(in vec2 coord){
-    // Fastest, "hack" method (uses 4-5 instructions)
-    vec4 t = vec4(coord.xy, 0.0, 1.0);
-    t = step(t.wwxy, t.xyzz);
-    return dot(t,t);
-}
-
-float Shadow_DoDither_2x2(in SHADOWMAP tex, in vec4 projCoord){
-    float border = Shadow_BorderCheck(projCoord.xy);
-    if (border > 0.0)
-        return 1.0;
-
-    ivec2 texSize = textureSize(tex, 0);
-    vec2 pixSize = 1.0 / vec2(texSize);
-
-    float shadow = 0.0;
-    ivec2 o = ivec2(mod(floor(gl_FragCoord.xy), 2.0));
-    shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2(-1.5, 1.5)+o), projCoord.zw));
-    shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2( 0.5, 1.5)+o), projCoord.zw));
-    shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2(-1.5, -0.5)+o), projCoord.zw));
-    shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2( 0.5, -0.5)+o), projCoord.zw));
-    shadow *= 0.25;
-    return shadow;
-}
-
-float Shadow_DoBilinear_2x2(in SHADOWMAP tex, in vec4 projCoord){
-    float border = Shadow_BorderCheck(projCoord.xy);
-    if (border > 0.0)
-        return 1.0;
-
-    ivec2 texSize = textureSize(tex, 0);
-    #ifdef GL_ARB_gpu_shader5
-        vec4 coord = vec4(projCoord.xyz / projCoord.w,0.0);
-        vec4 gather = SHADOWGATHER(tex, coord);
-    #else
-        vec4 gather = vec4(0.0);
-        gather.x = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(0, 0));
-        gather.y = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(1, 0));
-        gather.z = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(0, 1));
-        gather.w = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(1, 1));
-   #endif
-
-   vec2 f = fract( projCoord.xy * texSize );
-   vec2 mx = mix( gather.xz, gather.yw, f.x );
-   return mix( mx.x, mx.y, f.y );
-}
-
-float Shadow_DoPCF(in SHADOWMAP tex, in vec4 projCoord){
-    float pixSize = 1.0 / textureSize(tex,0).x;
-
-    float shadow = 0.0;
-    float border = Shadow_BorderCheck(projCoord.xy);
-    if (border > 0.0)
-        return 1.0;
-
-    float bound = KERNEL * 0.5 - 0.5;
-    bound *= PCFEDGE;
-    for (float y = -bound; y <= bound; y += PCFEDGE){
-        for (float x = -bound; x <= bound; x += PCFEDGE){
-            vec4 coord = vec4(projCoord.xy + vec2(x,y) * pixSize, projCoord.zw);
-            shadow += SHADOWCOMPARE(tex, coord);
-        }
-    }
-
-    shadow = shadow / (KERNEL * KERNEL);
-    return shadow;
-}
-
-void main(){
-    float shadow = 0.0;
-
-    if(shadowPosition < m_Splits.x){
-        shadow = GETSHADOW(m_ShadowMap0, projCoord0);
-    }else if( shadowPosition <  m_Splits.y){
-        shadow = GETSHADOW(m_ShadowMap1, projCoord1);
-    }else if( shadowPosition <  m_Splits.z){
-        shadow = GETSHADOW(m_ShadowMap2, projCoord2);
-    }else if( shadowPosition <  m_Splits.w){
-        shadow = GETSHADOW(m_ShadowMap3, projCoord3);
-    }
-    
-    shadow = shadow * m_ShadowIntensity + (1.0 - m_ShadowIntensity);
-    outFragColor = vec4(shadow, shadow, shadow, 1.0);
-}
-
+// Because gpu_shader5 is actually where those
+// gather functions are declared to work on shadowmaps
+#extension GL_ARB_gpu_shader5 : enable
+
+#ifdef HARDWARE_SHADOWS
+    #define SHADOWMAP sampler2DShadow
+    #define SHADOWCOMPAREOFFSET(tex,coord,offset) textureProjOffset(tex, coord, offset)
+    #define SHADOWCOMPARE(tex,coord) textureProj(tex, coord)
+    #define SHADOWGATHER(tex,coord) textureGather(tex, coord.xy, coord.z)
+#else
+    #define SHADOWMAP sampler2D
+    #define SHADOWCOMPAREOFFSET(tex,coord,offset) step(coord.z, textureProjOffset(tex, coord, offset).r)
+    #define SHADOWCOMPARE(tex,coord) step(coord.z, textureProj(tex, coord).r)
+    #define SHADOWGATHER(tex,coord) step(coord.z, textureGather(tex, coord.xy))
+#endif
+
+
+#if FILTER_MODE == 0
+    #define GETSHADOW SHADOWCOMPARE
+    #define KERNEL 1
+#elif FILTER_MODE == 1
+    #ifdef HARDWARE_SHADOWS
+        #define GETSHADOW SHADOWCOMPARE
+    #else
+        #define GETSHADOW Shadow_DoBilinear_2x2
+    #endif
+    #define KERNEL 1
+#elif FILTER_MODE == 2
+    #define GETSHADOW Shadow_DoDither_2x2
+    #define KERNEL 1
+#elif FILTER_MODE == 3
+    #define GETSHADOW Shadow_DoPCF
+    #define KERNEL 4
+#elif FILTER_MODE == 4
+    #define GETSHADOW Shadow_DoPCF
+    #define KERNEL 8
+#endif
+
+out vec4 outFragColor;
+
+uniform SHADOWMAP m_ShadowMap0;
+uniform SHADOWMAP m_ShadowMap1;
+uniform SHADOWMAP m_ShadowMap2;
+uniform SHADOWMAP m_ShadowMap3;
+
+uniform vec4 m_Splits;
+uniform float m_ShadowIntensity;
+
+in vec4 projCoord0;
+in vec4 projCoord1;
+in vec4 projCoord2;
+in vec4 projCoord3;
+in float shadowPosition;
+
+float Shadow_BorderCheck(in vec2 coord){
+    // Fastest, "hack" method (uses 4-5 instructions)
+    vec4 t = vec4(coord.xy, 0.0, 1.0);
+    t = step(t.wwxy, t.xyzz);
+    return dot(t,t);
+}
+
+float Shadow_DoDither_2x2(in SHADOWMAP tex, in vec4 projCoord){
+    float border = Shadow_BorderCheck(projCoord.xy);
+    if (border > 0.0)
+        return 1.0;
+
+    ivec2 texSize = textureSize(tex, 0);
+    vec2 pixSize = 1.0 / vec2(texSize);
+
+    float shadow = 0.0;
+    ivec2 o = ivec2(mod(floor(gl_FragCoord.xy), 2.0));
+    shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2(-1.5, 1.5)+o), projCoord.zw));
+    shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2( 0.5, 1.5)+o), projCoord.zw));
+    shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2(-1.5, -0.5)+o), projCoord.zw));
+    shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2( 0.5, -0.5)+o), projCoord.zw));
+    shadow *= 0.25;
+    return shadow;
+}
+
+float Shadow_DoBilinear_2x2(in SHADOWMAP tex, in vec4 projCoord){
+    float border = Shadow_BorderCheck(projCoord.xy);
+    if (border > 0.0)
+        return 1.0;
+
+    ivec2 texSize = textureSize(tex, 0);
+    #ifdef GL_ARB_gpu_shader5
+        vec4 coord = vec4(projCoord.xyz / projCoord.www,0.0);
+        vec4 gather = SHADOWGATHER(tex, coord);
+    #else
+        vec4 gather = vec4(0.0);
+        gather.x = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(0, 0));
+        gather.y = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(1, 0));
+        gather.z = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(0, 1));
+        gather.w = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(1, 1));
+   #endif
+
+   vec2 f = fract( projCoord.xy * texSize );
+   vec2 mx = mix( gather.xz, gather.yw, f.x );
+   return mix( mx.x, mx.y, f.y );
+}
+
+float Shadow_DoPCF(in SHADOWMAP tex, in vec4 projCoord){
+    float pixSize = 1.0 / textureSize(tex,0).x;
+
+    float shadow = 0.0;
+    float border = Shadow_BorderCheck(projCoord.xy);
+    if (border > 0.0)
+        return 1.0;
+
+    float bound = KERNEL * 0.5 - 0.5;
+    bound *= PCFEDGE;
+    for (float y = -bound; y <= bound; y += PCFEDGE){
+        for (float x = -bound; x <= bound; x += PCFEDGE){
+            vec4 coord = vec4(projCoord.xy + vec2(x,y) * pixSize, projCoord.zw);
+            shadow += SHADOWCOMPARE(tex, coord);
+        }
+    }
+
+    shadow = shadow / (KERNEL * KERNEL);
+    return shadow;
+}
+
+void main(){
+    float shadow = 0.0;
+
+    if(shadowPosition < m_Splits.x){
+        shadow = GETSHADOW(m_ShadowMap0, projCoord0);
+    }else if( shadowPosition <  m_Splits.y){
+        shadow = GETSHADOW(m_ShadowMap1, projCoord1);
+    }else if( shadowPosition <  m_Splits.z){
+        shadow = GETSHADOW(m_ShadowMap2, projCoord2);
+    }else if( shadowPosition <  m_Splits.w){
+        shadow = GETSHADOW(m_ShadowMap3, projCoord3);
+    }
+    
+    shadow = shadow * m_ShadowIntensity + (1.0 - m_ShadowIntensity);
+    outFragColor = vec4(shadow, shadow, shadow, 1.0);
+}
+