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