]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
attempting cheaper non-VSDCT projection
authoreihrul <eihrul@d7cf8633-e32d-0410-b094-e92efae38249>
Sun, 7 Feb 2010 19:04:11 +0000 (19:04 +0000)
committereihrul <eihrul@d7cf8633-e32d-0410-b094-e92efae38249>
Sun, 7 Feb 2010 19:04:11 +0000 (19:04 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9943 d7cf8633-e32d-0410-b094-e92efae38249

gl_rmain.c

index fc314d1e88829a19d0b187c03ee4d8ad7dc46fc2..d8c67879cebff464fa2ca5ccd036063ead954faa 100644 (file)
@@ -1063,55 +1063,23 @@ static const char *builtinshaderstring =
 "#  ifdef USESHADOWMAPVSDCT\n"
 "vec3 GetShadowMapTC2D(vec3 dir)\n"
 "{\n"
-"   vec3 adir = abs(dir);\n"
-"   vec4 proj = textureCube(Texture_CubeProjection, dir);\n"
-"   float ma = max(max(adir.x, adir.y), adir.z);\n"
-"   vec3 stc = vec3(mix(dir.xy, dir.zz, proj.xy) * ShadowMap_Parameters.x, ShadowMap_Parameters.w) / ma;\n"
-"   stc.xy += proj.zw * ShadowMap_Parameters.y;\n"
-"   stc.z += ShadowMap_Parameters.z;\n"
-"   return stc;\n"
+"      vec3 adir = abs(dir);\n"
+"      float ma = max(max(adir.x, adir.y), adir.z);\n"
+"      vec4 proj = textureCube(Texture_CubeProjection, dir);\n"
+"      vec3 stc = vec3(mix(dir.xy, dir.zz, proj.xy) * ShadowMap_Parameters.x, ShadowMap_Parameters.w) / ma;\n"
+"      stc += vec3(proj.zw * ShadowMap_Parameters.y, ShadowMap_Parameters.z);\n"
+"      return stc;\n"
 "}\n"
 "#  else\n"
 "vec3 GetShadowMapTC2D(vec3 dir)\n"
 "{\n"
 "      vec3 adir = abs(dir);\n"
-"      vec2 tc;\n"
-"      vec2 offset;\n"
-"      float ma;\n"
-"      if (adir.x > adir.y)\n"
-"      {\n"
-"              if (adir.x > adir.z) // X\n"
-"              {\n"
-"                      ma = adir.x;\n"
-"                      tc = dir.zy;\n"
-"                      offset = vec2(mix(0.5, 1.5, dir.x < 0.0), 0.5);\n"
-"              }\n"
-"              else // Z\n"
-"              {\n"
-"                      ma = adir.z;\n"
-"                      tc = dir.xy;\n"
-"                      offset = vec2(mix(0.5, 1.5, dir.z < 0.0), 2.5);\n"
-"              }\n"
-"      }\n"
-"      else\n"
-"      {\n"
-"              if (adir.y > adir.z) // Y\n"
-"              {\n"
-"                      ma = adir.y;\n"
-"                      tc = dir.xz;\n"
-"                      offset = vec2(mix(0.5, 1.5, dir.y < 0.0), 1.5);\n"
-"              }\n"
-"              else // Z\n"
-"              {\n"
-"                      ma = adir.z;\n"
-"                      tc = dir.xy;\n"
-"                      offset = vec2(mix(0.5, 1.5, dir.z < 0.0), 2.5);\n"
-"              }\n"
-"      }\n"
-"\n"
-"      vec3 stc = vec3(tc * ShadowMap_Parameters.x, ShadowMap_Parameters.w) / ma;\n"
-"      stc.xy += offset * ShadowMap_Parameters.y;\n"
-"      stc.z += ShadowMap_Parameters.z;\n"
+"      float ma = max(max(adir.x, adir.y), adir.z);\n"
+"      vec4 proj = vec4(dir.zyx, 0.5), projy = vec4(dir.xzy, 1.5), projz = vec4(dir, 2.5);\n"
+"      proj = adir.y >= ma ? projy : proj;\n"
+"      proj = adir.z >= ma ? projz : proj;\n"
+"      vec3 stc = vec3(proj.xy * ShadowMap_Parameters.x, ShadowMap_Parameters.w) / ma;\n"
+"      stc += vec3(vec2(proj.z < 0.0 ? 1.5 : 0.5, proj.w) * ShadowMap_Parameters.y, ShadowMap_Parameters.z);\n"
 "      return stc;\n"
 "}\n"
 "#  endif\n"
@@ -2221,55 +2189,23 @@ const char *builtincgshaderstring =
 "#  ifdef USESHADOWMAPVSDCT\n"
 "float3 GetShadowMapTC2D(float3 dir, float4 ShadowMap_Parameters, samplerCUBE Texture_CubeProjection)\n"
 "{\n"
-"   float3 adir = abs(dir);\n"
-"   float4 proj = texCUBE(Texture_CubeProjection, dir);\n"
-"   float ma = max(max(adir.x, adir.y), adir.z);\n"
-"   float3 stc = float3(lerp(dir.xy, dir.zz, proj.xy) * ShadowMap_Parameters.x, ShadowMap_Parameters.w) / ma;\n"
-"   stc.xy += proj.zw * ShadowMap_Parameters.y;\n"
-"   stc.z += ShadowMap_Parameters.z;\n"
-"   return stc;\n"
+"      float3 adir = abs(dir);\n"
+"      float ma = max(max(adir.x, adir.y), adir.z);\n"
+"      float4 proj = texCUBE(Texture_CubeProjection, dir);\n"
+"      float3 stc = float3(lerp(dir.xy, dir.zz, proj.xy) * ShadowMap_Parameters.x, ShadowMap_Parameters.w) / ma;\n"
+"      stc += float3(proj.zw * ShadowMap_Parameters.y, ShadowMap_Parameters.z);\n"
+"      return stc;\n"
 "}\n"
 "#  else\n"
 "float3 GetShadowMapTC2D(float3 dir, float4 ShadowMap_Parameters)\n"
 "{\n"
 "      float3 adir = abs(dir);\n"
-"      float2 tc;\n"
-"      float2 offset;\n"
-"      float ma;\n"
-"      if (adir.x > adir.y)\n"
-"      {\n"
-"              if (adir.x > adir.z) // X\n"
-"              {\n"
-"                      ma = adir.x;\n"
-"                      tc = dir.zy;\n"
-"                      offset = float2(lerp(0.5, 1.5, dir.x < 0.0), 0.5);\n"
-"              }\n"
-"              else // Z\n"
-"              {\n"
-"                      ma = adir.z;\n"
-"                      tc = dir.xy;\n"
-"                      offset = float2(lerp(0.5, 1.5, dir.z < 0.0), 2.5);\n"
-"              }\n"
-"      }\n"
-"      else\n"
-"      {\n"
-"              if (adir.y > adir.z) // Y\n"
-"              {\n"
-"                      ma = adir.y;\n"
-"                      tc = dir.xz;\n"
-"                      offset = float2(lerp(0.5, 1.5, dir.y < 0.0), 1.5);\n"
-"              }\n"
-"              else // Z\n"
-"              {\n"
-"                      ma = adir.z;\n"
-"                      tc = dir.xy;\n"
-"                      offset = float2(lerp(0.5, 1.5, dir.z < 0.0), 2.5);\n"
-"              }\n"
-"      }\n"
-"\n"
-"      float3 stc = float3(tc * ShadowMap_Parameters.x, ShadowMap_Parameters.w) / ma;\n"
-"      stc.xy += offset * ShadowMap_Parameters.y;\n"
-"      stc.z += ShadowMap_Parameters.z;\n"
+"      float ma = max(max(adir.x, adir.y), adir.z);\n"
+"      float4 proj = float4(dir.zyx, 0.5), projy = float4(dir.xzy, 1.5), projz = float4(dir, 2.5);\n"
+"      proj = adir.y >= ma ? projy : proj;\n"
+"      proj = adir.z >= ma ? projz : proj;\n"
+"      float3 stc = float3(proj.xy * ShadowMap_Parameters.x, ShadowMap_Parameters.w) / ma;\n"
+"      stc += float3(vec2(proj.z < 0.0 ? 1.5 : 0.5, proj.w) * ShadowMap_Parameters.y, ShadowMap_Parameters.z);\n"
 "      return stc;\n"
 "}\n"
 "#  endif\n"