diff options
author | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2005-09-23 17:08:25 +0000 |
---|---|---|
committer | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2005-09-23 17:08:25 +0000 |
commit | 4b080c5906fdb1f7ee4e7fe5fdf2375dfcdf5ff4 (patch) | |
tree | 00cac71447ee23b2378c48efe3480300b0bebf15 /code/renderer/tr_mesh.c | |
parent | 48addd68a8c8d0c026be2d3b87ea6ce23509da91 (diff) | |
download | ioquake3-aero-4b080c5906fdb1f7ee4e7fe5fdf2375dfcdf5ff4.tar.gz ioquake3-aero-4b080c5906fdb1f7ee4e7fe5fdf2375dfcdf5ff4.zip |
* Applied Thilo Schulz's MDR patch
git-svn-id: svn://svn.icculus.org/quake3/trunk@100 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code/renderer/tr_mesh.c')
-rw-r--r-- | code/renderer/tr_mesh.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/code/renderer/tr_mesh.c b/code/renderer/tr_mesh.c index 155b4e6..e1e261e 100644 --- a/code/renderer/tr_mesh.c +++ b/code/renderer/tr_mesh.c @@ -168,6 +168,10 @@ int R_ComputeLOD( trRefEntity_t *ent ) { float flod, lodscale; float projectedRadius; md3Frame_t *frame; +#ifdef RAVENMD4 + mdrHeader_t *mdr; + mdrFrame_t *mdrframe; +#endif int lod; if ( tr.currentModel->numLods < 2 ) @@ -180,11 +184,28 @@ int R_ComputeLOD( trRefEntity_t *ent ) { // multiple LODs exist, so compute projected bounding sphere // and use that as a criteria for selecting LOD - frame = ( md3Frame_t * ) ( ( ( unsigned char * ) tr.currentModel->md3[0] ) + tr.currentModel->md3[0]->ofsFrames ); +#ifdef RAVENMD4 + // This is an MDR model. + + if(tr.currentModel->md4) + { + int frameSize; + mdr = (mdrHeader_t *) tr.currentModel->md4; + frameSize = (size_t) (&((mdrFrame_t *)0)->bones[mdr->numBones]); + + mdrframe = (mdrFrame_t *) ((byte *) mdr + mdr->ofsFrames + frameSize * ent->e.frame); + + radius = RadiusFromBounds(mdrframe->bounds[0], mdrframe->bounds[1]); + } + else +#endif + { + frame = ( md3Frame_t * ) ( ( ( unsigned char * ) tr.currentModel->md3[0] ) + tr.currentModel->md3[0]->ofsFrames ); - frame += ent->e.frame; + frame += ent->e.frame; - radius = RadiusFromBounds( frame->bounds[0], frame->bounds[1] ); + radius = RadiusFromBounds( frame->bounds[0], frame->bounds[1] ); + } if ( ( projectedRadius = ProjectRadius( radius, ent->e.origin ) ) != 0 ) { |