]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_rmain.c
shadowmap projection fixes
[xonotic/darkplaces.git] / gl_rmain.c
index 72f8c7d51c4f737a5f65c4c516a3cf2149672026..54159c25531e183819966e955defdb57b299597b 100644 (file)
@@ -912,11 +912,6 @@ static const char *builtinshaderstring =
 "{\n"
 "      vec3 adir = abs(dir);\n"
 "# ifndef USESHADOWMAPVSDCT\n"
-"#  ifdef USESHADOWMAPRECT\n"
-"#   define cubedir(dx, dy, ox, oy) { tc = vec2(dx, dy); offset = vec2(ox, oy); }\n"
-"#  else\n"
-"#   define cubedir(dx, dy, ox, oy) { tc = vec2(dx, dy); offset = vec2(ox/2.0, oy/4.0); }\n"
-"#  endif\n"
 "      vec2 tc;\n"
 "      vec2 offset;\n"
 "      float ma;\n"
@@ -925,14 +920,14 @@ static const char *builtinshaderstring =
 "              if (adir.x > adir.z)\n"
 "              {\n"
 "                      ma = adir.x;\n"
-"                      if (dir.x >= 0.0) cubedir(-dir.z, -dir.y, 0.5, 0.5) // +X\n"
-"                      else              cubedir( dir.z, -dir.y, 1.5, 0.5) // -X\n"
+"                      if (dir.x >= 0.0) { tc = vec2(-dir.z, -dir.y); offset = vec2(0.5, 0.5); } // +X\n"
+"                      else              { tc = vec2( dir.z, -dir.y); offset = vec2(1.5, 0.5); } // -X\n"
 "              }\n"
 "              else\n"
 "              {\n"
 "                      ma = adir.z;\n"
-"                      if (dir.z >= 0.0) cubedir( dir.x, -dir.y, 0.5, 2.5) // +Z\n"
-"                      else              cubedir(-dir.x, -dir.y, 1.5, 2.5) // -Z\n"
+"                      if (dir.z >= 0.0) { tc = vec2( dir.x, -dir.y); offset = vec2(0.5, 2.5); } // +Z\n"
+"                      else              { tc = vec2(-dir.x, -dir.y); offset = vec2(1.5, 2.5); } // -Z\n"
 "              }\n"
 "      }\n"
 "      else\n"
@@ -940,28 +935,22 @@ static const char *builtinshaderstring =
 "              if (adir.y > adir.z)\n"
 "              {\n"
 "                      ma = adir.y;\n"
-"                      if (dir.y >= 0.0) cubedir( dir.x,  dir.z, 0.5, 1.5) // +Y\n"
-"                      else              cubedir( dir.x, -dir.z, 1.5, 1.5) // -Y\n"
+"                      if (dir.y >= 0.0) { tc = vec2( dir.x,  dir.z); offset = vec2(0.5, 1.5); } // +Y\n"
+"                      else              { tc = vec2( dir.x, -dir.z); offset = vec2(1.5, 1.5); } // -Y\n"
 "              }\n"
 "              else\n"
 "              {\n"
 "                      ma = adir.z;\n"
-"                      if (dir.z >= 0.0) cubedir( dir.x, -dir.y, 0.5, 2.5) // +Z\n"
-"                      else              cubedir(-dir.x, -dir.y, 1.5, 2.5) // -Z\n"
+"                      if (dir.z >= 0.0) { tc = vec2( dir.x, -dir.y); offset = vec2(0.5, 2.5); } // +Z\n"
+"                      else              { tc = vec2(-dir.x, -dir.y); offset = vec2(1.5, 2.5); } // -Z\n"
 "              }\n"
 "      }\n"
 "\n"
-"#  ifdef USESHADOWMAPRECT\n"
-"      return vec3(tc * ShadowMap_Parameters.x, ShadowMap_Parameters.w) / ma + vec3(offset * ShadowMap_Parameters.y, ShadowMap_Parameters.z);\n"
-"#  else\n"
-"      return vec3(tc * ShadowMap_Parameters.xy, ShadowMap_Parameters.w) / ma + vec3(offset, ShadowMap_Parameters.z);\n"
-"#  endif\n"
+"      vec3 stc = vec3(tc * ShadowMap_Parameters.x, ShadowMap_Parameters.w) / ma + vec3(offset * ShadowMap_Parameters.y, ShadowMap_Parameters.z);\n"
+"      stc.xy *= ShadowMap_TextureScale.xy;\n"
+"      return stc;\n"
 "# else\n"
-"#  ifdef USESHADOWMAPRECT \n"
-"    return vec3(textureCube(Texture_CubeProjection, dir.xyz).ra * ShadowMap_TextureScale.xy, ShadowMap_Parameters.z + ShadowMap_Parameters.w / max(max(adir.x, adir.y), adir.z));\n"
-"#  else\n"
-"    return vec3(textureCube(Texture_CubeProjection, dir.xyz).ra, ShadowMap_Parameters.z + ShadowMap_Parameters.w / max(max(adir.x, adir.y), adir.z));\n"
-"#  endif\n"
+"      return vec3(textureCube(Texture_CubeProjection, dir.xyz).ra * ShadowMap_Parameters.xy, ShadowMap_Parameters.z + ShadowMap_Parameters.w / max(max(adir.x, adir.y), adir.z));\n"
 "# endif\n"
 "}\n"
 "#endif // defined(USESHADOWMAPRECT) || defined(USESHADOWMAP2D)\n"