[quake3-commits] r1672 - trunk/code/renderer
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Fri Oct 16 16:26:18 EDT 2009
Author: thilo
Date: 2009-10-16 16:26:18 -0400 (Fri, 16 Oct 2009)
New Revision: 1672
Modified:
trunk/code/renderer/tr_init.c
trunk/code/renderer/tr_local.h
trunk/code/renderer/tr_marks.c
Log:
Allow weapon marks on triangle meshes (default: disabled), patch by Oliver McFadden. http://bugzilla.icculus.org/show_bug.cgi?id=3774
Modified: trunk/code/renderer/tr_init.c
===================================================================
--- trunk/code/renderer/tr_init.c 2009-10-16 19:21:31 UTC (rev 1671)
+++ trunk/code/renderer/tr_init.c 2009-10-16 20:26:18 UTC (rev 1672)
@@ -155,6 +155,8 @@
cvar_t *r_printShaders;
cvar_t *r_saveFontData;
+cvar_t *r_marksOnTriangleMeshes;
+
cvar_t *r_maxpolys;
int max_polys;
cvar_t *r_maxpolyverts;
@@ -1009,6 +1011,8 @@
r_noportals = ri.Cvar_Get ("r_noportals", "0", CVAR_CHEAT);
r_shadows = ri.Cvar_Get( "cg_shadows", "1", 0 );
+ r_marksOnTriangleMeshes = ri.Cvar_Get("r_marksOnTriangleMeshes", "0", CVAR_ARCHIVE);
+
r_maxpolys = ri.Cvar_Get( "r_maxpolys", va("%d", MAX_POLYS), 0);
r_maxpolyverts = ri.Cvar_Get( "r_maxpolyverts", va("%d", MAX_POLYVERTS), 0);
Modified: trunk/code/renderer/tr_local.h
===================================================================
--- trunk/code/renderer/tr_local.h 2009-10-16 19:21:31 UTC (rev 1671)
+++ trunk/code/renderer/tr_local.h 2009-10-16 20:26:18 UTC (rev 1672)
@@ -1114,6 +1114,8 @@
extern cvar_t *r_printShaders;
extern cvar_t *r_saveFontData;
+extern cvar_t *r_marksOnTriangleMeshes;
+
extern cvar_t *r_GLlibCoolDownMsec;
//====================================================================
Modified: trunk/code/renderer/tr_marks.c
===================================================================
--- trunk/code/renderer/tr_marks.c 2009-10-16 19:21:31 UTC (rev 1671)
+++ trunk/code/renderer/tr_marks.c 2009-10-16 20:26:18 UTC (rev 1672)
@@ -173,7 +173,9 @@
surf->viewCount = tr.viewCount;
}
}
- else if (*(surfaceType_t *) (surf->data) != SF_GRID) surf->viewCount = tr.viewCount;
+ else if (*(surfaceType_t *) (surf->data) != SF_GRID &&
+ *(surfaceType_t *) (surf->data) != SF_TRIANGLES)
+ surf->viewCount = tr.viewCount;
// check the viewCount because the surface may have
// already been added if it spans multiple leafs
if (surf->viewCount != tr.viewCount) {
@@ -263,7 +265,6 @@
vec3_t clipPoints[2][MAX_VERTS_ON_POLY];
int numClipPoints;
float *v;
- srfSurfaceFace_t *surf;
srfGridMesh_t *cv;
drawVert_t *dv;
vec3_t normal;
@@ -399,25 +400,20 @@
}
else if (*surfaces[i] == SF_FACE) {
- surf = ( srfSurfaceFace_t * ) surfaces[i];
+ srfSurfaceFace_t *surf = ( srfSurfaceFace_t * ) surfaces[i];
+
// check the normal of this face
if (DotProduct(surf->plane.normal, projectionDir) > -0.5) {
continue;
}
- /*
- VectorSubtract(clipPoints[0][0], clipPoints[0][1], v1);
- VectorSubtract(clipPoints[0][2], clipPoints[0][1], v2);
- CrossProduct(v1, v2, normal);
- VectorNormalize(normal);
- if (DotProduct(normal, projectionDir) > -0.5) continue;
- */
indexes = (int *)( (byte *)surf + surf->ofsIndices );
for ( k = 0 ; k < surf->numIndices ; k += 3 ) {
for ( j = 0 ; j < 3 ; j++ ) {
v = surf->points[0] + VERTEXSIZE * indexes[k+j];;
VectorMA( v, MARKER_OFFSET, surf->plane.normal, clipPoints[0][j] );
}
+
// add the fragments of this face
R_AddMarkFragments( 3 , clipPoints,
numPlanes, normals, dists,
@@ -428,14 +424,29 @@
return returnedFragments; // not enough space for more fragments
}
}
- continue;
}
- else {
- // ignore all other world surfaces
- // might be cool to also project polygons on a triangle soup
- // however this will probably create huge amounts of extra polys
- // even more than the projection onto curves
- continue;
+ else if(*surfaces[i] == SF_TRIANGLES && r_marksOnTriangleMeshes->integer) {
+
+ srfTriangles_t *surf = (srfTriangles_t *) surfaces[i];
+
+ for (k = 0; k < surf->numIndexes; k += 3)
+ {
+ for(j = 0; j < 3; j++)
+ {
+ v = surf->verts[surf->indexes[k + j]].xyz;
+ VectorMA(v, MARKER_OFFSET, surf->verts[surf->indexes[k + j]].normal, clipPoints[0][j]);
+ }
+
+ // add the fragments of this face
+ R_AddMarkFragments(3, clipPoints,
+ numPlanes, normals, dists,
+ maxPoints, pointBuffer,
+ maxFragments, fragmentBuffer, &returnedPoints, &returnedFragments, mins, maxs);
+ if(returnedFragments == maxFragments)
+ {
+ return returnedFragments; // not enough space for more fragments
+ }
+ }
}
}
return returnedFragments;
More information about the quake3-commits
mailing list