[ioquake3] 39/50: OpenGL2: "Fix" cg_shadows 4.

Simon McVittie smcv at debian.org
Sun Jul 23 21:55:26 UTC 2017


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch debian/master
in repository ioquake3.

commit 6f1712dafe2d32d424d110e20218532c41d16388
Author: SmileTheory <SmileTheory at gmail.com>
Date:   Fri Jul 14 16:15:02 2017 -0700

    OpenGL2: "Fix" cg_shadows 4.
---
 code/renderergl2/glsl/pshadow_fp.glsl | 44 ++++++++++-------------------------
 code/renderergl2/tr_backend.c         | 18 +++++++-------
 code/renderergl2/tr_fbo.c             |  6 ++---
 code/renderergl2/tr_image.c           |  9 ++++---
 code/renderergl2/tr_main.c            |  2 +-
 5 files changed, 29 insertions(+), 50 deletions(-)

diff --git a/code/renderergl2/glsl/pshadow_fp.glsl b/code/renderergl2/glsl/pshadow_fp.glsl
index b152971..c196f48 100644
--- a/code/renderergl2/glsl/pshadow_fp.glsl
+++ b/code/renderergl2/glsl/pshadow_fp.glsl
@@ -8,12 +8,6 @@ uniform float     u_LightRadius;
 varying vec3      var_Position;
 varying vec3      var_Normal;
 
-float sampleDistMap(sampler2D texMap, vec2 uv, float scale)
-{
-	vec3 distv = texture2D(texMap, uv).xyz;
-	return dot(distv, vec3(1.0 / (256.0 * 256.0), 1.0 / 256.0, 1.0)) * scale;
-}
-
 void main()
 {
 	vec3 lightToPos = var_Position - u_LightOrigin.xyz;
@@ -57,42 +51,28 @@ void main()
 #endif
 
 	intensity *= fade;
-#if defined(USE_PCF)
-	float part;
-	
-	dist = sampleDistMap(u_ShadowMap, st + vec2(-1.0/512.0, -1.0/512.0), u_LightRadius);
-	part =  max(sign(lightDist - dist), 0.0);
-
-	dist = sampleDistMap(u_ShadowMap, st + vec2( 1.0/512.0, -1.0/512.0), u_LightRadius);
-	part += max(sign(lightDist - dist), 0.0);
 
-	dist = sampleDistMap(u_ShadowMap, st + vec2(-1.0/512.0,  1.0/512.0), u_LightRadius);
-	part += max(sign(lightDist - dist), 0.0);
-
-	dist = sampleDistMap(u_ShadowMap, st + vec2( 1.0/512.0,  1.0/512.0), u_LightRadius);
-	part += max(sign(lightDist - dist), 0.0);
+	float part;
+#if defined(USE_PCF)
+	part  = float(texture2D(u_ShadowMap, st + vec2(-1.0/512.0, -1.0/512.0)).r != 1.0);
+	part += float(texture2D(u_ShadowMap, st + vec2( 1.0/512.0, -1.0/512.0)).r != 1.0);
+	part += float(texture2D(u_ShadowMap, st + vec2(-1.0/512.0,  1.0/512.0)).r != 1.0);
+	part += float(texture2D(u_ShadowMap, st + vec2( 1.0/512.0,  1.0/512.0)).r != 1.0);
+#else
+	part  = float(texture2D(u_ShadowMap, st).r != 1.0);
+#endif
 
-  #if defined(USE_DISCARD)
 	if (part <= 0.0)
 	{
 		discard;
 	}
-  #endif
 
+#if defined(USE_PCF)
 	intensity *= part * 0.25;
 #else
-	dist = sampleDistMap(u_ShadowMap, st, u_LightRadius);
-
-  #if defined(USE_DISCARD)
-	if (lightDist - dist <= 0.0)
-	{
-		discard;
-	}
-  #endif
-			
-	intensity *= max(sign(lightDist - dist), 0.0);
+	intensity *= part;
 #endif
-		
+
 	gl_FragColor.rgb = vec3(0);
 	gl_FragColor.a = clamp(intensity, 0.0, 0.75);
 }
diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c
index dc27cdd..39e9014 100644
--- a/code/renderergl2/tr_backend.c
+++ b/code/renderergl2/tr_backend.c
@@ -1604,26 +1604,26 @@ const void *RB_PostProcess(const void *data)
 	if (0 && r_sunlightMode->integer)
 	{
 		ivec4_t dstBox;
-		VectorSet4(dstBox, 0, 0, 128, 128);
+		VectorSet4(dstBox, 0, glConfig.vidHeight - 128, 128, 128);
 		FBO_BlitFromTexture(tr.sunShadowDepthImage[0], NULL, NULL, NULL, dstBox, NULL, NULL, 0);
-		VectorSet4(dstBox, 128, 0, 128, 128);
+		VectorSet4(dstBox, 128, glConfig.vidHeight - 128, 128, 128);
 		FBO_BlitFromTexture(tr.sunShadowDepthImage[1], NULL, NULL, NULL, dstBox, NULL, NULL, 0);
-		VectorSet4(dstBox, 256, 0, 128, 128);
+		VectorSet4(dstBox, 256, glConfig.vidHeight - 128, 128, 128);
 		FBO_BlitFromTexture(tr.sunShadowDepthImage[2], NULL, NULL, NULL, dstBox, NULL, NULL, 0);
-		VectorSet4(dstBox, 384, 0, 128, 128);
+		VectorSet4(dstBox, 384, glConfig.vidHeight - 128, 128, 128);
 		FBO_BlitFromTexture(tr.sunShadowDepthImage[3], NULL, NULL, NULL, dstBox, NULL, NULL, 0);
 	}
 
