]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
ALU cubemap indirection fixes
authoreihrul <eihrul@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 30 Sep 2009 11:39:12 +0000 (11:39 +0000)
committereihrul <eihrul@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 30 Sep 2009 11:39:12 +0000 (11:39 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9262 d7cf8633-e32d-0410-b094-e92efae38249

gl_rmain.c
r_shadow.c

index 997b8842a8426b85c4efabb3cbecd7293cd65c10..883026f4df8bfadc2cf42480c4cde17e1dd7b46d 100644 (file)
@@ -910,6 +910,11 @@ static const char *builtinshaderstring =
 "{\n"
 "      vec3 adir = abs(dir);\n"
 "# if 0\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"
@@ -918,73 +923,37 @@ static const char *builtinshaderstring =
 "              if (adir.x > adir.z)\n"
 "              {\n"
 "                      ma = adir.x;\n"
-"                      if (dir.x >= 0.0)\n"
-"                      {\n"
-"                              // +X\n"
-"                              tc = vec2(-dir.z, -dir.y);\n"
-"                              offset = vec2(0.5, 0.5);\n"
-"                      }\n"
-"                      else\n"
-"                      {\n"
-"                              // -X\n"
-"                              tc = vec2( dir.z, -dir.y);\n"
-"                              offset = vec2(1.5, 0.5);\n"
-"                      }\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"
 "              }\n"
 "              else\n"
 "              {\n"
-"            ma = adir.z;\n"
-"                      if (dir.z >= 0.0)\n"
-"                      {\n"
-"                              // +Z\n"
-"                              tc = vec2( dir.x, -dir.y);\n"
-"                              offset = vec2(0.5, 2.5);\n"
-"                      }\n"
-"                      else\n"
-"                      {\n"
-"                              // -Z\n"
-"                              tc = vec2(-dir.x, -dir.y);\n"
-"                              offset = vec2(1.5, 2.5);\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"
 "              }\n"
 "      }\n"
 "      else\n"
 "      {\n"
 "              if (adir.y > adir.z)\n"
 "              {\n"
-"            ma = adir.y;\n"
-"                      if (dir.y >= 0.0)\n"
-"                      {\n"
-"                              // +Y\n"
-"                              tc = vec2( dir.x,  dir.z);\n"
-"                              offset = vec2(0.5, 1.5);\n"
-"                      }\n"
-"                      else\n"
-"                      {\n"
-"                              // -Y\n"
-"                              tc = vec2( dir.x, -dir.z);\n"
-"                              offset = vec2(1.5, 1.5);\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"
 "              }\n"
 "              else\n"
 "              {\n"
-"            ma = adir.z;\n"
-"                      if (dir.z >= 0.0)\n"
-"                      {\n"
-"                              // +Z\n"
-"                              tc = vec2(dir.x, -dir.y);\n"
-"                              offset = vec2(0.5, 2.5);\n"
-"                      }\n"
-"                      else\n"
-"                      {\n"
-"                              // -Z\n"
-"                              tc = vec2(-dir.x, -dir.y);\n"
-"                              offset = vec2(1.5, 2.5);\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"
 "              }\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"
 "# 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"
@@ -1067,7 +1036,7 @@ static const char *builtinshaderstring =
 "#  else\n"
 "#    ifdef USESHADOWMAPPCF\n"
 "#     if defined(HASTEXTUREGATHER) || defined(HASTEXTURE4)\n"
-"    vec2 center = shadowmaptc.xy*ShadowMap_Texture_Scale.zw, offset = fract(center - 0.5);\n"
+"    vec2 center = shadowmaptc.xy*ShadowMap_TextureScale.zw, offset = fract(center - 0.5);\n"
 "    vec4 group1 = step(shadowmaptc.z, textureGather(Texture_ShadowMap2D, (center + vec2(-1.0, -1.0))*ShadowMap_TextureScale.xy)),\n"
 "         group2 = step(shadowmaptc.z, textureGather(Texture_ShadowMap2D, (center + vec2( 1.0, -1.0))*ShadowMap_TextureScale.xy)),\n"
 "         group3 = step(shadowmaptc.z, textureGather(Texture_ShadowMap2D, (center + vec2(-1.0,  1.0))*ShadowMap_TextureScale.xy)),\n"
index 2f17a2123dc27e125ac8030e84689ed445440796..831c61b2014bed16eb5c74a06a3376b97ec3139e 100644 (file)
@@ -1522,8 +1522,8 @@ void R_Shadow_RenderMode_ShadowMap(int side, qboolean clear, int size)
                R_Viewport_InitRectSideView(&viewport, &rsurface.rtlight->matrix_lighttoworld, side, size, r_shadow_shadowmapping_bordersize.integer, nearclip, farclip, NULL);
                r_shadow_shadowmap_texturescale[0] = 1.0f / R_TextureWidth(r_shadow_shadowmap2dtexture);
                r_shadow_shadowmap_texturescale[1] = 1.0f / R_TextureHeight(r_shadow_shadowmap2dtexture);
-               r_shadow_shadowmap_parameters[0] = (0.5f / 4) * (1.0f - r_shadow_shadowmapborder) / size;
-               r_shadow_shadowmap_parameters[1] = 1.0f / (3 * 4);
+               r_shadow_shadowmap_parameters[0] = (0.5f / 2) * (1.0f - r_shadow_shadowmapborder / (float)size);
+               r_shadow_shadowmap_parameters[1] = (0.5f / 4) * (1.0f - r_shadow_shadowmapborder / (float)size);
                r_shadow_rendermode = R_SHADOW_RENDERMODE_SHADOWMAP2D;
        }
        else if (r_shadow_shadowmode == 2)