r683 - trunk

lordhavoc at icculus.org lordhavoc at icculus.org
Mon Mar 27 04:14:03 EST 2006


Author: lordhavoc
Date: 2006-03-27 04:14:03 -0500 (Mon, 27 Mar 2006)
New Revision: 683

Modified:
   trunk/r_main.c
Log:
fix bugs with loc_ values for uniforms (it was checking if they were not
0, it should be checking if they are >= 0), and moved eyeorigin
calculation to R_SetEntity rather than light interaction related


Modified: trunk/r_main.c
===================================================================
--- trunk/r_main.c	2006-03-27 09:13:17 UTC (rev 682)
+++ trunk/r_main.c	2006-03-27 09:14:03 UTC (rev 683)
@@ -324,15 +324,15 @@
 		s->loc_Texture_FogMask = qglGetUniformLocationARB(s->programobject, "Texture_FogMask");
 
 		// set static uniforms
-		if (s->loc_Texture_Normal)
+		if (s->loc_Texture_Normal >= 0)
 			qglUniform1iARB(s->loc_Texture_Normal, 0);
-		if (s->loc_Texture_Color)
+		if (s->loc_Texture_Color >= 0)
 			qglUniform1iARB(s->loc_Texture_Color, 1);
-		if (s->loc_Texture_Gloss)
+		if (s->loc_Texture_Gloss >= 0)
 			qglUniform1iARB(s->loc_Texture_Gloss, 2);
-		if (s->loc_Texture_Cube)
+		if (s->loc_Texture_Cube >= 0)
 			qglUniform1iARB(s->loc_Texture_Cube, 3);
-		if (s->loc_Texture_FogMask)
+		if (s->loc_Texture_FogMask >= 0)
 			qglUniform1iARB(s->loc_Texture_FogMask, 4);
 
 		R_CheckError();
@@ -353,6 +353,7 @@
 	NUint32 i;
 	if (R.active)
 		return;
+	memset(&R, 0, sizeof(R));
 	R.active = true;
 
 	// start out paranoid until the first frame
@@ -405,6 +406,7 @@
 	R_CheckError();
 	R.active = false;
 	Mem_FreeZone(&R.zone);
+	memset(&R, 0, sizeof(R));
 }
 
 void R_Screenshot (void)
@@ -1304,7 +1306,6 @@
 		// (needed for per-vertex tangentspace transforms)
 		Matrix4x4_Transform(&R.worldtoentity, R.lightorigin, R.entitylightorigin4f);
 		R.entitylightorigin4f[3] = -1; // for DotProduct4 with planes
-		Matrix4x4_Transform(&R.worldtoentity, R.eyeorigin, R.entityeyeorigin);
 		// calculate entity to light matrix for cubemap filter and attenuation
 		Matrix4x4_Concat(&R.entitytolight, &R.worldtolight, &R.entitytoworld);
 		Matrix4x4_Concat(&R.lighttoentity, &R.lighttoworld, &R.worldtoentity);
@@ -1366,6 +1367,8 @@
 	// derived properties
 	Matrix4x4_Invert_Simple(&R.worldtoentity, &R.entitytoworld);
 
+	Matrix4x4_Transform(&R.worldtoentity, R.eyeorigin, R.entityeyeorigin);
+
 	R_UpdateEntityLightInteraction();
 }
 
@@ -2165,32 +2168,28 @@
 		s = R.shader_light + perm;
 		qglUseProgramObjectARB(s->programobject);
 
-		if (s->loc_LightPosition)
+		if (s->loc_LightPosition >= 0)
 			qglUniform3fARB(s->loc_LightPosition, R.entitylightorigin4f[0], R.entitylightorigin4f[1], R.entitylightorigin4f[2]);
-		if (s->loc_EyePosition)
+		if (s->loc_EyePosition >= 0)
 			qglUniform3fARB(s->loc_EyePosition, R.entityeyeorigin[0], R.entityeyeorigin[1], R.entityeyeorigin[2]);
-		if (s->loc_LightColor)
+		if (s->loc_LightColor >= 0)
 			qglUniform3fARB(s->loc_LightColor, R.lightcolor[0], R.lightcolor[1], R.lightcolor[2]);
-		if (s->loc_OffsetMapping_Scale)
+		if (s->loc_OffsetMapping_Scale >= 0)
 			qglUniform1fARB(s->loc_OffsetMapping_Scale, material->offsetmapping_scale);
-		if (s->loc_OffsetMapping_Bias)
+		if (s->loc_OffsetMapping_Bias >= 0)
 			qglUniform1fARB(s->loc_OffsetMapping_Scale, material->offsetmapping_bias);
-		if (s->loc_SpecularPower)
+		if (s->loc_SpecularPower >= 0)
 			qglUniform1fARB(s->loc_SpecularPower, material->specularpower);
-		if (s->loc_FogRangeRecip)
+		if (s->loc_FogRangeRecip >= 0)
 			qglUniform1fARB(s->loc_FogRangeRecip, R.fog_rangerecip);
-		if (s->loc_AmbientScale)
+		if (s->loc_AmbientScale >= 0)
 			qglUniform1fARB(s->loc_AmbientScale, ambientintensity);
-		if (s->loc_DiffuseScale)
+		if (s->loc_DiffuseScale >= 0)
 			qglUniform1fARB(s->loc_DiffuseScale, diffuseintensity);
-		if (s->loc_SpecularScale)
+		if (s->loc_SpecularScale >= 0)
 			qglUniform1fARB(s->loc_SpecularScale, specularintensity);
 
 		R_DrawTriangles(0, mesh->numvertices, mesh->numtriangles, mesh->element3i);
-		// LordHavoc: FIXME: HACK HACK HACK: NASTY trick to stop a lockup in nvidia 66.29 driver
-		qglUseProgramObjectARB(0);
-		qglBegin(GL_TRIANGLES);
-		qglEnd();
 		R_CheckError();
 		break;
 	case R_DRAWMODE_LIT_FINISH:




More information about the neither-commits mailing list