From: havoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Date: Sun, 28 Jan 2007 02:55:15 +0000 (+0000)
Subject: added MATERIALFLAG_NOSHADOW in an effort to clean up the material checking in shadow... 
X-Git-Tag: xonotic-v0.1.0preview~3650
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=48422e8fb2ac64f14ab5eb102be50d6258c72396;p=xonotic%2Fdarkplaces.git

added MATERIALFLAG_NOSHADOW in an effort to clean up the material checking in shadow code a bit


git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@6760 d7cf8633-e32d-0410-b094-e92efae38249
---

diff --git a/model_alias.c b/model_alias.c
index e3ad4024..c2bd4a8c 100644
--- a/model_alias.c
+++ b/model_alias.c
@@ -685,7 +685,7 @@ static void Mod_BuildAliasSkinFromSkinFrame(texture_t *texture, skinframe_t *ski
 
 	texture->basematerialflags = MATERIALFLAG_WALL;
 	if (texture->currentskinframe->fog)
-		texture->basematerialflags |= MATERIALFLAG_ALPHA | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT;
+		texture->basematerialflags |= MATERIALFLAG_ALPHA | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT | MATERIALFLAG_NOSHADOW;
 	texture->currentmaterialflags = texture->basematerialflags;
 }
 
diff --git a/model_brush.c b/model_brush.c
index 15402553..5339df4c 100644
--- a/model_brush.c
+++ b/model_brush.c
@@ -1271,7 +1271,7 @@ static void Mod_Q1BSP_LoadTextures(lump_t *l)
 		tx->basematerialflags = 0;
 		if (i == loadmodel->num_textures - 1)
 		{
-			tx->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_LIGHTBOTHSIDES;
+			tx->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_LIGHTBOTHSIDES | MATERIALFLAG_NOSHADOW;
 			tx->supercontents = mod_q1bsp_texture_water.supercontents;
 			tx->surfaceflags = mod_q1bsp_texture_water.surfaceflags;
 		}
@@ -1402,7 +1402,7 @@ static void Mod_Q1BSP_LoadTextures(lump_t *l)
 			if (strncmp(tx->name,"*lava",5)
 			 && strncmp(tx->name,"*teleport",9)
 			 && strncmp(tx->name,"*rift",5)) // Scourge of Armagon texture
-				tx->basematerialflags |= MATERIALFLAG_WATERALPHA;
+				tx->basematerialflags |= MATERIALFLAG_WATERALPHA | MATERIALFLAG_NOSHADOW;
 			if (!strncmp(tx->name, "*lava", 5))
 			{
 				tx->supercontents = mod_q1bsp_texture_lava.supercontents;
@@ -1418,13 +1418,13 @@ static void Mod_Q1BSP_LoadTextures(lump_t *l)
 				tx->supercontents = mod_q1bsp_texture_water.supercontents;
 				tx->surfaceflags = mod_q1bsp_texture_water.surfaceflags;
 			}
-			tx->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_LIGHTBOTHSIDES;
+			tx->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_LIGHTBOTHSIDES | MATERIALFLAG_NOSHADOW;
 		}
 		else if (tx->name[0] == 's' && tx->name[1] == 'k' && tx->name[2] == 'y')
 		{
 			tx->supercontents = mod_q1bsp_texture_sky.supercontents;
 			tx->surfaceflags = mod_q1bsp_texture_sky.surfaceflags;
-			tx->basematerialflags |= MATERIALFLAG_SKY;
+			tx->basematerialflags |= MATERIALFLAG_SKY | MATERIALFLAG_NOSHADOW;
 		}
 		else
 		{
@@ -1433,7 +1433,7 @@ static void Mod_Q1BSP_LoadTextures(lump_t *l)
 			tx->basematerialflags |= MATERIALFLAG_WALL;
 		}
 		if (tx->skinframes[0].fog)
