summaryrefslogtreecommitdiff
path: root/src/sw_model.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sw_model.c')
-rw-r--r--src/sw_model.c185
1 files changed, 96 insertions, 89 deletions
diff --git a/src/sw_model.c b/src/sw_model.c
index b792204..60a0ebe 100644
--- a/src/sw_model.c
+++ b/src/sw_model.c
@@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
@@ -31,29 +31,30 @@ int registration_sequence;
ProcessTexinfo
=================
*/
-static void ProcessTexinfo( bsp_t *bsp ) {
+static void ProcessTexinfo(bsp_t *bsp)
+{
mtexinfo_t *tex;
int i;
vec_t len1, len2;
char name[MAX_QPATH];
tex = bsp->texinfo;
- for( i = 0; i < bsp->numtexinfo; i++, tex++ ) {
- len1 = VectorLength( tex->axis[0] );
- len2 = VectorLength( tex->axis[1] );
- len1 = ( len1 + len2 ) / 2;
- if( len1 < 0.32 )
+ for (i = 0; i < bsp->numtexinfo; i++, tex++) {
+ len1 = VectorLength(tex->axis[0]);
+ len2 = VectorLength(tex->axis[1]);
+ len1 = (len1 + len2) / 2;
+ if (len1 < 0.32)
tex->mipadjust = 4;
- else if( len1 < 0.49 )
+ else if (len1 < 0.49)
tex->mipadjust = 3;
- else if( len1 < 0.99 )
+ else if (len1 < 0.99)
tex->mipadjust = 2;
else
tex->mipadjust = 1;
- Q_concat( name, sizeof( name ), "textures/", tex->name, ".wal", NULL );
- FS_NormalizePath( name, name );
- tex->image = IMG_Find( name, it_wall );
+ Q_concat(name, sizeof(name), "textures/", tex->name, ".wal", NULL);
+ FS_NormalizePath(name, name);
+ tex->image = IMG_Find(name, it_wall);
}
}
@@ -64,7 +65,8 @@ CalcSurfaceExtents
Fills in s->texturemins[] and s->extents[]
================
*/
-static void CalcSurfaceExtents( mface_t *s ) {
+static void CalcSurfaceExtents(mface_t *s)
+{
vec_t mins[2], maxs[2], val;
int i, j;
msurfedge_t *e;
@@ -77,27 +79,27 @@ static void CalcSurfaceExtents( mface_t *s ) {
tex = s->texinfo;
e = s->firstsurfedge;
- for( i = 0; i < s->numsurfedges; i++, e++ ) {
- v = e->edge->v[e->vert];
- for( j = 0; j < 2; j++ ) {
- val = DotProduct( v->point, tex->axis[j] ) + tex->offset[j];
- if( val < mins[j] )
+ for (i = 0; i < s->numsurfedges; i++, e++) {
+ v = e->edge->v[e->vert];
+ for (j = 0; j < 2; j++) {
+ val = DotProduct(v->point, tex->axis[j]) + tex->offset[j];
+ if (val < mins[j])
mins[j] = val;
- if( val > maxs[j] )
+ if (val > maxs[j])
maxs[j] = val;
}
}
- for( i = 0; i < 2; i++ ) {
- bmins[i] = floor( mins[i] / 16 );
- bmaxs[i] = ceil( maxs[i] / 16 );
+ for (i = 0; i < 2; i++) {
+ bmins[i] = floor(mins[i] / 16);
+ bmaxs[i] = ceil(maxs[i] / 16);
s->texturemins[i] = bmins[i] << 4;
- s->extents[i] = ( bmaxs[i] - bmins[i] ) << 4;
- if( s->extents[i] < 16 ) {
+ s->extents[i] = (bmaxs[i] - bmins[i]) << 4;
+ if (s->extents[i] < 16) {
s->extents[i] = 16; // take at least one cache block
- } else if( s->extents[i] > 256 ) {
- Com_Error( ERR_DROP, "Bad surface extents" );
+ } else if (s->extents[i] > 256) {
+ Com_Error(ERR_DROP, "Bad surface extents");
}
}
}
@@ -108,25 +110,26 @@ static void CalcSurfaceExtents( mface_t *s ) {
ProcessFaces
=================
*/
-static void ProcessFaces( bsp_t *bsp ) {
+static void ProcessFaces(bsp_t *bsp)
+{
mface_t *s;
int i, j;
s = bsp->faces;
- for( i = 0; i < bsp->numfaces; i++, s++ ) {
- // set the drawing flags
- if( s->texinfo->c.flags & SURF_SKY ) {
+ for (i = 0; i < bsp->numfaces; i++, s++) {
+ // set the drawing flags
+ if (s->texinfo->c.flags & SURF_SKY) {
continue;
}
- if( s->texinfo->c.flags & (SURF_WARP|SURF_FLOWING) ) {
+ if (s->texinfo->c.flags & (SURF_WARP | SURF_FLOWING)) {
s->drawflags |= DSURF_TURB;
- for( j = 0; j < 2; j++ ) {
+ for (j = 0; j < 2; j++) {
s->extents[j] = 16384;
s->texturemins[j] = -8192;
}
continue;
}
- CalcSurfaceExtents( s );
+ CalcSurfaceExtents(s);
}
}
@@ -146,7 +149,8 @@ ALIAS MODELS
Mod_LoadAliasModel
=================
*/
-qerror_t MOD_LoadMD2( model_t *model, const void *rawdata, size_t length ) {
+qerror_t MOD_LoadMD2(model_t *model, const void *rawdata, size_t length)
+{
dmd2header_t header;
dmd2frame_t *src_frame;
//dmd2trivertx_t *src_vert;
@@ -161,20 +165,20 @@ qerror_t MOD_LoadMD2( model_t *model, const void *rawdata, size_t length ) {
int i, j;
qerror_t ret;
- if( length < sizeof( header ) ) {
+ if (length < sizeof(header)) {
return Q_ERR_FILE_TOO_SMALL;
}
// byte swap the header
- header = *( dmd2header_t * )rawdata;
- for( i = 0; i < sizeof( header )/4; i++ ) {
- (( uint32_t * )&header)[i] = LittleLong( (( uint32_t * )&header)[i] );
+ header = *(dmd2header_t *)rawdata;
+ for (i = 0; i < sizeof(header) / 4; i++) {
+ ((uint32_t *)&header)[i] = LittleLong(((uint32_t *)&header)[i]);
}
// validate the header
- ret = MOD_ValidateMD2( &header, length );
- if( ret ) {
- if( ret == Q_ERR_TOO_FEW ) {
+ ret = MOD_ValidateMD2(&header, length);
+ if (ret) {
+ if (ret == Q_ERR_TOO_FEW) {
// empty models draw nothing
model->type = MOD_EMPTY;
return Q_ERR_SUCCESS;
@@ -182,102 +186,103 @@ qerror_t MOD_LoadMD2( model_t *model, const void *rawdata, size_t length ) {
return ret;
}
- Hunk_Begin( &model->pool, 0x400000 );
+ Hunk_Begin(&model->pool, 0x400000);
model->type = MOD_ALIAS;
// load triangle indices
- model->tris = MOD_Malloc( header.num_tris * sizeof( maliastri_t ) );
- model->numtris = header.num_tris;
+ model->tris = MOD_Malloc(header.num_tris * sizeof(maliastri_t));
+ model->numtris = header.num_tris;
- src_tri = ( dmd2triangle_t * )( ( byte * )rawdata + header.ofs_tris );
+ src_tri = (dmd2triangle_t *)((byte *)rawdata + header.ofs_tris);
dst_tri = model->tris;
- for( i = 0; i < header.num_tris; i++, src_tri++, dst_tri++ ) {
- for( j = 0; j < 3; j++ ) {
- unsigned idx_xyz = LittleShort( src_tri->index_xyz[j] );
- unsigned idx_st = LittleShort( src_tri->index_st[j] );
+ for (i = 0; i < header.num_tris; i++, src_tri++, dst_tri++) {
+ for (j = 0; j < 3; j++) {
+ unsigned idx_xyz = LittleShort(src_tri->index_xyz[j]);
+ unsigned idx_st = LittleShort(src_tri->index_st[j]);
- if( idx_xyz >= header.num_xyz || idx_st >= header.num_st ) {
+ if (idx_xyz >= header.num_xyz || idx_st >= header.num_st) {
ret = Q_ERR_BAD_INDEX;
goto fail;
}
- dst_tri->index_xyz[j] = idx_xyz;
+ dst_tri->index_xyz[j] = idx_xyz;
dst_tri->index_st[j] = idx_st;
}
}
// load base s and t vertices
- model->sts = MOD_Malloc( header.num_st * sizeof( maliasst_t ) );
+ model->sts = MOD_Malloc(header.num_st * sizeof(maliasst_t));
model->numsts = header.num_st;
- src_st = ( dmd2stvert_t * )( ( byte * )rawdata + header.ofs_st );
+ src_st = (dmd2stvert_t *)((byte *)rawdata + header.ofs_st);
dst_st = model->sts;
- for( i = 0; i < header.num_st; i++, src_st++, dst_st++ ) {
- dst_st->s = ( int16_t )LittleShort( src_st->s );
- dst_st->t = ( int16_t )LittleShort( src_st->t );
+ for (i = 0; i < header.num_st; i++, src_st++, dst_st++) {
+ dst_st->s = (int16_t)LittleShort(src_st->s);
+ dst_st->t = (int16_t)LittleShort(src_st->t);
}
// load the frames
- model->frames = MOD_Malloc( header.num_frames * sizeof( maliasframe_t ) );
+ model->frames = MOD_Malloc(header.num_frames * sizeof(maliasframe_t));
model->numframes = header.num_frames;
model->numverts = header.num_xyz;
- src_frame = ( dmd2frame_t * )( ( byte * )rawdata + header.ofs_frames );
+ src_frame = (dmd2frame_t *)((byte *)rawdata + header.ofs_frames);
dst_frame = model->frames;
- for( i = 0; i < header.num_frames; i++, dst_frame++ ) {
- for( j = 0; j < 3; j++ ) {
- dst_frame->scale[j] = LittleFloat( src_frame->scale[j] );
- dst_frame->translate[j] = LittleFloat( src_frame->translate[j] );
+ for (i = 0; i < header.num_frames; i++, dst_frame++) {
+ for (j = 0; j < 3; j++) {
+ dst_frame->scale[j] = LittleFloat(src_frame->scale[j]);
+ dst_frame->translate[j] = LittleFloat(src_frame->translate[j]);
}
// verts are all 8 bit, so no swapping needed
- dst_frame->verts = MOD_Malloc( header.num_xyz * sizeof( maliasvert_t ) );
-
+ dst_frame->verts = MOD_Malloc(header.num_xyz * sizeof(maliasvert_t));
+
// TODO: check normal indices
- memcpy( dst_frame->verts, src_frame->verts, header.num_xyz * sizeof( maliasvert_t ) );
+ memcpy(dst_frame->verts, src_frame->verts, header.num_xyz * sizeof(maliasvert_t));
- src_frame = ( dmd2frame_t * )( ( byte * )src_frame + header.framesize );
+ src_frame = (dmd2frame_t *)((byte *)src_frame + header.framesize);
}
// register all skins
- src_skin = ( char * )rawdata + header.ofs_skins;
- for( i = 0; i < header.num_skins; i++ ) {
- if( !Q_memccpy( skinname, src_skin, 0, sizeof( skinname ) ) ) {
+ src_skin = (char *)rawdata + header.ofs_skins;
+ for (i = 0; i < header.num_skins; i++) {
+ if (!Q_memccpy(skinname, src_skin, 0, sizeof(skinname))) {
ret = Q_ERR_STRING_TRUNCATED;
goto fail;
}
- FS_NormalizePath( skinname, skinname );
- model->skins[i] = IMG_Find( skinname, it_skin );
+ FS_NormalizePath(skinname, skinname);
+ model->skins[i] = IMG_Find(skinname, it_skin);
src_skin += MD2_MAX_SKINNAME;
}
model->numskins = header.num_skins;
- Hunk_End( &model->pool );
+ Hunk_End(&model->pool);
return Q_ERR_SUCCESS;
fail:
- Hunk_Free( &model->pool );
+ Hunk_Free(&model->pool);
return ret;
}
-void MOD_Reference( model_t *model ) {
+void MOD_Reference(model_t *model)
+{
int i;
// register any images used by the models
- switch( model->type ) {
+ switch (model->type) {
case MOD_ALIAS:
- for( i = 0; i < model->numskins; i++ ) {
+ for (i = 0; i < model->numskins; i++) {
model->skins[i]->registration_sequence = registration_sequence;
}
break;
case MOD_SPRITE:
- for( i = 0; i < model->numframes; i++ ) {
+ for (i = 0; i < model->numframes; i++) {
model->spriteframes[i].image->registration_sequence = registration_sequence;
}
break;
case MOD_EMPTY:
break;
default:
- Com_Error( ERR_FATAL, "%s: bad model type", __func__ );
+ Com_Error(ERR_FATAL, "%s: bad model type", __func__);
}
model->registration_sequence = registration_sequence;
@@ -290,34 +295,35 @@ R_BeginRegistration
Specifies the model that will be used as the world
@@@@@@@@@@@@@@@@@@@@@
*/
-void R_BeginRegistration( const char *model ) {
+void R_BeginRegistration(const char *model)
+{
char fullname[MAX_QPATH];
bsp_t *bsp;
registration_sequence++;
r_oldviewcluster = -1; // force markleafs
- Q_concat( fullname, sizeof( fullname ), "maps/", model, ".bsp", NULL );
+ Q_concat(fullname, sizeof(fullname), "maps/", model, ".bsp", NULL);
- D_FlushCaches ();
- BSP_Load( fullname, &bsp );
- if( bsp == r_worldmodel ) {
+ D_FlushCaches();
+ BSP_Load(fullname, &bsp);
+ if (bsp == r_worldmodel) {
mtexinfo_t *tex = bsp->texinfo;
int i;
- for( i = 0; i < bsp->numtexinfo; i++, tex++ ) {
+ for (i = 0; i < bsp->numtexinfo; i++, tex++) {
tex->image->registration_sequence = registration_sequence;
}
bsp->refcount--;
return;
}
- BSP_Free( r_worldmodel );
+ BSP_Free(r_worldmodel);
r_worldmodel = bsp;
- ProcessTexinfo( bsp );
- ProcessFaces( bsp );
+ ProcessTexinfo(bsp);
+ ProcessFaces(bsp);
// TODO
- R_NewMap ();
+ R_NewMap();
}
/*
@@ -326,7 +332,8 @@ R_EndRegistration
@@@@@@@@@@@@@@@@@@@@@
*/
-void R_EndRegistration (void) {
+void R_EndRegistration(void)
+{
MOD_FreeUnused();
IMG_FreeUnused();
}