From 4b080c5906fdb1f7ee4e7fe5fdf2375dfcdf5ff4 Mon Sep 17 00:00:00 2001 From: tma Date: Fri, 23 Sep 2005 17:08:25 +0000 Subject: * Applied Thilo Schulz's MDR patch git-svn-id: svn://svn.icculus.org/quake3/trunk@100 edf5b092-35ff-0310-97b2-ce42778d08ea --- code/renderer/tr_mesh.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'code/renderer/tr_mesh.c') 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 ) { -- cgit v1.2.3