-			tx->basematerialflags |= MATERIALFLAG_ALPHA | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT;
+			tx->basematerialflags |= MATERIALFLAG_ALPHA | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT | MATERIALFLAG_NOSHADOW;
 
 		// start out with no animation
 		tx->currentframe = tx;
@@ -4354,7 +4354,7 @@ static void Mod_Q3BSP_LoadTextures(lump_t *l)
 			out->basematerialflags = 0;
 			if (shader->surfaceparms & Q3SURFACEPARM_SKY)
 			{
-				out->basematerialflags |= MATERIALFLAG_SKY;
+				out->basematerialflags |= MATERIALFLAG_SKY | MATERIALFLAG_NOSHADOW;
 				if (shader->skyboxname[0])
 				{
 					// quake3 seems to append a _ to the skybox name, so this must do so as well
@@ -4362,17 +4362,19 @@ static void Mod_Q3BSP_LoadTextures(lump_t *l)
 				}
 			}
 			else if ((out->surfaceflags & Q3SURFACEFLAG_NODRAW) || shader->numlayers == 0)
-				out->basematerialflags |= MATERIALFLAG_NODRAW;
+				out->basematerialflags |= MATERIALFLAG_NODRAW | MATERIALFLAG_NOSHADOW;
 			else if (shader->surfaceparms & Q3SURFACEPARM_LAVA)
-				out->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_FULLBRIGHT;
+				out->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_LIGHTBOTHSIDES | MATERIALFLAG_FULLBRIGHT | MATERIALFLAG_NOSHADOW;
 			else if (shader->surfaceparms & Q3SURFACEPARM_SLIME)
-				out->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_WATERALPHA;
+				out->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_LIGHTBOTHSIDES | MATERIALFLAG_WATERALPHA | MATERIALFLAG_NOSHADOW;
 			else if (shader->surfaceparms & Q3SURFACEPARM_WATER)
-				out->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_WATERALPHA;
+				out->basematerialflags |= MATERIALFLAG_WATER | MATERIALFLAG_LIGHTBOTHSIDES | MATERIALFLAG_WATERALPHA | MATERIALFLAG_NOSHADOW;
 			else
 				out->basematerialflags |= MATERIALFLAG_WALL;
 			if (shader->layers[0].alphatest)
-				out->basematerialflags |= MATERIALFLAG_ALPHATEST | MATERIALFLAG_TRANSPARENT;
+				out->basematerialflags |= MATERIALFLAG_ALPHATEST | MATERIALFLAG_TRANSPARENT | MATERIALFLAG_NOSHADOW;
+			if (shader->textureflags & (Q3TEXTUREFLAG_TWOSIDED | Q3TEXTUREFLAG_AUTOSPRITE | Q3TEXTUREFLAG_AUTOSPRITE2))
+				out->basematerialflags |= MATERIALFLAG_NOSHADOW;
 			out->customblendfunc[0] = GL_ONE;
 			out->customblendfunc[1] = GL_ZERO;
 			if (shader->numlayers > 0)
@@ -4403,13 +4405,13 @@ Q3 shader blendfuncs actually used in the game (* = supported by DP)
 				if (shader->layers[0].blendfunc[0] != GL_ONE || shader->layers[0].blendfunc[1] != GL_ZERO)
 				{
 					if (shader->layers[0].blendfunc[0] == GL_ONE && shader->layers[0].blendfunc[1] == GL_ONE)
-						out->basematerialflags |= MATERIALFLAG_ADD | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT;
+						out->basematerialflags |= MATERIALFLAG_ADD | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT | MATERIALFLAG_NOSHADOW;
 					else if (shader->layers[0].blendfunc[0] == GL_SRC_ALPHA && shader->layers[0].blendfunc[1] == GL_ONE)
-						out->basematerialflags |= MATERIALFLAG_ADD | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT;
+						out->basematerialflags |= MATERIALFLAG_ADD | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT | MATERIALFLAG_NOSHADOW;
 					else if (shader->layers[0].blendfunc[0] == GL_SRC_ALPHA && shader->layers[0].blendfunc[1] == GL_ONE_MINUS_SRC_ALPHA)
-						out->basematerialflags |= MATERIALFLAG_ALPHA | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT;
+						out->basematerialflags |= MATERIALFLAG_ALPHA | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT | MATERIALFLAG_NOSHADOW;
 					else
-						out->basematerialflags |= MATERIALFLAG_CUSTOMBLEND | MATERIALFLAG_FULLBRIGHT | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT;
+						out->basematerialflags |= MATERIALFLAG_CUSTOMBLEND | MATERIALFLAG_FULLBRIGHT | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT | MATERIALFLAG_NOSHADOW;
 				}
 			}
 			if (!shader->lighting)
