]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
slightly faster non-VSDCT GetShadowMapTC2D variant
authoreihrul <eihrul@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 12 Sep 2011 11:59:37 +0000 (11:59 +0000)
committereihrul <eihrul@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 12 Sep 2011 11:59:37 +0000 (11:59 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@11343 d7cf8633-e32d-0410-b094-e92efae38249

shader_glsl.h

index e54f7c438a21994f8be4921e08eae261dbedf3b1..d59744a440087f0aa6c24de83db524cb6e4242c2 100644 (file)
 "#  else\n"
 "vec3 GetShadowMapTC2D(vec3 dir)\n"
 "{\n"
-"      vec3 adir = abs(dir);\n"
-"      float ma = adir.z;\n"
-"      vec4 proj = vec4(dir, 2.5);\n"
-"      if (adir.x > ma) { ma = adir.x; proj = vec4(dir.zyx, 0.5); }\n"
-"      if (adir.y > ma) { ma = adir.y; proj = vec4(dir.xzy, 1.5); }\n"
-"      vec2 aparams = ShadowMap_Parameters.xy / ma;\n"
-"      return vec3(proj.xy * aparams.x + vec2(proj.z < 0.0 ? 1.5 : 0.5, proj.w) * ShadowMap_Parameters.z, aparams.y + ShadowMap_Parameters.w);\n"
+"   vec3 adir = abs(dir);\n"
+"   vec2 aparams = ShadowMap_Parameters.xy / max(max(adir.x, adir.y), adir.z);\n"
+"   vec4 proj = adir.x > adir.y ? (adir.x > adir.z ? vec4(dir.zy, dir.x < 0.0 ? 1.5 : 0.5, 0.5) : vec4(dir.xy, dir.z < 0.0 ? 1.5 : 0.5, 2.5)) :\n" 
+"                                 (adir.y > adir.z ? vec4(dir.xz, dir.y < 0.0 ? 1.5 : 0.5, 1.5) : vec4(dir.xy, dir.z < 0.0 ? 1.5 : 0.5, 2.5));\n"
+"   return vec3(proj.xy * aparams.x + proj.zw * ShadowMap_Parameters.z, aparams.y + ShadowMap_Parameters.w);\n"
 "}\n"
 "#  endif\n"
 "# endif\n"