From bf88f9f31132f7f69c21b3dc9490033efd091011 Mon Sep 17 00:00:00 2001
From: DarkGod <darkgod@net-core.org>
Date: Wed, 6 Nov 2013 23:58:51 +0100
Subject: [PATCH] yay

---
 .../tome/data/gfx/shaders/target_fbo.frag     | 146 +++++++++---------
 1 file changed, 74 insertions(+), 72 deletions(-)

diff --git a/game/modules/tome/data/gfx/shaders/target_fbo.frag b/game/modules/tome/data/gfx/shaders/target_fbo.frag
index 77a229d828..5045fd33df 100644
--- a/game/modules/tome/data/gfx/shaders/target_fbo.frag
+++ b/game/modules/tome/data/gfx/shaders/target_fbo.frag
@@ -9,11 +9,11 @@ void main(void)
 {
 	vec2 offset = vec2(1.0, 1.0) / mapCoord * tileSize * 0.5;
 	
-	vec4 colorm0 = texture2D( fboTex, gl_TexCoord[0].xy + vec2(-offset.x, 0.0));
+	/*vec4 colorm0 = texture2D( fboTex, gl_TexCoord[0].xy + vec2(-offset.x, 0.0));
 	vec4 colorp0 = texture2D( fboTex, gl_TexCoord[0].xy + vec2( offset.x, 0.0));
 
 	vec4 color0m = texture2D( fboTex, gl_TexCoord[0].xy + vec2(0.0, -offset.y));
-	vec4 color0p = texture2D( fboTex, gl_TexCoord[0].xy + vec2(0.0,  offset.y));
+	vec4 color0p = texture2D( fboTex, gl_TexCoord[0].xy + vec2(0.0,  offset.y));*/
 	
 	vec4 colormm = texture2D( fboTex, gl_TexCoord[0].xy + vec2(-offset.x,-offset.y));
 	vec4 colormp = texture2D( fboTex, gl_TexCoord[0].xy + vec2(-offset.x, offset.y));
@@ -42,49 +42,34 @@ void main(void)
 		loc3 = true;
 	if(colorpp.a > 0.1)
 		loc9 = true;
+	if(color00.a > 0.1)
+		loc5 = true;
 		
-	int location = 5;
-	bool isInternal = false;
-	
-	if(loc1 && !loc9 && loc7 && !loc3)
-		location = 6;
-	if(loc1 && !loc9  && loc3 && !loc7)
-		location = 8;
-	if(loc3 && !loc7 && loc9 && !loc1)
-		location = 4;
-	if(loc7 && !loc3 && loc9 && !loc1)
-		location = 2;
-		
-	if(loc1 && !loc7 && !loc3 && !loc9)
-		location = 9;
-	if(loc7 && !loc1 && !loc9 && !loc3)
-		location = 3;
-	if(loc9 && !loc7 && !loc3 && !loc1)
-		location = 1;
-	if(loc3 && !loc1 && !loc9 && !loc7)
-		location = 7;
-
-	if(loc1 && loc7 && loc3 && !loc9)
+	if(gl_TexCoord[0].x + offset.x > 1.0)
 	{
-		location = 1;
-		isInternal = true;
+		loc9 = 0; 
+		loc3 = 0;
 	}
-	if(loc7 && loc1 && loc9 && !loc3)
+
+	if(gl_TexCoord[0].x - offset.x < 0.0)
 	{
-		location = 7;
-		isInternal = true;
+		loc1 = 0; 
+		loc7 = 0;
 	}
-	if(loc9 && loc7 && loc3 && !loc1)
+
+	if(gl_TexCoord[0].y + offset.y > 1.0)
 	{
-		location = 9;
-		isInternal = true;
+		loc7 = 0; 
+		loc9 = 0;
 	}
-	if(loc3 && loc1 && loc9 && !loc7)
+
+	if(gl_TexCoord[0].y - offset.y < 0.0)
 	{
-		location = 3;
-		isInternal = true;
+		loc1 = 0; 
+		loc3 = 0;
 	}
-	
+			
+
 	vec2 fboCoord = gl_TexCoord[0].xy;
 	fboCoord.y = 1.0 - fboCoord.y;
 	vec2 texCoord = (fboCoord * mapCoord + scrollOffset) / tileSize + vec2(0.5, 0.5);
@@ -92,48 +77,65 @@ void main(void)
 	texCoord.y = mod(texCoord.y, 1.0);
 
 	vec4 borderColor = vec4(0.0, 0.0, 0.0, 0.0);
-	if(location == 1)
-	{
-		if(isInternal)
-			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 3.0));
-		else
-			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 1.0));
-	}
+	
+	if(loc1 && loc7 && loc3 && !loc9) //1 internal
+		borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 3.0));
+		
+	if(loc9 && !loc7 && !loc3 && !loc1) //1 external
+		borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 1.0));
 			
