From f5c1a11a667be20efba5f718e1f85de723fd10fc Mon Sep 17 00:00:00 2001 From: Garux Date: Sat, 25 Sep 2021 10:17:51 +0300 Subject: [PATCH] std::vector bspBrushSides --- tools/quake3/q3map2/bsp.cpp | 26 +++++------ tools/quake3/q3map2/bspfile_abstract.cpp | 6 +-- tools/quake3/q3map2/bspfile_abstract.h | 9 ++-- tools/quake3/q3map2/bspfile_ibsp.cpp | 55 ++++-------------------- tools/quake3/q3map2/bspfile_rbsp.cpp | 4 +- tools/quake3/q3map2/convert_json.cpp | 7 +-- tools/quake3/q3map2/q3map2.h | 4 +- tools/quake3/q3map2/writebsp.cpp | 12 ++---- 8 files changed, 34 insertions(+), 89 deletions(-) diff --git a/tools/quake3/q3map2/bsp.cpp b/tools/quake3/q3map2/bsp.cpp index a43f92a6..9b9eb76c 100644 --- a/tools/quake3/q3map2/bsp.cpp +++ b/tools/quake3/q3map2/bsp.cpp @@ -228,41 +228,35 @@ static void SetCloneModelNumbers( void ){ */ static void FixBrushSides( entity_t *e ){ - int i; - mapDrawSurface_t *ds; - sideRef_t *sideRef; - bspBrushSide_t *side; - - /* note it */ Sys_FPrintf( SYS_VRB, "--- FixBrushSides ---\n" ); /* walk list of drawsurfaces */ - for ( i = e->firstDrawSurf; i < numMapDrawSurfs; i++ ) + for ( int i = e->firstDrawSurf; i < numMapDrawSurfs; i++ ) { /* get surface and try to early out */ - ds = &mapDrawSurfs[ i ]; - if ( ds->outputNum < 0 ) { + const mapDrawSurface_t& ds = mapDrawSurfs[ i ]; + if ( ds.outputNum < 0 ) { continue; } /* walk sideref list */ - for ( sideRef = ds->sideRef; sideRef != NULL; sideRef = sideRef->next ) + for ( const sideRef_t *sideRef = ds.sideRef; sideRef != NULL; sideRef = sideRef->next ) { /* get bsp brush side */ if ( sideRef->side == NULL || sideRef->side->outputNum < 0 ) { continue; } - side = &bspBrushSides[ sideRef->side->outputNum ]; + bspBrushSide_t& side = bspBrushSides[ sideRef->side->outputNum ]; /* set drawsurface */ - side->surfaceNum = ds->outputNum; - //% Sys_FPrintf( SYS_VRB, "DS: %7d Side: %7d ", ds->outputNum, sideRef->side->outputNum ); + side.surfaceNum = ds.outputNum; + //% Sys_FPrintf( SYS_VRB, "DS: %7d Side: %7d ", ds.outputNum, sideRef->side->outputNum ); /* set shader */ - if ( !strEqual( bspShaders[ side->shaderNum ].shader, ds->shaderInfo->shader ) ) { - //% Sys_FPrintf( SYS_VRB, "Remapping %s to %s\n", bspShaders[ side->shaderNum ].shader, ds->shaderInfo->shader ); - side->shaderNum = EmitShader( ds->shaderInfo->shader, &ds->shaderInfo->contentFlags, &ds->shaderInfo->surfaceFlags ); + if ( !strEqual( bspShaders[ side.shaderNum ].shader, ds.shaderInfo->shader ) ) { + //% Sys_FPrintf( SYS_VRB, "Remapping %s to %s\n", bspShaders[ side.shaderNum ].shader, ds.shaderInfo->shader ); + side.shaderNum = EmitShader( ds.shaderInfo->shader, &ds.shaderInfo->contentFlags, &ds.shaderInfo->surfaceFlags ); } } } diff --git a/tools/quake3/q3map2/bspfile_abstract.cpp b/tools/quake3/q3map2/bspfile_abstract.cpp index e8809c2d..334c5c22 100644 --- a/tools/quake3/q3map2/bspfile_abstract.cpp +++ b/tools/quake3/q3map2/bspfile_abstract.cpp @@ -202,7 +202,7 @@ void SwapBSPFile( void ){ SwapBlock( bspBrushes ); // brushsides - SwapBlock( (int*) bspBrushSides, numBSPBrushSides * sizeof( bspBrushSides[ 0 ] ) ); + SwapBlock( bspBrushSides ); // vis ( (int*) &bspVisBytes )[ 0 ] = LittleLong( ( (int*) &bspVisBytes )[ 0 ] ); @@ -468,8 +468,8 @@ void PrintBSPFileSizes( void ){ bspShaders.size(), bspShaders.size() * sizeof( bspShaders[0] ) ); Sys_Printf( "%9zu brushes %9zu\n", bspBrushes.size(), bspBrushes.size() * sizeof( bspBrushes[0] ) ); - Sys_Printf( "%9d brushsides %9d *\n", - numBSPBrushSides, (int) ( numBSPBrushSides * sizeof( bspBrushSide_t ) ) ); + Sys_Printf( "%9zu brushsides %9zu *\n", + bspBrushSides.size(), bspBrushSides.size() * sizeof( bspBrushSides[0] ) ); Sys_Printf( "%9d fogs %9d\n", numBSPFogs, (int) ( numBSPFogs * sizeof( bspFog_t ) ) ); Sys_Printf( "%9zu planes %9zu\n", diff --git a/tools/quake3/q3map2/bspfile_abstract.h b/tools/quake3/q3map2/bspfile_abstract.h index 5abae521..ac78282b 100644 --- a/tools/quake3/q3map2/bspfile_abstract.h +++ b/tools/quake3/q3map2/bspfile_abstract.h @@ -55,18 +55,17 @@ void AddLump( FILE *file, bspLump_t& lump, const std::vector& data ){ CopyLump() copies a bsp file lump into a destination buffer */ -template -void CopyLump( bspHeader_t *header, int lump, std::vector& data ){ +template +void CopyLump( bspHeader_t *header, int lump, std::vector& data ){ /* get lump length and offset */ const int length = header->lumps[ lump ].length; const int offset = header->lumps[ lump ].offset; - const int size = sizeof( T ); /* handle erroneous cases */ if ( length == 0 ) { return; } - if ( length % size ) { + if ( length % sizeof( SrcT ) ) { if ( force ) { Sys_Warning( "CopyLump: odd lump size (%d) in lump %d\n", length, lump ); return; @@ -77,5 +76,5 @@ void CopyLump( bspHeader_t *header, int lump, std::vector& data ){ } /* copy block of memory and return */ - data = { ( T* )( (byte*) header + offset ), ( T* )( (byte*) header + offset + length ) }; + data = { ( SrcT* )( (byte*) header + offset ), ( SrcT* )( (byte*) header + offset + length ) }; } diff --git a/tools/quake3/q3map2/bspfile_ibsp.cpp b/tools/quake3/q3map2/bspfile_ibsp.cpp index 91e7ed73..40585384 100644 --- a/tools/quake3/q3map2/bspfile_ibsp.cpp +++ b/tools/quake3/q3map2/bspfile_ibsp.cpp @@ -80,54 +80,15 @@ struct ibspBrushSide_t { int planeNum; int shaderNum; + ibspBrushSide_t( const bspBrushSide_t& other ) : + planeNum( other.planeNum ), + shaderNum( other.shaderNum ){} + operator bspBrushSide_t() const { + return { planeNum, shaderNum, -1 }; + } }; -static void CopyBrushSidesLump( ibspHeader_t *header ){ - const ibspBrushSide_t *in = GetLump( (bspHeader_t*) header, LUMP_BRUSHSIDES ); - /* get count */ - numBSPBrushSides = GetLumpElements( (bspHeader_t*) header, LUMP_BRUSHSIDES, sizeof( *in ) ); - /* copy */ - AUTOEXPAND_BY_REALLOC_BSP( BrushSides, 1024 ); - for ( int i = 0; i < numBSPBrushSides; ++i, ++in ) - { - bspBrushSide_t *out = &bspBrushSides[i]; - out->planeNum = in->planeNum; - out->shaderNum = in->shaderNum; - out->surfaceNum = -1; - } -} - - -static void AddBrushSidesLump( FILE *file, ibspHeader_t *header ){ - int i, size; - bspBrushSide_t *in; - ibspBrushSide_t *buffer, *out; - - - /* allocate output buffer */ - size = numBSPBrushSides * sizeof( *buffer ); - buffer = safe_calloc( size ); - - /* convert */ - in = bspBrushSides; - out = buffer; - for ( i = 0; i < numBSPBrushSides; i++ ) - { - out->planeNum = in->planeNum; - out->shaderNum = in->shaderNum; - in++; - out++; - } - - /* write lump */ - AddLump( file, (bspHeader_t*) header, LUMP_BRUSHSIDES, buffer, size ); - - /* free buffer */ - free( buffer ); -} - - /* drawsurfaces */ struct ibspDrawSurface_t @@ -449,7 +410,7 @@ void LoadIBSPFile( const char *filename ){ CopyLump( (bspHeader_t*) header, LUMP_BRUSHES, bspBrushes ); - CopyBrushSidesLump( header ); + CopyLump( (bspHeader_t*) header, LUMP_BRUSHSIDES, bspBrushSides ); CopyDrawVertsLump( header ); @@ -556,7 +517,7 @@ void WriteIBSPFile( const char *filename ){ AddLump( file, header->lumps[LUMP_LEAFS], bspLeafs ); AddLump( file, header->lumps[LUMP_NODES], bspNodes ); AddLump( file, header->lumps[LUMP_BRUSHES], bspBrushes ); - AddBrushSidesLump( file, header ); + AddLump( file, header->lumps[LUMP_BRUSHSIDES], std::vector( bspBrushSides.begin(), bspBrushSides.end() ) ); AddLump( file, header->lumps[LUMP_LEAFSURFACES], bspLeafSurfaces ); AddLump( file, header->lumps[LUMP_LEAFBRUSHES], bspLeafBrushes ); AddLump( file, header->lumps[LUMP_MODELS], bspModels ); diff --git a/tools/quake3/q3map2/bspfile_rbsp.cpp b/tools/quake3/q3map2/bspfile_rbsp.cpp index d18f6e06..c35e69a2 100644 --- a/tools/quake3/q3map2/bspfile_rbsp.cpp +++ b/tools/quake3/q3map2/bspfile_rbsp.cpp @@ -240,7 +240,7 @@ void LoadRBSPFile( const char *filename ){ CopyLump( (bspHeader_t*) header, LUMP_BRUSHES, bspBrushes ); - numBSPBrushSides = CopyLump_Allocate( (bspHeader_t*) header, LUMP_BRUSHSIDES, (void **) &bspBrushSides, sizeof( bspBrushSide_t ), &allocatedBSPBrushSides ); + CopyLump( (bspHeader_t*) header, LUMP_BRUSHSIDES, bspBrushSides ); numBSPDrawVerts = GetLumpElements( (bspHeader_t*) header, LUMP_DRAWVERTS, sizeof( bspDrawVerts[ 0 ] ) ); SetDrawVerts( numBSPDrawVerts ); @@ -309,7 +309,7 @@ void WriteRBSPFile( const char *filename ){ AddLump( file, header->lumps[LUMP_LEAFS], bspLeafs ); AddLump( file, header->lumps[LUMP_NODES], bspNodes ); AddLump( file, header->lumps[LUMP_BRUSHES], bspBrushes ); - AddLump( file, (bspHeader_t*) header, LUMP_BRUSHSIDES, bspBrushSides, numBSPBrushSides * sizeof( bspBrushSides[ 0 ] ) ); + AddLump( file, header->lumps[LUMP_BRUSHSIDES], bspBrushSides ); AddLump( file, header->lumps[LUMP_LEAFSURFACES], bspLeafSurfaces ); AddLump( file, header->lumps[LUMP_LEAFBRUSHES], bspLeafBrushes ); AddLump( file, header->lumps[LUMP_MODELS], bspModels ); diff --git a/tools/quake3/q3map2/convert_json.cpp b/tools/quake3/q3map2/convert_json.cpp index 6ee52265..463a7e7d 100644 --- a/tools/quake3/q3map2/convert_json.cpp +++ b/tools/quake3/q3map2/convert_json.cpp @@ -250,7 +250,7 @@ static void write_json( const char *directory ){ } { doc.RemoveAllMembers(); - for_indexed( auto&& side : Span( bspBrushSides, numBSPBrushSides ) ){ + for_indexed( const auto& side : bspBrushSides ){ rapidjson::Value value( rapidjson::kObjectType ); value.AddMember( "planeNum", side.planeNum, all ); value.AddMember( "shaderNum", side.shaderNum, all ); @@ -457,15 +457,12 @@ static void read_json( const char *directory ){ } { const auto doc = load_json( StringOutputStream( 256 )( directory, "BrushSides.json" ) ); - static std::vector items; for( auto&& obj : doc.GetObj() ){ - auto&& item = items.emplace_back(); + auto&& item = bspBrushSides.emplace_back(); item.planeNum = obj.value["planeNum"].GetInt(); item.shaderNum = obj.value["shaderNum"].GetInt(); item.surfaceNum = obj.value["surfaceNum"].GetInt(); } - bspBrushSides = items.data(); - numBSPBrushSides = items.size(); } { const auto doc = load_json( StringOutputStream( 256 )( directory, "DrawVert.json" ) ); diff --git a/tools/quake3/q3map2/q3map2.h b/tools/quake3/q3map2/q3map2.h index 8f09db5f..3efa3ceb 100644 --- a/tools/quake3/q3map2/q3map2.h +++ b/tools/quake3/q3map2/q3map2.h @@ -2352,9 +2352,7 @@ Q_EXTERN std::vector bspLeafBrushes; Q_EXTERN std::vector bspBrushes; -Q_EXTERN int numBSPBrushSides Q_ASSIGN( 0 ); -Q_EXTERN int allocatedBSPBrushSides Q_ASSIGN( 0 ); -Q_EXTERN bspBrushSide_t* bspBrushSides Q_ASSIGN( NULL ); +Q_EXTERN std::vector bspBrushSides; Q_EXTERN int numBSPLightBytes Q_ASSIGN( 0 ); Q_EXTERN byte *bspLightBytes Q_ASSIGN( NULL ); diff --git a/tools/quake3/q3map2/writebsp.cpp b/tools/quake3/q3map2/writebsp.cpp index fe68c972..5e7fc3bb 100644 --- a/tools/quake3/q3map2/writebsp.cpp +++ b/tools/quake3/q3map2/writebsp.cpp @@ -310,7 +310,7 @@ void BeginBSPFile( void ){ /* these values may actually be initialized if the file existed when loaded, so clear them explicitly */ bspModels.clear(); bspNodes.clear(); - numBSPBrushSides = 0; + bspBrushSides.clear(); bspLeafSurfaces.clear(); bspLeafBrushes.clear(); @@ -382,7 +382,7 @@ void EmitBrushes( brushlist_t& brushes, int *firstBrush, int *numBrushes ){ } db.shaderNum = EmitShader( b.contentShader->shader, &b.contentShader->contentFlags, &b.contentShader->surfaceFlags ); - db.firstSide = numBSPBrushSides; + db.firstSide = bspBrushSides.size(); /* walk sides */ db.numSides = 0; @@ -391,14 +391,10 @@ void EmitBrushes( brushlist_t& brushes, int *firstBrush, int *numBrushes ){ /* set output number to bogus initially */ side.outputNum = -1; - /* check count */ - AUTOEXPAND_BY_REALLOC_BSP( BrushSides, 1024 ); - /* emit side */ - side.outputNum = numBSPBrushSides; - bspBrushSide_t& cp = bspBrushSides[ numBSPBrushSides ]; + side.outputNum = bspBrushSides.size(); + bspBrushSide_t& cp = bspBrushSides.emplace_back(); db.numSides++; - numBSPBrushSides++; cp.planeNum = side.planenum; /* emit shader */