"{\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"
" 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"
"# 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"
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)