aboutsummaryrefslogtreecommitdiffstats
path: root/code/renderer/tr_mesh.c
diff options
context:
space:
mode:
authortma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea>2005-09-23 17:08:25 +0000
committertma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea>2005-09-23 17:08:25 +0000
commit4b080c5906fdb1f7ee4e7fe5fdf2375dfcdf5ff4 (patch)
tree00cac71447ee23b2378c48efe3480300b0bebf15 /code/renderer/tr_mesh.c
parent48addd68a8c8d0c026be2d3b87ea6ce23509da91 (diff)
downloadioquake3-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.c27
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 )
{