[iortcw] 113/497: All: Make R_LerpTag for MDR use startIndex and return tag index
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 a4d2d85ef24c835c77b4299decafebb5bb0539e1 Author: zturtle...@gmail.com Date: Fri May 9 23:02:35 2014 + All: Make R_LerpTag for MDR use startIndex and return tag index --- MP/code/rend2/tr_model.c| 22 -- MP/code/renderer/tr_model.c | 22 -- SP/code/rend2/tr_model.c| 22 -- SP/code/renderer/tr_model.c | 22 -- 4 files changed, 64 insertions(+), 24 deletions(-) diff --git a/MP/code/rend2/tr_model.c b/MP/code/rend2/tr_model.c index 7e5e9fd..17ee143 100644 --- a/MP/code/rend2/tr_model.c +++ b/MP/code/rend2/tr_model.c @@ -2143,12 +2143,13 @@ static int R_GetTag(mdvModel_t * model, int frame, const char *_tagName, int sta return -1; } -mdvTag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, mdvTag_t * dest) +static int R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, int startTagIndex, mdvTag_t **outTag) { int i, j, k; int frameSize; mdrFrame_t *frame; mdrTag_t*tag; + mdvTag_t*dest = *outTag; if ( framenum >= mod->numFrames ) { @@ -2156,10 +2157,16 @@ mdvTag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, mdv framenum = mod->numFrames - 1; } + if ( startTagIndex > mod->numTags ) + { + *outTag = NULL; + return -1; + } + tag = (mdrTag_t *)((byte *)mod + mod->ofsTags); for ( i = 0 ; i < mod->numTags ; i++, tag++ ) { - if ( !strcmp( tag->name, tagName ) ) + if ( ( i >= startTagIndex ) && !strcmp( tag->name, tagName ) ) { // uncompressed model... // @@ -2176,11 +2183,12 @@ mdvTag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, mdv dest->origin[1]=frame->bones[tag->boneIndex].matrix[1][3]; dest->origin[2]=frame->bones[tag->boneIndex].matrix[2][3]; - return dest; + return i; } } - return NULL; + *outTag = NULL; + return -1; } /* @@ -2213,8 +2221,10 @@ int R_LerpTag( orientation_t *tag, const refEntity_t *refent, const char *tagNam if ( !model->mdv[0] /*&& !model->mdc[0]*/ && !model->mds ) { if(model->type == MOD_MDR) { - start = R_GetAnimTag((mdrHeader_t *) model->modelData, startFrame, tagName, &start_space); - end = R_GetAnimTag((mdrHeader_t *) model->modelData, endFrame, tagName, &end_space); + start = &start_space; + end = &end_space; + retval = R_GetAnimTag((mdrHeader_t *) model->modelData, startFrame, tagName, startIndex, &start); + retval = R_GetAnimTag((mdrHeader_t *) model->modelData, endFrame, tagName, startIndex, &end); } else if( model->type == MOD_IQM ) { return R_IQMLerpTag( tag, model->modelData, diff --git a/MP/code/renderer/tr_model.c b/MP/code/renderer/tr_model.c index b89ca8f..20be57a 100644 --- a/MP/code/renderer/tr_model.c +++ b/MP/code/renderer/tr_model.c @@ -2005,12 +2005,13 @@ static int R_GetMDSTag( byte *mod, const char *tagName, int startTagIndex, mdsTa } */ -md3Tag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3Tag_t * dest) +static int R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, int startTagIndex, md3Tag_t **outTag) { int i, j, k; int frameSize; mdrFrame_t *frame; mdrTag_t*tag; + md3Tag_t*dest = *outTag; if ( framenum >= mod->numFrames ) { @@ -2018,10 +2019,16 @@ md3Tag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3 framenum = mod->numFrames - 1; } + if ( startTagIndex > mod->numTags ) + { + *outTag = NULL; + return -1; + } + tag = (mdrTag_t *)((byte *)mod + mod->ofsTags); for ( i = 0 ; i < mod->numTags ; i++, tag++ ) { - if ( !strcmp( tag->name, tagName ) ) + if ( ( i >= startTagIndex ) && !strcmp( tag->name, tagName ) ) { Q_strncpyz(dest->name, tag->name, sizeof(dest->name)); @@ -2040,11 +2047,12 @@ md3Tag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3 dest
[iortcw] 113/497: All: Make R_LerpTag for MDR use startIndex and return tag index
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 a4d2d85ef24c835c77b4299decafebb5bb0539e1 Author: zturtle...@gmail.com Date: Fri May 9 23:02:35 2014 + All: Make R_LerpTag for MDR use startIndex and return tag index --- MP/code/rend2/tr_model.c| 22 -- MP/code/renderer/tr_model.c | 22 -- SP/code/rend2/tr_model.c| 22 -- SP/code/renderer/tr_model.c | 22 -- 4 files changed, 64 insertions(+), 24 deletions(-) diff --git a/MP/code/rend2/tr_model.c b/MP/code/rend2/tr_model.c index 7e5e9fd..17ee143 100644 --- a/MP/code/rend2/tr_model.c +++ b/MP/code/rend2/tr_model.c @@ -2143,12 +2143,13 @@ static int R_GetTag(mdvModel_t * model, int frame, const char *_tagName, int sta return -1; } -mdvTag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, mdvTag_t * dest) +static int R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, int startTagIndex, mdvTag_t **outTag) { int i, j, k; int frameSize; mdrFrame_t *frame; mdrTag_t*tag; + mdvTag_t*dest = *outTag; if ( framenum >= mod->numFrames ) { @@ -2156,10 +2157,16 @@ mdvTag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, mdv framenum = mod->numFrames - 1; } + if ( startTagIndex > mod->numTags ) + { + *outTag = NULL; + return -1; + } + tag = (mdrTag_t *)((byte *)mod + mod->ofsTags); for ( i = 0 ; i < mod->numTags ; i++, tag++ ) { - if ( !strcmp( tag->name, tagName ) ) + if ( ( i >= startTagIndex ) && !strcmp( tag->name, tagName ) ) { // uncompressed model... // @@ -2176,11 +2183,12 @@ mdvTag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, mdv dest->origin[1]=frame->bones[tag->boneIndex].matrix[1][3]; dest->origin[2]=frame->bones[tag->boneIndex].matrix[2][3]; - return dest; + return i; } } - return NULL; + *outTag = NULL; + return -1; } /* @@ -2213,8 +2221,10 @@ int R_LerpTag( orientation_t *tag, const refEntity_t *refent, const char *tagNam if ( !model->mdv[0] /*&& !model->mdc[0]*/ && !model->mds ) { if(model->type == MOD_MDR) { - start = R_GetAnimTag((mdrHeader_t *) model->modelData, startFrame, tagName, &start_space); - end = R_GetAnimTag((mdrHeader_t *) model->modelData, endFrame, tagName, &end_space); + start = &start_space; + end = &end_space; + retval = R_GetAnimTag((mdrHeader_t *) model->modelData, startFrame, tagName, startIndex, &start); + retval = R_GetAnimTag((mdrHeader_t *) model->modelData, endFrame, tagName, startIndex, &end); } else if( model->type == MOD_IQM ) { return R_IQMLerpTag( tag, model->modelData, diff --git a/MP/code/renderer/tr_model.c b/MP/code/renderer/tr_model.c index b89ca8f..20be57a 100644 --- a/MP/code/renderer/tr_model.c +++ b/MP/code/renderer/tr_model.c @@ -2005,12 +2005,13 @@ static int R_GetMDSTag( byte *mod, const char *tagName, int startTagIndex, mdsTa } */ -md3Tag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3Tag_t * dest) +static int R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, int startTagIndex, md3Tag_t **outTag) { int i, j, k; int frameSize; mdrFrame_t *frame; mdrTag_t*tag; + md3Tag_t*dest = *outTag; if ( framenum >= mod->numFrames ) { @@ -2018,10 +2019,16 @@ md3Tag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3 framenum = mod->numFrames - 1; } + if ( startTagIndex > mod->numTags ) + { + *outTag = NULL; + return -1; + } + tag = (mdrTag_t *)((byte *)mod + mod->ofsTags); for ( i = 0 ; i < mod->numTags ; i++, tag++ ) { - if ( !strcmp( tag->name, tagName ) ) + if ( ( i >= startTagIndex ) && !strcmp( tag->name, tagName ) ) { Q_strncpyz(dest->name, tag->name, sizeof(dest->name)); @@ -2040,11 +2047,12 @@ md3Tag_t *R_GetAnimTag( mdrHeader_t *mod, int framenum, const char *tagName, md3 dest