From e7ba190845e104d0310156dba80bc0d84fcaa8e5 Mon Sep 17 00:00:00 2001 From: eihrul Date: Thu, 4 Feb 2010 00:46:03 +0000 Subject: [PATCH] update CG shader for shadowmaportho git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9927 d7cf8633-e32d-0410-b094-e92efae38249 --- gl_rmain.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 7 deletions(-) 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" -- 2.39.2