@@ -4430,9 +4432,9 @@ Q3 shader blendfuncs actually used in the game (* = supported by DP)
 			Con_DPrintf("%s: No shader found for texture \"%s\"\n", loadmodel->name, out->name);
 			out->surfaceparms = 0;
 			if (out->surfaceflags & Q3SURFACEFLAG_NODRAW)
-				out->basematerialflags |= MATERIALFLAG_NODRAW;
+				out->basematerialflags |= MATERIALFLAG_NODRAW | MATERIALFLAG_NOSHADOW;
 			else if (out->surfaceflags & Q3SURFACEFLAG_SKY)
-				out->basematerialflags |= MATERIALFLAG_SKY;
+				out->basematerialflags |= MATERIALFLAG_SKY | MATERIALFLAG_NOSHADOW;
 			else
 				out->basematerialflags |= MATERIALFLAG_WALL;
 			// these are defaults
diff --git a/model_brush.h b/model_brush.h
index 562c6a00..c5eb9f8e 100644
--- a/model_brush.h
+++ b/model_brush.h
@@ -93,6 +93,8 @@ mplane_t;
 #define MATERIALFLAG_BLENDED 4096
 // render using a custom blendfunc
 #define MATERIALFLAG_CUSTOMBLEND 8192
+// do not cast shadows from this material
+#define MATERIALFLAG_NOSHADOW 16384
 
 typedef struct medge_s
 {
diff --git a/model_sprite.c b/model_sprite.c
index 4640a5a7..4f5c4751 100644
--- a/model_sprite.c
+++ b/model_sprite.c
@@ -44,9 +44,9 @@ static void Mod_SpriteSetupTexture(mspriteframe_t *frame, qboolean fullbright, q
 	if (fullbright)
 		texture->basematerialflags |= MATERIALFLAG_FULLBRIGHT;
 	if (additive)
-		texture->basematerialflags |= MATERIALFLAG_ADD | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT;
+		texture->basematerialflags |= MATERIALFLAG_ADD | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT | MATERIALFLAG_NOSHADOW;
 	else if (texture->skinframes[0].fog)
-		texture->basematerialflags |= MATERIALFLAG_ALPHA | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT;
+		texture->basematerialflags |= MATERIALFLAG_ALPHA | MATERIALFLAG_BLENDED | MATERIALFLAG_TRANSPARENT | MATERIALFLAG_NOSHADOW;
 	texture->currentmaterialflags = texture->basematerialflags;
 	texture->currentskinframe = texture->skinframes + 0;
 }
diff --git a/render.h b/render.h
index ab836079..8406814a 100644
--- a/render.h
+++ b/render.h
@@ -21,6 +21,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #ifndef RENDER_H
 #define RENDER_H
 
+#include "svbsp.h"
+
 // 1.0f / N table
 extern float ixtable[4096];
 
@@ -60,6 +62,9 @@ extern cvar_t r_waterscroll;
 
 extern cvar_t developer_texturelogging;
 
+// shadow volume bsp struct with automatically growing nodes buffer
+extern svbsp_t r_svbsp;
+
 typedef struct rmesh_s
 {
 	// vertices of this mesh