-	if (0 && r_shadows->integer == 4)
+	if (1 && r_shadows->integer == 4)
 	{
 		ivec4_t dstBox;
-		VectorSet4(dstBox, 0, glConfig.vidHeight - 128, 128, 128);
+		VectorSet4(dstBox, 512 + 0, glConfig.vidHeight - 128, 128, 128);
 		FBO_BlitFromTexture(tr.pshadowMaps[0], NULL, NULL, NULL, dstBox, NULL, NULL, 0);
-		VectorSet4(dstBox, 128, glConfig.vidHeight - 128, 128, 128);
+		VectorSet4(dstBox, 512 + 128, glConfig.vidHeight - 128, 128, 128);
 		FBO_BlitFromTexture(tr.pshadowMaps[1], NULL, NULL, NULL, dstBox, NULL, NULL, 0);
-		VectorSet4(dstBox, 256, glConfig.vidHeight - 128, 128, 128);
+		VectorSet4(dstBox, 512 + 256, glConfig.vidHeight - 128, 128, 128);
 		FBO_BlitFromTexture(tr.pshadowMaps[2], NULL, NULL, NULL, dstBox, NULL, NULL, 0);
-		VectorSet4(dstBox, 384, glConfig.vidHeight - 128, 128, 128);
+		VectorSet4(dstBox, 512 + 384, glConfig.vidHeight - 128, 128, 128);
 		FBO_BlitFromTexture(tr.pshadowMaps[3], NULL, NULL, NULL, dstBox, NULL, NULL, 0);
 	}
 
diff --git a/code/renderergl2/tr_fbo.c b/code/renderergl2/tr_fbo.c
index 54dc8fe..98c5b50 100644
--- a/code/renderergl2/tr_fbo.c
+++ b/code/renderergl2/tr_fbo.c
@@ -322,14 +322,14 @@ void FBO_Init(void)
 		R_CheckFBO(tr.sunRaysFbo);
 	}
 
-	// FIXME: Don't use separate color/depth buffers for a shadow buffer
 	if (MAX_DRAWN_PSHADOWS && tr.pshadowMaps[0])
 	{
 		for( i = 0; i < MAX_DRAWN_PSHADOWS; i++)
 		{
 			tr.pshadowFbos[i] = FBO_Create(va("_shadowmap%d", i), tr.pshadowMaps[i]->width, tr.pshadowMaps[i]->height);
-			FBO_AttachImage(tr.pshadowFbos[i], tr.pshadowMaps[i], GL_COLOR_ATTACHMENT0, 0);
-			FBO_CreateBuffer(tr.pshadowFbos[i], GL_DEPTH_COMPONENT24_ARB, 0, 0);
+			// FIXME: this next line wastes 16mb with 16x512x512 sun shadow maps, skip if OpenGL 4.3+ or ARB_framebuffer_no_attachments
+			FBO_CreateBuffer(tr.pshadowFbos[i], GL_RGBA8, 0, 0);
+			FBO_AttachImage(tr.pshadowFbos[i], tr.pshadowMaps[i], GL_DEPTH_ATTACHMENT, 0);
 			R_CheckFBO(tr.pshadowFbos[i]);
 		}
 	}
diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c
index ae15abc..169343d 100644
--- a/code/renderergl2/tr_image.c
+++ b/code/renderergl2/tr_image.c
@@ -2808,12 +2808,11 @@ void R_CreateBuiltinImages( void ) {
 			tr.screenSsaoImage = R_CreateImage("*screenSsao", NULL, width / 2, height / 2, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_RGBA8);
 		}
 
-		if (r_shadows->integer == 4)
+		for( x = 0; x < MAX_DRAWN_PSHADOWS; x++)
 		{
-			for( x = 0; x < MAX_DRAWN_PSHADOWS; x++)
-			{
-				tr.pshadowMaps[x] = R_CreateImage(va("*shadowmap%i", x), NULL, PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_RGBA8);
-			}
+			tr.pshadowMaps[x] = R_CreateImage(va("*shadowmap%i", x), NULL, PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24);
+			//qglTextureParameterfEXT(tr.pshadowMaps[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
+			//qglTextureParameterfEXT(tr.pshadowMaps[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
 		}
 
 		if (r_sunlightMode->integer)
diff --git a/code/renderergl2/tr_main.c b/code/renderergl2/tr_main.c
index cc33c71..1f66d90 100644
--- a/code/renderergl2/tr_main.c
+++ b/code/renderergl2/tr_main.c
@@ -2098,7 +2098,7 @@ void R_RenderPshadowMaps(const refdef_t *fd)
 		if (glRefConfig.framebufferObject)
 			shadowParms.targetFbo = tr.pshadowFbos[i];
 
-		shadowParms.flags = VPF_SHADOWMAP | VPF_DEPTHSHADOW | VPF_NOVIEWMODEL;
+		shadowParms.flags = VPF_DEPTHSHADOW | VPF_NOVIEWMODEL;
 		shadowParms.zFar = shadow->lightRadius;
 
 		VectorCopy(shadow->lightOrigin, shadowParms.or.origin);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/ioquake3.git



More information about the Pkg-games-commits mailing list