X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=gl_rmain.c;h=2b70cb77cd061d8a92826a9fe7a283b34221083f;hb=e7ba190845e104d0310156dba80bc0d84fcaa8e5;hp=ee2688070eaa88419170ea1125ddbd187616757b;hpb=a7160f8d92d7278b9292087401847c18841852f4;p=xonotic%2Fdarkplaces.git diff --git a/gl_rmain.c b/gl_rmain.c index ee268807..2b70cb77 100644 --- a/gl_rmain.c +++ b/gl_rmain.c @@ -1015,9 +1015,12 @@ static const char *builtinshaderstring = "}\n" "#endif // USEOFFSETMAPPING\n" "\n" -"#if defined(MODE_LIGHTSOURCE) || defined(MODE_DEFERREDLIGHTSOURCE) || defined(USESHADOWMAPORTHO)\n" +"#if defined(MODE_LIGHTSOURCE) || defined(MODE_DEFERREDLIGHTSOURCE)\n" "uniform sampler2D Texture_Attenuation;\n" "uniform samplerCube Texture_Cube;\n" +"#endif\n" +"\n" +"#if defined(MODE_LIGHTSOURCE) || defined(MODE_DEFERREDLIGHTSOURCE) || defined(USESHADOWMAPORTHO)\n" "\n" "#ifdef USESHADOWMAPRECT\n" "# ifdef USESHADOWSAMPLER\n" @@ -2209,9 +2212,12 @@ const char *builtincgshaderstring = "}\n" "#endif // USEOFFSETMAPPING\n" "\n" -"#if defined(MODE_LIGHTSOURCE) || defined(MODE_DEFERREDLIGHTSOURCE)\n" +"#if defined(MODE_LIGHTSOURCE) || defined(MODE_DEFERREDLIGHTSOURCE) || defined(USESHADOWMAPORTHO)\n" "#if defined(USESHADOWMAPRECT) || defined(USESHADOWMAP2D)\n" -"# ifdef USESHADOWMAPVSDCT\n" +"# ifdef USESHADOWMAPORTHO\n" +"# define GetShadowMapTC2D(dir, ShadowMap_Parameters) (min(dir, float3(ShadowMap_Parameters.zw, 1.0)))\n" +"# else\n" +"# ifdef USESHADOWMAPVSDCT\n" "float3 GetShadowMapTC2D(float3 dir, float4 ShadowMap_Parameters, samplerCUBE Texture_CubeProjection)\n" "{\n" " float3 adir = abs(dir);\n" @@ -2222,7 +2228,7 @@ const char *builtincgshaderstring = " stc.z += ShadowMap_Parameters.z;\n" " return stc;\n" "}\n" -"# else\n" +"# else\n" "float3 GetShadowMapTC2D(float3 dir, float4 ShadowMap_Parameters)\n" "{\n" " float3 adir = abs(dir);\n" @@ -2265,8 +2271,9 @@ const char *builtincgshaderstring = " stc.z += ShadowMap_Parameters.z;\n" " return stc;\n" "}\n" +"# endif\n" "# endif\n" -"#endif // defined(USESHADOWMAPRECT) || defined(USESHADOWMAP2D)\n" +"#endif // defined(USESHADOWMAPRECT) || defined(USESHADOWMAP2D) || defined(USESHADOWMAPORTHO)\n" "\n" "#ifdef USESHADOWMAPCUBE\n" "float4 GetShadowMapTCCube(float3 dir, float4 ShadowMap_Parameters)\n" @@ -2324,7 +2331,11 @@ const char *builtincgshaderstring = "# endif\n" "\n" "# endif\n" +"# ifdef USESHADOWMAPORTHO\n" +" return lerp(ShadowMap_Parameters.x, ShadowMap_Parameters.y, f);\n" +"# else\n" " return f;\n" +"# endif\n" "}\n" "# endif\n" "\n" @@ -2391,7 +2402,11 @@ const char *builtincgshaderstring = " f = step(shadowmaptc.z, tex2D(Texture_ShadowMap2D, shadowmaptc.xy*ShadowMap_TextureScale).r);\n" "# endif\n" "# endif\n" -" return f;\n" +"# ifdef USESHADOWMAPORTHO\n" +" return lerp(ShadowMap_Parameters.x, ShadowMap_Parameters.y, f);\n" +"# else\n" +" return f;\n" +"# endif\n" "}\n" "# endif\n" "\n" @@ -2703,6 +2718,9 @@ const char *builtincgshaderstring = "#ifdef MODE_DEFERREDLIGHTSOURCE\n" "uniform float3 LightPosition,\n" "#endif\n" +"#ifdef USESHADOWMAPORTHO\n" +"uniform float4x4 ShadowMapMatrix,\n" +"#endif\n" "\n" "out float4 gl_FrontColor : COLOR,\n" "out float4 TexCoordBoth : TEXCOORD0,\n" @@ -2729,6 +2747,9 @@ const char *builtincgshaderstring = "out float3 VectorT : TEXCOORD6, // direction of T texcoord (sometimes crudely called binormal)\n" "out float3 VectorR : TEXCOORD7, // direction of R texcoord (surface normal)\n" "#endif\n" +"#ifdef USESHADOWMAPORTHO\n" +"out float3 ShadowMapTC : TEXCOORD8,\n" +"#endif\n" "out float4 gl_Position : POSITION\n" ")\n" "{\n" @@ -2788,6 +2809,10 @@ const char *builtincgshaderstring = " // transform vertex to camera space, using ftransform to match non-VS rendering\n" " gl_Position = mul(ModelViewProjectionMatrix, gl_Vertex);\n" "\n" +"#ifdef USESHADOWMAPORTHO\n" +" ShadowMapTC = float3(mul(ShadowMapMatrix, gl_Position));\n" +"#endif\n" +"\n" "#ifdef USEREFLECTION\n" " ModelViewProjectionPosition = gl_Position;\n" "#endif\n" @@ -2831,6 +2856,9 @@ const char *builtincgshaderstring = "float3 VectorT : TEXCOORD6, // direction of T texcoord (sometimes crudely called binormal)\n" "float3 VectorR : TEXCOORD7, // direction of R texcoord (surface normal)\n" "#endif\n" +"#ifdef USESHADOWMAPORTHO\n" +"float3 ShadowMapTC : TEXCOORD8\n" +"#endif\n" "\n" "uniform sampler2D Texture_Normal,\n" "uniform sampler2D Texture_Color,\n" @@ -2925,6 +2953,9 @@ const char *builtincgshaderstring = "#if defined(MODE_LIGHTSOURCE) || defined(MODE_DEFERREDLIGHTSOURCE)\n" "uniform sampler2D Texture_Attenuation,\n" "uniform samplerCUBE Texture_Cube,\n" +"#endif\n" +"\n" +"#if defined(MODE_LIGHTSOURCE) || defined(MODE_DEFERREDLIGHTSOURCE) || defined(USESHADOWMAPORTHO)\n" "\n" "#ifdef USESHADOWMAPRECT\n" "# ifdef USESHADOWSAMPLER\n" @@ -2958,7 +2989,7 @@ const char *builtincgshaderstring = "uniform float2 ShadowMap_TextureScale,\n" "uniform float4 ShadowMap_Parameters,\n" "#endif\n" -"#endif // !defined(MODE_LIGHTSOURCE) && !defined(MODE_DEFERREDLIGHTSOURCE)\n" +"#endif // !defined(MODE_LIGHTSOURCE) && !defined(MODE_DEFERREDLIGHTSOURCE) && !defined(USESHADOWMAPORTHO)\n" "\n" "out float4 gl_FragColor : COLOR\n" ")\n" @@ -3135,6 +3166,17 @@ const char *builtincgshaderstring = "# endif\n" "#endif\n" "\n" +"#ifdef USESHADOWMAPORTHO\n" +" color.rgb *= ShadowMapCompare(ShadowMapTC,\n" +"# if defined(USESHADOWMAP2D)\n" +"Texture_ShadowMap2D, ShadowMap_Parameters, ShadowMap_TextureScale\n" +"# endif\n" +"# if defined(USESHADOWMAPRECT)\n" +"Texture_ShadowMapRect, ShadowMap_Parameters\n" +"# endif\n" +" );\n" +"#endif\n" +"\n" "#ifdef USEDEFERREDLIGHTMAP\n" " float2 ScreenTexCoord = Pixel * PixelToScreenTexCoord;\n" " color.rgb += diffusetex * half3(tex2D(Texture_ScreenDiffuse, ScreenTexCoord)) * DeferredMod_Diffuse;\n"