mirror of
https://github.com/DrBeef/ioq3quest.git
synced 2024-11-10 23:02:01 +00:00
Fix IQM tess buffer overflow
Set the variables that use tess.numVertexes after calling RB_CHECKOVERFLOW() as it may set tess.numVertexes to 0! Could cause visual issues and error "RB_EndSurface() - SHADER_MAX_VERTEXES hit".
This commit is contained in:
parent
cb2fa48d65
commit
aa2ea68741
2 changed files with 18 additions and 8 deletions
|
@ -953,10 +953,10 @@ void RB_IQMSurfaceAnim( surfaceType_t *surface ) {
|
|||
float jointMats[IQM_MAX_JOINTS * 12];
|
||||
int i;
|
||||
|
||||
vec4_t *outXYZ = &tess.xyz[tess.numVertexes];
|
||||
vec4_t *outNormal = &tess.normal[tess.numVertexes];
|
||||
vec2_t (*outTexCoord)[2] = &tess.texCoords[tess.numVertexes];
|
||||
color4ub_t *outColor = &tess.vertexColors[tess.numVertexes];
|
||||
vec4_t *outXYZ;
|
||||
vec4_t *outNormal;
|
||||
vec2_t (*outTexCoord)[2];
|
||||
color4ub_t *outColor;
|
||||
|
||||
int frame = data->num_frames ? backEnd.currentEntity->e.frame % data->num_frames : 0;
|
||||
int oldframe = data->num_frames ? backEnd.currentEntity->e.oldframe % data->num_frames : 0;
|
||||
|
@ -968,6 +968,11 @@ void RB_IQMSurfaceAnim( surfaceType_t *surface ) {
|
|||
|
||||
RB_CHECKOVERFLOW( surf->num_vertexes, surf->num_triangles * 3 );
|
||||
|
||||
outXYZ = &tess.xyz[tess.numVertexes];
|
||||
outNormal = &tess.normal[tess.numVertexes];
|
||||
outTexCoord = &tess.texCoords[tess.numVertexes];
|
||||
outColor = &tess.vertexColors[tess.numVertexes];
|
||||
|
||||
// compute interpolated joint matrices
|
||||
if ( data->num_joints > 0 ) {
|
||||
ComputePoseMats( data, frame, oldframe, backlerp, jointMats );
|
||||
|
|
|
@ -953,10 +953,10 @@ void RB_IQMSurfaceAnim( surfaceType_t *surface ) {
|
|||
float jointMats[IQM_MAX_JOINTS * 12];
|
||||
int i;
|
||||
|
||||
vec4_t *outXYZ = &tess.xyz[tess.numVertexes];
|
||||
vec4_t *outNormal = &tess.normal[tess.numVertexes];
|
||||
vec2_t (*outTexCoord)[2] = &tess.texCoords[tess.numVertexes];
|
||||
vec4_t *outColor = &tess.vertexColors[tess.numVertexes];
|
||||
vec4_t *outXYZ;
|
||||
vec4_t *outNormal;
|
||||
vec2_t (*outTexCoord)[2];
|
||||
vec4_t *outColor;
|
||||
|
||||
int frame = data->num_frames ? backEnd.currentEntity->e.frame % data->num_frames : 0;
|
||||
int oldframe = data->num_frames ? backEnd.currentEntity->e.oldframe % data->num_frames : 0;
|
||||
|
@ -968,6 +968,11 @@ void RB_IQMSurfaceAnim( surfaceType_t *surface ) {
|
|||
|
||||
RB_CHECKOVERFLOW( surf->num_vertexes, surf->num_triangles * 3 );
|
||||
|
||||
outXYZ = &tess.xyz[tess.numVertexes];
|
||||
outNormal = &tess.normal[tess.numVertexes];
|
||||
outTexCoord = &tess.texCoords[tess.numVertexes];
|
||||
outColor = &tess.vertexColors[tess.numVertexes];
|
||||
|
||||
// compute interpolated joint matrices
|
||||
if ( data->num_joints > 0 ) {
|
||||
ComputePoseMats( data, frame, oldframe, backlerp, jointMats );
|
||||
|
|
Loading…
Reference in a new issue