std::vector<byte> bspVisBytes

This commit is contained in:
Garux 2021-09-26 20:34:41 +03:00
parent 28dfbaa5ab
commit 560060a908
7 changed files with 21 additions and 32 deletions

View File

@ -205,8 +205,8 @@ void SwapBSPFile( void ){
SwapBlock( bspBrushSides ); SwapBlock( bspBrushSides );
// vis // vis
( (int*) &bspVisBytes )[ 0 ] = LittleLong( ( (int*) &bspVisBytes )[ 0 ] ); ( (int*) bspVisBytes.data() )[ 0 ] = LittleLong( ( (int*) bspVisBytes.data() )[ 0 ] );
( (int*) &bspVisBytes )[ 1 ] = LittleLong( ( (int*) &bspVisBytes )[ 1 ] ); ( (int*) bspVisBytes.data() )[ 1 ] = LittleLong( ( (int*) bspVisBytes.data() )[ 1 ] );
/* drawverts (don't swap colors) */ /* drawverts (don't swap colors) */
for ( i = 0; i < numBSPDrawVerts; i++ ) for ( i = 0; i < numBSPDrawVerts; i++ )
@ -506,8 +506,8 @@ void PrintBSPFileSizes( void ){
bspLightBytes.size() / ( g_game->lightmapSize * g_game->lightmapSize * 3 ), bspLightBytes.size() ); bspLightBytes.size() / ( g_game->lightmapSize * g_game->lightmapSize * 3 ), bspLightBytes.size() );
Sys_Printf( "%9zu lightgrid %9zu *\n", Sys_Printf( "%9zu lightgrid %9zu *\n",
bspGridPoints.size(), bspGridPoints.size() * sizeof( bspGridPoints[0] ) ); bspGridPoints.size(), bspGridPoints.size() * sizeof( bspGridPoints[0] ) );
Sys_Printf( " visibility %9d\n", Sys_Printf( " visibility %9zu\n",
numBSPVisBytes ); bspVisBytes.size() );
} }

View File

