From c0d37ddc1e29650cde264ce12dc7507d16660265 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Sun, 25 Dec 2011 10:53:53 +0900 Subject: [PATCH] Pseudo merge gl and sw Mod_LoadAliasGroup. Interestingly, this didn't break gl alias model renderering (but then, it does weird things to the data anyway). --- libs/models/alias/gl_model_alias.c | 33 +++++++++++++++++++----------- libs/models/alias/sw_model_alias.c | 14 ++++++------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/libs/models/alias/gl_model_alias.c b/libs/models/alias/gl_model_alias.c index 0af3d39f0..a54a5d61a 100644 --- a/libs/models/alias/gl_model_alias.c +++ b/libs/models/alias/gl_model_alias.c @@ -143,7 +143,9 @@ Mod_LoadAliasGroup (void *pin, int *posenum, maliasframedesc_t *frame, { daliasgroup_t *pingroup; daliasinterval_t *pin_intervals; + float *poutintervals; int i, numframes; + maliasgroup_t *paliasgroup; void *ptemp; pingroup = (daliasgroup_t *) pin; @@ -153,6 +155,11 @@ Mod_LoadAliasGroup (void *pin, int *posenum, maliasframedesc_t *frame, frame->firstpose = (*posenum); frame->numposes = numframes; + paliasgroup = Hunk_AllocName (field_offset (maliasgroup_t, + frames[numframes]), loadname); + paliasgroup->numframes = numframes; + frame->frame = (byte *) paliasgroup - (byte *) pheader; + // these are byte values, so we don't have to worry about endianness VectorCopy (pingroup->bboxmin.v, frame->bboxmin.v); VectorCopy (pingroup->bboxmax.v, frame->bboxmax.v); @@ -160,23 +167,25 @@ Mod_LoadAliasGroup (void *pin, int *posenum, maliasframedesc_t *frame, VectorCompMax (frame->bboxmax.v, aliasbboxmaxs, aliasbboxmaxs); pin_intervals = (daliasinterval_t *) (pingroup + 1); - + poutintervals = Hunk_AllocName (numframes * sizeof (float), loadname); + paliasgroup->intervals = (byte *) poutintervals - (byte *) pheader; frame->interval = LittleFloat (pin_intervals->interval); - - pin_intervals += numframes; + for (i = 0; i < numframes; i++) { + *poutintervals = LittleFloat (pin_intervals->interval); + if (*poutintervals <= 0.0) + Sys_Error ("Mod_LoadAliasGroup: interval<=0"); + poutintervals++; + pin_intervals++; + } ptemp = (void *) pin_intervals; - for (i = 0; i < numframes; i++) { - poseverts[(*posenum)] = (trivertx_t *) ((daliasframe_t *) ptemp + 1); - (*posenum)++; - if (extra) - ptemp = (trivertx_t *) ((daliasframe_t *) ptemp + 1) - + pheader->mdl.numverts * 2; - else - ptemp = (trivertx_t *) ((daliasframe_t *) ptemp + 1) - + pheader->mdl.numverts; + maliasframedesc_t temp_frame; + ptemp = Mod_LoadAliasFrame (ptemp, posenum, &temp_frame, extra); + memcpy (&paliasgroup->frames[i], &temp_frame, + sizeof (paliasgroup->frames[i])); } + return ptemp; } diff --git a/libs/models/alias/sw_model_alias.c b/libs/models/alias/sw_model_alias.c index 9485379ed..ab9eb5512 100644 --- a/libs/models/alias/sw_model_alias.c +++ b/libs/models/alias/sw_model_alias.c @@ -178,9 +178,13 @@ Mod_LoadAliasGroup (void *pin, int *posenum, maliasframedesc_t *frame, numframes = LittleLong (pingroup->numframes); + frame->firstpose = (*posenum); + frame->numposes = numframes; + paliasgroup = Hunk_AllocName (field_offset (maliasgroup_t, frames[numframes]), loadname); paliasgroup->numframes = numframes; + frame->frame = (byte *) paliasgroup - (byte *) pheader; // these are byte values, so we don't have to worry about endianness VectorCopy (pingroup->bboxmin.v, frame->bboxmin.v); @@ -188,30 +192,24 @@ Mod_LoadAliasGroup (void *pin, int *posenum, maliasframedesc_t *frame, VectorCompMin (frame->bboxmin.v, aliasbboxmins, aliasbboxmins); VectorCompMax (frame->bboxmax.v, aliasbboxmaxs, aliasbboxmaxs); - frame->frame = (byte *) paliasgroup - (byte *) pheader; - pin_intervals = (daliasinterval_t *) (pingroup + 1); - poutintervals = Hunk_AllocName (numframes * sizeof (float), loadname); - paliasgroup->intervals = (byte *) poutintervals - (byte *) pheader; - + frame->interval = LittleFloat (pin_intervals->interval); for (i = 0; i < numframes; i++) { *poutintervals = LittleFloat (pin_intervals->interval); if (*poutintervals <= 0.0) Sys_Error ("Mod_LoadAliasGroup: interval<=0"); - poutintervals++; pin_intervals++; } ptemp = (void *) pin_intervals; - for (i = 0; i < numframes; i++) { maliasframedesc_t temp_frame; ptemp = Mod_LoadAliasFrame (ptemp, posenum, &temp_frame, extra); memcpy (&paliasgroup->frames[i], &temp_frame, - sizeof(paliasgroup->frames[i])); + sizeof (paliasgroup->frames[i])); } return ptemp;