-	if(location == 2)
-		borderColor += texture2D( targetSkin, texCoord / vec2(2.0, 4.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 1.0));
+	if(loc7 && !loc3 && loc9 && !loc1) //2
+		borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 4.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 1.0));
 
-	if(location == 3)
-	{
-		if(isInternal)
-			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 3.0));
-		else
-			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 1.0));
-	}
-	if(location == 6)
-		borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 2.0) + vec2(1.0 / 4.0 * 3.0, 1.0 / 4.0 * 2.0));
+	if(loc3 && loc1 && loc9 && !loc7) //3 internal
+		borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 3.0));
+		
+	if(loc7 && !loc1 && !loc9 && !loc3) //3 external
+		borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 1.0));
+		
+	if(loc1 && !loc9 && loc7 && !loc3) //8
+		borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 4.0) + vec2(1.0 / 4.0 * 3.0, 1.0 / 4.0 * 0.0));
 			
-	if(location == 9)
-	{
-		if(isInternal)
-			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 2.0));
-		else
-			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 0.0));
-	}
-	if(location == 8)
-		borderColor += texture2D( targetSkin, texCoord / vec2(2.0, 4.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 0.0));
+	if(loc9 && loc7 && loc3 && !loc1)
+		borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 2.0));
+
+	if(loc1 && !loc7 && !loc3 && !loc9) //9 external
+		borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 1.0, 1.0 / 4.0 * 0.0));
+
+	if(loc1 && !loc9  && loc3 && !loc7)
+		borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 4.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 0.0));
 
-	if(location == 7)
+	if(loc7 && loc1 && loc9 && !loc3) //7 internal
+		borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 2.0));
+		
+	if(loc3 && !loc1 && !loc9 && !loc7) //7 external
+		borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 0.0));
+
+	if(loc3 && !loc7 && loc9 && !loc1) //4
+		borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 4.0) + vec2(1.0 / 4.0 * 3.0, 1.0 / 4.0 * 1.0));
+
+	if(loc3 && loc7 && !loc9 && !loc1) //3-7 diag
+		borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 4.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 2.0));
+
+	if(!loc3 && !loc7 && loc9 && loc1) //1-9 diag
+		borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 4.0) + vec2(1.0 / 4.0 * 3.0, 1.0 / 4.0 * 2.0));
+
+	if(loc3 && loc7 && loc9 && loc1) //internal quad
+		borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 4.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 3.0));
+		
+	if(!loc5 && borderColor.a > 0.0)
+	{
+		vec4 avgColor = 
+			(colormm * colormm.a + colormp * colormp.a + colorpm * colorpm.a + colorpp * colorpp.a)
+			/ (colormm.a + colormp.a + colorpm.a + colorpp.a + 1e-5);
+		resultColor += avgColor;
+		resultColor.rgb += borderColor.rgb * borderColor.a;
+		resultColor.a = borderColor.a;
+	}else
 	{
-		if(isInternal)
-			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 2.0));
-		else
-			borderColor += texture2D( targetSkin, texCoord / 4.0 + vec2(1.0 / 4.0 * 0.0, 1.0 / 4.0 * 0.0));
+		borderColor.rgb *= borderColor.a;
+		resultColor += borderColor;
 	}
-	if(location == 4)
-		borderColor += texture2D( targetSkin, texCoord / vec2(4.0, 2.0) + vec2(1.0 / 4.0 * 2.0, 1.0 / 4.0 * 2.0));
 
-	borderColor.rgb *= borderColor.a;
-	resultColor += borderColor;
 	gl_FragColor = resultColor;
 }
-- 
GitLab