@ -363,7 +363,7 @@ void LoadIBSPFile( const char *filename ){
numBSPDrawIndexes = CopyLump_Allocate( (bspHeader_t*) header, LUMP_DRAWINDEXES, (void **) &bspDrawIndexes, sizeof( bspDrawIndexes[ 0 ] ), &allocatedBSPDrawIndexes ); numBSPDrawIndexes = CopyLump_Allocate( (bspHeader_t*) header, LUMP_DRAWINDEXES, (void **) &bspDrawIndexes, sizeof( bspDrawIndexes[ 0 ] ), &allocatedBSPDrawIndexes );
numBSPVisBytes = CopyLump( (bspHeader_t*) header, LUMP_VISIBILITY, bspVisBytes, 1 ); // TODO fix overflow CopyLump( (bspHeader_t*) header, LUMP_VISIBILITY, bspVisBytes );
CopyLump( (bspHeader_t*) header, LUMP_LIGHTMAPS, bspLightBytes ); CopyLump( (bspHeader_t*) header, LUMP_LIGHTMAPS, bspLightBytes );
@ -464,7 +464,7 @@ void WriteIBSPFile( const char *filename ){
AddLump( file, header->lumps[LUMP_MODELS], bspModels ); AddLump( file, header->lumps[LUMP_MODELS], bspModels );
AddDrawVertsLump( file, header ); AddDrawVertsLump( file, header );
AddDrawSurfacesLump( file, header ); AddDrawSurfacesLump( file, header );
AddLump( file, (bspHeader_t*) header, LUMP_VISIBILITY, bspVisBytes, numBSPVisBytes ); AddLump( file, header->lumps[LUMP_VISIBILITY], bspVisBytes );
AddLump( file, header->lumps[LUMP_LIGHTMAPS], bspLightBytes ); AddLump( file, header->lumps[LUMP_LIGHTMAPS], bspLightBytes );
AddLump( file, header->lumps[LUMP_LIGHTGRID], std::vector<ibspGridPoint_t>( bspGridPoints.begin(), bspGridPoints.end() ) ); AddLump( file, header->lumps[LUMP_LIGHTGRID], std::vector<ibspGridPoint_t>( bspGridPoints.begin(), bspGridPoints.end() ) );
AddLump( file, header->lumps[LUMP_ENTITIES], bspEntData ); AddLump( file, header->lumps[LUMP_ENTITIES], bspEntData );

View File

@ -227,7 +227,7 @@ void LoadRBSPFile( const char *filename ){
numBSPDrawIndexes = CopyLump_Allocate( (bspHeader_t*) header, LUMP_DRAWINDEXES, (void **) &bspDrawIndexes, sizeof( bspDrawIndexes[ 0 ] ), &allocatedBSPDrawIndexes ); numBSPDrawIndexes = CopyLump_Allocate( (bspHeader_t*) header, LUMP_DRAWINDEXES, (void **) &bspDrawIndexes, sizeof( bspDrawIndexes[ 0 ] ), &allocatedBSPDrawIndexes );
numBSPVisBytes = CopyLump( (bspHeader_t*) header, LUMP_VISIBILITY, bspVisBytes, 1 ); CopyLump( (bspHeader_t*) header, LUMP_VISIBILITY, bspVisBytes );
CopyLump( (bspHeader_t*) header, LUMP_LIGHTMAPS, bspLightBytes ); CopyLump( (bspHeader_t*) header, LUMP_LIGHTMAPS, bspLightBytes );
@ -286,7 +286,7 @@ void WriteRBSPFile( const char *filename ){
AddLump( file, header->lumps[LUMP_MODELS], bspModels ); AddLump( file, header->lumps[LUMP_MODELS], bspModels );
AddLump( file, (bspHeader_t*) header, LUMP_DRAWVERTS, bspDrawVerts, numBSPDrawVerts * sizeof( bspDrawVerts[ 0 ] ) ); AddLump( file, (bspHeader_t*) header, LUMP_DRAWVERTS, bspDrawVerts, numBSPDrawVerts * sizeof( bspDrawVerts[ 0 ] ) );
AddLump( file, (bspHeader_t*) header, LUMP_SURFACES, bspDrawSurfaces, numBSPDrawSurfaces * sizeof( bspDrawSurfaces[ 0 ] ) ); AddLump( file, (bspHeader_t*) header, LUMP_SURFACES, bspDrawSurfaces, numBSPDrawSurfaces * sizeof( bspDrawSurfaces[ 0 ] ) );
AddLump( file, (bspHeader_t*) header, LUMP_VISIBILITY, bspVisBytes, numBSPVisBytes ); AddLump( file, header->lumps[LUMP_VISIBILITY], bspVisBytes );
AddLump( file, header->lumps[LUMP_LIGHTMAPS], bspLightBytes ); AddLump( file, header->lumps[LUMP_LIGHTMAPS], bspLightBytes );
AddLightGridLumps( file, header ); AddLightGridLumps( file, header );
AddLump( file, header->lumps[LUMP_ENTITIES], bspEntData ); AddLump( file, header->lumps[LUMP_ENTITIES], bspEntData );

View File

@ -320,7 +320,7 @@ static void write_json( const char *directory ){
} }
{ {
doc.RemoveAllMembers(); doc.RemoveAllMembers();
for_indexed( auto&& index : Span( bspVisBytes, numBSPVisBytes ) ){ for_indexed( const auto& index : bspVisBytes ){
rapidjson::Value value( rapidjson::kObjectType ); rapidjson::Value value( rapidjson::kObjectType );
value.AddMember( "Num", index, all ); value.AddMember( "Num", index, all );
doc.AddMember( rapidjson::Value( StringOutputStream( 16 )( "VisByte#", i ).c_str(), all ), value, all ); doc.AddMember( rapidjson::Value( StringOutputStream( 16 )( "VisByte#", i ).c_str(), all ), value, all );
@ -529,13 +529,10 @@ static void read_json( const char *directory ){
} }
{ {
const auto doc = load_json( StringOutputStream( 256 )( directory, "VisBytes.json" ) ); const auto doc = load_json( StringOutputStream( 256 )( directory, "VisBytes.json" ) );
static std::vector<byte> items;
for( auto&& obj : doc.GetObj() ){ for( auto&& obj : doc.GetObj() ){
auto&& item = items.emplace_back(); auto&& item = bspVisBytes.emplace_back();
item = obj.value["Num"].GetInt(); item = obj.value["Num"].GetInt();
} }
std::copy( items.begin(), items.end(), bspVisBytes );
numBSPVisBytes = items.size();
} }
{ {
const auto doc = load_json( StringOutputStream( 256 )( directory, "LightBytes.json" ) ); const auto doc = load_json( StringOutputStream( 256 )( directory, "LightBytes.json" ) );

View File

@ -2997,10 +2997,6 @@ void SetupBrushes( void ){
*/ */
bool ClusterVisible( int a, int b ){ bool ClusterVisible( int a, int b ){
int leafBytes;
byte *pvs;
/* dummy check */ /* dummy check */
if ( a < 0 || b < 0 ) { if ( a < 0 || b < 0 ) {
return false; return false;
@ -3012,20 +3008,17 @@ bool ClusterVisible( int a, int b ){
} }
/* not vised? */ /* not vised? */
if ( numBSPVisBytes <= 8 ) { if ( bspVisBytes.size() <= 8 ) {
return true; return true;
} }
/* get pvs data */ /* get pvs data */
/* portalClusters = ((int *) bspVisBytes)[ 0 ]; */ /* portalClusters = ((int *) bspVisBytes)[ 0 ]; */
leafBytes = ( (int*) bspVisBytes )[ 1 ]; const int leafBytes = ( (int*) bspVisBytes.data() )[ 1 ];
pvs = bspVisBytes + VIS_HEADER_SIZE + ( a * leafBytes ); const byte *pvs = bspVisBytes.data() + VIS_HEADER_SIZE + ( a * leafBytes );
/* check */ /* check */
if ( ( pvs[ b >> 3 ] & ( 1 << ( b & 7 ) ) ) ) { return ( pvs[ b >> 3 ] & ( 1 << ( b & 7 ) ) );
return true;
}
return false;
} }

View File

@ -2358,8 +2358,7 @@ Q_EXTERN std::vector<byte> bspLightBytes;
Q_EXTERN std::vector<bspGridPoint_t> bspGridPoints; Q_EXTERN std::vector<bspGridPoint_t> bspGridPoints;
Q_EXTERN int numBSPVisBytes Q_ASSIGN( 0 ); Q_EXTERN std::vector<byte> bspVisBytes; // MAX_MAP_VISIBILITY
Q_EXTERN byte bspVisBytes[ MAX_MAP_VISIBILITY ];
Q_EXTERN int numBSPDrawVerts Q_ASSIGN( 0 ); Q_EXTERN int numBSPDrawVerts Q_ASSIGN( 0 );
Q_EXTERN bspDrawVert_t *bspDrawVerts Q_ASSIGN( NULL ); Q_EXTERN bspDrawVert_t *bspDrawVerts Q_ASSIGN( NULL );

View File

@ -186,7 +186,7 @@ void ClusterMerge( int leafnum ){
//Sys_FPrintf( SYS_VRB, "cluster %4i : %4i visible\n", leafnum, numvis ); //Sys_FPrintf( SYS_VRB, "cluster %4i : %4i visible\n", leafnum, numvis );
++clustersizehistogram[numvis]; ++clustersizehistogram[numvis];
memcpy( bspVisBytes + VIS_HEADER_SIZE + leafnum * leafbytes, uncompressed, leafbytes ); memcpy( bspVisBytes.data() + VIS_HEADER_SIZE + leafnum * leafbytes, uncompressed, leafbytes );
} }
/* /*
@ -886,14 +886,14 @@ void LoadPortals( char *name ){
for ( i = 0; i < portalclusters; i++ ) for ( i = 0; i < portalclusters; i++ )
leafs[i].merged = -1; leafs[i].merged = -1;
numBSPVisBytes = VIS_HEADER_SIZE + portalclusters * leafbytes; bspVisBytes.resize( VIS_HEADER_SIZE + portalclusters * leafbytes );
if ( numBSPVisBytes > MAX_MAP_VISIBILITY ) { if ( bspVisBytes.size() > MAX_MAP_VISIBILITY ) {
Error( "MAX_MAP_VISIBILITY exceeded" ); Error( "MAX_MAP_VISIBILITY exceeded" );
} }
( (int *)bspVisBytes )[0] = portalclusters; ( (int *)bspVisBytes.data() )[0] = portalclusters;
( (int *)bspVisBytes )[1] = leafbytes; ( (int *)bspVisBytes.data() )[1] = leafbytes;
for ( i = 0, p = portals ; i < numportals ; i++ ) for ( i = 0, p = portals ; i < numportals ; i++ )
{ {
@ -1118,7 +1118,7 @@ int VisMain( Args& args ){
CountActivePortals(); CountActivePortals();
/* WritePortals( "maps/hints.prs" );*/ /* WritePortals( "maps/hints.prs" );*/
Sys_Printf( "visdatasize:%i\n", numBSPVisBytes ); Sys_Printf( "visdatasize:%zu\n", bspVisBytes.size() );
CalcVis(); CalcVis();