[iortcw] 316/497: All: Make RB_SurfaceAnim() use glIndex_t for correct index size. This fixes buggy MDS model rendering on OpenGLES.
Simon McVittie
smcv at debian.org
Fri Sep 8 10:37:15 UTC 2017
This is an automated email from the git hooks/post-receive script.
smcv pushed a commit to annotated tag 1.42d
in repository iortcw.
commit ec3318172a827f75c60940ed1a798273db5db72b
Author: SmileTheory <SmileTheory at gmail.com>
Date: Mon Mar 16 22:19:24 2015 -0700
All: Make RB_SurfaceAnim() use glIndex_t for correct index size.
This fixes buggy MDS model rendering on OpenGLES.
---
MP/code/rend2/tr_animation.c | 18 +++++++-----------
MP/code/renderer/tr_animation.c | 18 +++++++-----------
SP/code/rend2/tr_animation.c | 18 +++++++-----------
SP/code/renderer/tr_animation.c | 18 +++++++-----------
4 files changed, 28 insertions(+), 44 deletions(-)
diff --git a/MP/code/rend2/tr_animation.c b/MP/code/rend2/tr_animation.c
index 4a26f4e..d34bf65 100644
--- a/MP/code/rend2/tr_animation.c
+++ b/MP/code/rend2/tr_animation.c
@@ -49,7 +49,8 @@ frame.
static float frontlerp, backlerp;
static float torsoFrontlerp, torsoBacklerp;
-static int *triangles, *boneRefs, *pIndexes;
+static int *triangles, *boneRefs;
+static glIndex_t *pIndexes;
static int indexes;
static int baseIndex, baseVertex, oldIndexes;
static int numVerts;
@@ -1112,18 +1113,13 @@ void RB_SurfaceAnim( mdsSurface_t *surface ) {
tess.numVertexes += render_count;
- pIndexes = (int*)&tess.indexes[baseIndex];
+ pIndexes = (glIndex_t *)&tess.indexes[baseIndex];
//DBG_SHOWTIME
if ( render_count == surface->numVerts ) {
- memcpy( pIndexes, triangles, sizeof( triangles[0] ) * indexes );
- if ( baseVertex ) {
- int *indexesEnd;
- for ( indexesEnd = pIndexes + indexes ; pIndexes < indexesEnd ; pIndexes++ ) {
- *pIndexes += baseVertex;
- }
- }
+ for ( j = 0; j < indexes; j++ )
+ pIndexes[j] = triangles[j] + baseVertex;
tess.numIndexes += indexes;
} else
{
@@ -1243,7 +1239,7 @@ void RB_SurfaceAnim( mdsSurface_t *surface ) {
qglBegin( GL_LINES );
qglColor3f( .0,.0,.8 );
- pIndexes = (int*)&tess.indexes[oldIndexes];
+ pIndexes = (glIndex_t *)&tess.indexes[oldIndexes];
for ( j = 0; j < render_indexes / 3; j++, pIndexes += 3 ) {
qglVertex3fv( tempVert + 4 * pIndexes[0] );
qglVertex3fv( tempVert + 4 * pIndexes[1] );
@@ -1694,7 +1690,7 @@ void RB_MDRSurfaceAnim( mdrSurface_t *surface )
oldFrame = (mdrFrame_t *)((byte *)header + header->ofsFrames +
backEnd.currentEntity->e.oldframe * frameSize );
- RB_CheckOverflow( surface->numVerts, surface->numTriangles );
+ RB_CheckOverflow( surface->numVerts, surface->numTriangles * 3 );
triangles = (int *) ((byte *)surface + surface->ofsTriangles);
indexes = surface->numTriangles * 3;
diff --git a/MP/code/renderer/tr_animation.c b/MP/code/renderer/tr_animation.c
index 40bf2ec..f27549c 100644
--- a/MP/code/renderer/tr_animation.c
+++ b/MP/code/renderer/tr_animation.c
@@ -49,7 +49,8 @@ frame.
static float frontlerp, backlerp;
static float torsoFrontlerp, torsoBacklerp;
-static int *triangles, *pIndexes;
+static int *triangles;
+static glIndex_t *pIndexes;
#ifndef USE_OPENGLES
static int *boneRefs;
#endif
@@ -1113,18 +1114,13 @@ void RB_SurfaceAnim( mdsSurface_t *surface ) {
tess.numVertexes += render_count;
- pIndexes = (int*)&tess.indexes[baseIndex];
+ pIndexes = (glIndex_t *)&tess.indexes[baseIndex];
//DBG_SHOWTIME
if ( render_count == surface->numVerts ) {
- memcpy( pIndexes, triangles, sizeof( triangles[0] ) * indexes );
- if ( baseVertex ) {
- int *indexesEnd;
- for ( indexesEnd = pIndexes + indexes ; pIndexes < indexesEnd ; pIndexes++ ) {
- *pIndexes += baseVertex;
- }
- }
+ for ( j = 0; j < indexes; j++ )
+ pIndexes[j] = triangles[j] + baseVertex;
tess.numIndexes += indexes;
} else
{
@@ -1242,7 +1238,7 @@ void RB_SurfaceAnim( mdsSurface_t *surface ) {
qglBegin( GL_LINES );
qglColor3f( .0,.0,.8 );
- pIndexes = (int*)&tess.indexes[oldIndexes];
+ pIndexes = (glIndex_t *)&tess.indexes[oldIndexes];
for ( j = 0; j < render_indexes / 3; j++, pIndexes += 3 ) {
qglVertex3fv( tempVert + 4 * pIndexes[0] );
qglVertex3fv( tempVert + 4 * pIndexes[1] );
@@ -1692,7 +1688,7 @@ void RB_MDRSurfaceAnim( mdrSurface_t *surface )
oldFrame = (mdrFrame_t *)((byte *)header + header->ofsFrames +
backEnd.currentEntity->e.oldframe * frameSize );
- RB_CheckOverflow( surface->numVerts, surface->numTriangles );
+ RB_CheckOverflow( surface->numVerts, surface->numTriangles * 3 );
triangles = (int *) ((byte *)surface + surface->ofsTriangles);
indexes = surface->numTriangles * 3;
diff --git a/SP/code/rend2/tr_animation.c b/SP/code/rend2/tr_animation.c
index f2f777c..26b0afd 100644
--- a/SP/code/rend2/tr_animation.c
+++ b/SP/code/rend2/tr_animation.c
@@ -49,7 +49,8 @@ frame.
static float frontlerp, backlerp;
static float torsoFrontlerp, torsoBacklerp;
-static int *triangles, *boneRefs, *pIndexes;
+static int *triangles, *boneRefs;
+static glIndex_t *pIndexes;
static int indexes;
static int baseIndex, baseVertex, oldIndexes;
static int numVerts;
@@ -1124,18 +1125,13 @@ void RB_SurfaceAnim( mdsSurface_t *surface ) {
tess.numVertexes += render_count;
- pIndexes = (int*)&tess.indexes[baseIndex];
+ pIndexes = (glIndex_t *)&tess.indexes[baseIndex];
//DBG_SHOWTIME
if ( render_count == surface->numVerts ) {
- memcpy( pIndexes, triangles, sizeof( triangles[0] ) * indexes );
- if ( baseVertex ) {
- int *indexesEnd;
- for ( indexesEnd = pIndexes + indexes ; pIndexes < indexesEnd ; pIndexes++ ) {
- *pIndexes += baseVertex;
- }
- }
+ for ( j = 0; j < indexes; j++ )
+ pIndexes[j] = triangles[j] + baseVertex;
tess.numIndexes += indexes;
} else
{
@@ -1254,7 +1250,7 @@ void RB_SurfaceAnim( mdsSurface_t *surface ) {
qglBegin( GL_LINES );
qglColor3f( .0,.0,.8 );
- pIndexes = (int*)&tess.indexes[oldIndexes];
+ pIndexes = (glIndex_t *)&tess.indexes[oldIndexes];
for ( j = 0; j < render_indexes / 3; j++, pIndexes += 3 ) {
qglVertex3fv( tempVert + 4 * pIndexes[0] );
qglVertex3fv( tempVert + 4 * pIndexes[1] );
@@ -1686,7 +1682,7 @@ void RB_MDRSurfaceAnim( mdrSurface_t *surface )
oldFrame = (mdrFrame_t *)((byte *)header + header->ofsFrames +
backEnd.currentEntity->e.oldframe * frameSize );
- RB_CheckOverflow( surface->numVerts, surface->numTriangles );
+ RB_CheckOverflow( surface->numVerts, surface->numTriangles * 3 );
triangles = (int *) ((byte *)surface + surface->ofsTriangles);
indexes = surface->numTriangles * 3;
diff --git a/SP/code/renderer/tr_animation.c b/SP/code/renderer/tr_animation.c
index d1c2ef8..31d8565 100644
--- a/SP/code/renderer/tr_animation.c
+++ b/SP/code/renderer/tr_animation.c
@@ -49,7 +49,8 @@ frame.
static float frontlerp, backlerp;
static float torsoFrontlerp, torsoBacklerp;
-static int *triangles, *pIndexes;
+static int *triangles;
+static glIndex_t *pIndexes;
#ifndef USE_OPENGLES
static int *boneRefs;
#endif
@@ -1125,18 +1126,13 @@ void RB_SurfaceAnim( mdsSurface_t *surface ) {
tess.numVertexes += render_count;
- pIndexes = (int*)&tess.indexes[baseIndex];
+ pIndexes = (glIndex_t *)&tess.indexes[baseIndex];
//DBG_SHOWTIME
if ( render_count == surface->numVerts ) {
- memcpy( pIndexes, triangles, sizeof( triangles[0] ) * indexes );
- if ( baseVertex ) {
- int *indexesEnd;
- for ( indexesEnd = pIndexes + indexes ; pIndexes < indexesEnd ; pIndexes++ ) {
- *pIndexes += baseVertex;
- }
- }
+ for ( j = 0; j < indexes; j++ )
+ pIndexes[j] = triangles[j] + baseVertex;
tess.numIndexes += indexes;
} else
{
@@ -1253,7 +1249,7 @@ void RB_SurfaceAnim( mdsSurface_t *surface ) {
qglBegin( GL_LINES );
qglColor3f( .0,.0,.8 );
- pIndexes = (int*)&tess.indexes[oldIndexes];
+ pIndexes = (glIndex_t *)&tess.indexes[oldIndexes];
for ( j = 0; j < render_indexes / 3; j++, pIndexes += 3 ) {
qglVertex3fv( tempVert + 4 * pIndexes[0] );
qglVertex3fv( tempVert + 4 * pIndexes[1] );
@@ -1682,7 +1678,7 @@ void RB_MDRSurfaceAnim( mdrSurface_t *surface )
oldFrame = (mdrFrame_t *)((byte *)header + header->ofsFrames +
backEnd.currentEntity->e.oldframe * frameSize );
- RB_CheckOverflow( surface->numVerts, surface->numTriangles );
+ RB_CheckOverflow( surface->numVerts, surface->numTriangles * 3 );
triangles = (int *) ((byte *)surface + surface->ofsTriangles);
indexes = surface->numTriangles * 3;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/iortcw.git
More information about the Pkg-games-commits
mailing list