Index: draw_common.cpp
===================================================================
--- draw_common.cpp	(revision 6675)
+++ draw_common.cpp	(working copy)
@@ -574,7 +574,10 @@
 	// decal surfaces may enable polygon offset
 	qglPolygonOffset( r_offsetFactor.GetFloat(), r_offsetUnits.GetFloat() );
 
-	GL_State( GLS_DEPTHFUNC_LESS );
+	if (r_ignore.GetBool())
+		GL_State(GLS_DEPTHFUNC_LESS | GLS_COLORMASK);
+	else
+		GL_State(GLS_DEPTHFUNC_LESS);
 
 	// Enable stencil test if we are going to be using it for shadows.
 	// If we didn't do this, it would be legal behavior to get z fighting
@@ -831,6 +834,7 @@
 	idDrawVert *ac = (idDrawVert *)vertexCache.Position( tri->ambientCache );
 	qglVertexPointer( 3, GL_FLOAT, sizeof( idDrawVert ), ac->xyz.ToFloatPtr() );
 	qglTexCoordPointer( 2, GL_FLOAT, sizeof( idDrawVert ), reinterpret_cast<void *>(&ac->st) );
+	bool additiveBlend = !r_ignore.GetBool();
 
 	for ( stage = 0; stage < shader->GetNumStages() ; stage++ ) {		
 		pStage = shader->GetStage(stage);
@@ -1109,8 +1113,16 @@
 		RB_BindVariableStageImage( &pStage->texture, regs );
 
 		// set the state
-		GL_State( pStage->drawStateBits );
-		
+		if (!additiveBlend && (
+			(pStage->drawStateBits & 0xff) == (GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE) ||
+			(pStage->drawStateBits & 0xff) == (GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA)
+		)) {
+			GL_State(pStage->drawStateBits & 0xffffff00);
+			additiveBlend = true;
+		}
+		else
+			GL_State(pStage->drawStateBits);
+
 		RB_PrepareStageTexturing( pStage, surf, ac );
 
 		// draw it
@@ -1972,6 +1984,9 @@
 	// subviews
 	RB_STD_FillDepthBuffer( drawSurfs, numDrawSurfs );
 
+	// now draw any non-light dependent shading passes
+	processed = RB_STD_DrawShaderPasses(drawSurfs, numDrawSurfs);
+
 	// main light renderer
 	switch( tr.backEndRenderer ) {
 	case BE_ARB:
@@ -1997,9 +2012,6 @@
 	// uplight the entire screen to crutch up not having better blending range
 	RB_STD_LightScale();
 
-	// now draw any non-light dependent shading passes
-	processed = RB_STD_DrawShaderPasses( drawSurfs, numDrawSurfs );
-
 	// fob and blend lights
 	RB_STD_FogAllLights();
 
