std::vector<bspBrushSide_t> bspBrushSides
This commit is contained in:
parent
9f63742fda
commit
f5c1a11a66
|
|
@ -228,41 +228,35 @@ static void SetCloneModelNumbers( void ){
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void FixBrushSides( entity_t *e ){
|
static void FixBrushSides( entity_t *e ){
|
||||||
int i;
|
|
||||||
mapDrawSurface_t *ds;
|
|
||||||
sideRef_t *sideRef;
|
|
||||||
bspBrushSide_t *side;
|
|
||||||
|
|
||||||
|
|
||||||
/* note it */
|
/* note it */
|
||||||
Sys_FPrintf( SYS_VRB, "--- FixBrushSides ---\n" );
|
Sys_FPrintf( SYS_VRB, "--- FixBrushSides ---\n" );
|
||||||
|
|
||||||
/* walk list of drawsurfaces */
|
/* 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 */
|
/* get surface and try to early out */
|
||||||
ds = &mapDrawSurfs[ i ];
|
const mapDrawSurface_t& ds = mapDrawSurfs[ i ];
|
||||||
if ( ds->outputNum < 0 ) {
|
if ( ds.outputNum < 0 ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* walk sideref list */
|
/* 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 */
|
/* get bsp brush side */
|
||||||
if ( sideRef->side == NULL || sideRef->side->outputNum < 0 ) {
|
if ( sideRef->side == NULL || sideRef->side->outputNum < 0 ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
side = &bspBrushSides[ sideRef->side->outputNum ];
|
bspBrushSide_t& side = bspBrushSides[ sideRef->side->outputNum ];
|
||||||
|
|
||||||
/* set drawsurface */
|
/* set drawsurface */
|
||||||
side->surfaceNum = ds->outputNum;
|
side.surfaceNum = ds.outputNum;
|
||||||
//% Sys_FPrintf( SYS_VRB, "DS: %7d Side: %7d ", ds->outputNum, sideRef->side->outputNum );
|
//% Sys_FPrintf( SYS_VRB, "DS: %7d Side: %7d ", ds.outputNum, sideRef->side->outputNum );
|
||||||
|
|
||||||
/* set shader */
|
/* set shader */
|
||||||
if ( !strEqual( bspShaders[ side->shaderNum ].shader, ds->shaderInfo->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 );
|
//% 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 );
|
side.shaderNum = EmitShader( ds.shaderInfo->shader, &ds.shaderInfo->contentFlags, &ds.shaderInfo->surfaceFlags );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -202,7 +202,7 @@ void SwapBSPFile( void ){
|
||||||
SwapBlock( bspBrushes );
|
SwapBlock( bspBrushes );
|
||||||
|
|
||||||
// brushsides
|
// brushsides
|
||||||
SwapBlock( (int*) bspBrushSides, numBSPBrushSides * sizeof( bspBrushSides[ 0 ] ) );
|
SwapBlock( bspBrushSides );
|
||||||
|
|
||||||
// vis
|
// vis
|
||||||
( (int*) &bspVisBytes )[ 0 ] = LittleLong( ( (int*) &bspVisBytes )[ 0 ] );
|
( (int*) &bspVisBytes )[ 0 ] = LittleLong( ( (int*) &bspVisBytes )[ 0 ] );
|
||||||
|
|
@ -468,8 +468,8 @@ void PrintBSPFileSizes( void ){
|
||||||
bspShaders.size(), bspShaders.size() * sizeof( bspShaders[0] ) );
|
bspShaders.size(), bspShaders.size() * sizeof( bspShaders[0] ) );
|
||||||
Sys_Printf( "%9zu brushes %9zu\n",
|
Sys_Printf( "%9zu brushes %9zu\n",
|
||||||
bspBrushes.size(), bspBrushes.size() * sizeof( bspBrushes[0] ) );
|
bspBrushes.size(), bspBrushes.size() * sizeof( bspBrushes[0] ) );
|
||||||
Sys_Printf( "%9d brushsides %9d *\n",
|
Sys_Printf( "%9zu brushsides %9zu *\n",
|
||||||
numBSPBrushSides, (int) ( numBSPBrushSides * sizeof( bspBrushSide_t ) ) );
|
bspBrushSides.size(), bspBrushSides.size() * sizeof( bspBrushSides[0] ) );
|
||||||
Sys_Printf( "%9d fogs %9d\n",
|
Sys_Printf( "%9d fogs %9d\n",
|
||||||
numBSPFogs, (int) ( numBSPFogs * sizeof( bspFog_t ) ) );
|
numBSPFogs, (int) ( numBSPFogs * sizeof( bspFog_t ) ) );
|
||||||
Sys_Printf( "%9zu planes %9zu\n",
|
Sys_Printf( "%9zu planes %9zu\n",
|
||||||
|
|
|
||||||
|
|
@ -55,18 +55,17 @@ void AddLump( FILE *file, bspLump_t& lump, const std::vector<T>& data ){
|
||||||
CopyLump()
|
CopyLump()
|
||||||
copies a bsp file lump into a destination buffer
|
copies a bsp file lump into a destination buffer
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename DstT, typename SrcT = DstT>
|
||||||
void CopyLump( bspHeader_t *header, int lump, std::vector<T>& data ){
|
void CopyLump( bspHeader_t *header, int lump, std::vector<DstT>& data ){
|
||||||
/* get lump length and offset */
|
/* get lump length and offset */
|
||||||
const int length = header->lumps[ lump ].length;
|
const int length = header->lumps[ lump ].length;
|
||||||
const int offset = header->lumps[ lump ].offset;
|
const int offset = header->lumps[ lump ].offset;
|
||||||
const int size = sizeof( T );
|
|
||||||
|
|
||||||
/* handle erroneous cases */
|
/* handle erroneous cases */
|
||||||
if ( length == 0 ) {
|
if ( length == 0 ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( length % size ) {
|
if ( length % sizeof( SrcT ) ) {
|
||||||
if ( force ) {
|
if ( force ) {
|
||||||
Sys_Warning( "CopyLump: odd lump size (%d) in lump %d\n", length, lump );
|
Sys_Warning( "CopyLump: odd lump size (%d) in lump %d\n", length, lump );
|
||||||
return;
|
return;
|
||||||
|
|
@ -77,5 +76,5 @@ void CopyLump( bspHeader_t *header, int lump, std::vector<T>& data ){
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy block of memory and return */
|
/* 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 ) };
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -80,54 +80,15 @@ struct ibspBrushSide_t
|
||||||
{
|
{
|
||||||
int planeNum;
|
int planeNum;
|
||||||
int shaderNum;
|
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 */
|
/* drawsurfaces */
|
||||||
struct ibspDrawSurface_t
|
struct ibspDrawSurface_t
|
||||||
|
|
@ -449,7 +410,7 @@ void LoadIBSPFile( const char *filename ){
|
||||||
|
|
||||||
CopyLump( (bspHeader_t*) header, LUMP_BRUSHES, bspBrushes );
|
CopyLump( (bspHeader_t*) header, LUMP_BRUSHES, bspBrushes );
|
||||||
|
|
||||||
CopyBrushSidesLump( header );
|
CopyLump<bspBrushSide_t, ibspBrushSide_t>( (bspHeader_t*) header, LUMP_BRUSHSIDES, bspBrushSides );
|
||||||
|
|
||||||
CopyDrawVertsLump( header );
|
CopyDrawVertsLump( header );
|
||||||
|
|
||||||
|
|
@ -556,7 +517,7 @@ void WriteIBSPFile( const char *filename ){
|
||||||
AddLump( file, header->lumps[LUMP_LEAFS], bspLeafs );
|
AddLump( file, header->lumps[LUMP_LEAFS], bspLeafs );
|
||||||
AddLump( file, header->lumps[LUMP_NODES], bspNodes );
|
AddLump( file, header->lumps[LUMP_NODES], bspNodes );
|
||||||
AddLump( file, header->lumps[LUMP_BRUSHES], bspBrushes );
|
AddLump( file, header->lumps[LUMP_BRUSHES], bspBrushes );
|
||||||
AddBrushSidesLump( file, header );
|
AddLump( file, header->lumps[LUMP_BRUSHSIDES], std::vector<ibspBrushSide_t>( bspBrushSides.begin(), bspBrushSides.end() ) );
|
||||||
AddLump( file, header->lumps[LUMP_LEAFSURFACES], bspLeafSurfaces );
|
AddLump( file, header->lumps[LUMP_LEAFSURFACES], bspLeafSurfaces );
|
||||||
AddLump( file, header->lumps[LUMP_LEAFBRUSHES], bspLeafBrushes );
|
AddLump( file, header->lumps[LUMP_LEAFBRUSHES], bspLeafBrushes );
|
||||||
AddLump( file, header->lumps[LUMP_MODELS], bspModels );
|
AddLump( file, header->lumps[LUMP_MODELS], bspModels );
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,7 @@ void LoadRBSPFile( const char *filename ){
|
||||||
|
|
||||||
CopyLump( (bspHeader_t*) header, LUMP_BRUSHES, bspBrushes );
|
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 ] ) );
|
numBSPDrawVerts = GetLumpElements( (bspHeader_t*) header, LUMP_DRAWVERTS, sizeof( bspDrawVerts[ 0 ] ) );
|
||||||
SetDrawVerts( numBSPDrawVerts );
|
SetDrawVerts( numBSPDrawVerts );
|
||||||
|
|
@ -309,7 +309,7 @@ void WriteRBSPFile( const char *filename ){
|
||||||
AddLump( file, header->lumps[LUMP_LEAFS], bspLeafs );
|
AddLump( file, header->lumps[LUMP_LEAFS], bspLeafs );
|
||||||
AddLump( file, header->lumps[LUMP_NODES], bspNodes );
|
AddLump( file, header->lumps[LUMP_NODES], bspNodes );
|
||||||
AddLump( file, header->lumps[LUMP_BRUSHES], bspBrushes );
|
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_LEAFSURFACES], bspLeafSurfaces );
|
||||||
AddLump( file, header->lumps[LUMP_LEAFBRUSHES], bspLeafBrushes );
|
AddLump( file, header->lumps[LUMP_LEAFBRUSHES], bspLeafBrushes );
|
||||||
AddLump( file, header->lumps[LUMP_MODELS], bspModels );
|
AddLump( file, header->lumps[LUMP_MODELS], bspModels );
|
||||||
|
|
|
||||||
|
|
@ -250,7 +250,7 @@ static void write_json( const char *directory ){
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
doc.RemoveAllMembers();
|
doc.RemoveAllMembers();
|
||||||
for_indexed( auto&& side : Span( bspBrushSides, numBSPBrushSides ) ){
|
for_indexed( const auto& side : bspBrushSides ){
|
||||||
rapidjson::Value value( rapidjson::kObjectType );
|
rapidjson::Value value( rapidjson::kObjectType );
|
||||||
value.AddMember( "planeNum", side.planeNum, all );
|
value.AddMember( "planeNum", side.planeNum, all );
|
||||||
value.AddMember( "shaderNum", side.shaderNum, 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" ) );
|
const auto doc = load_json( StringOutputStream( 256 )( directory, "BrushSides.json" ) );
|
||||||
static std::vector<bspBrushSide_t> items;
|
|
||||||
for( auto&& obj : doc.GetObj() ){
|
for( auto&& obj : doc.GetObj() ){
|
||||||
auto&& item = items.emplace_back();
|
auto&& item = bspBrushSides.emplace_back();
|
||||||
item.planeNum = obj.value["planeNum"].GetInt();
|
item.planeNum = obj.value["planeNum"].GetInt();
|
||||||
item.shaderNum = obj.value["shaderNum"].GetInt();
|
item.shaderNum = obj.value["shaderNum"].GetInt();
|
||||||
item.surfaceNum = obj.value["surfaceNum"].GetInt();
|
item.surfaceNum = obj.value["surfaceNum"].GetInt();
|
||||||
}
|
}
|
||||||
bspBrushSides = items.data();
|
|
||||||
numBSPBrushSides = items.size();
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
const auto doc = load_json( StringOutputStream( 256 )( directory, "DrawVert.json" ) );
|
const auto doc = load_json( StringOutputStream( 256 )( directory, "DrawVert.json" ) );
|
||||||
|
|
|
||||||
|
|
@ -2352,9 +2352,7 @@ Q_EXTERN std::vector<int> bspLeafBrushes;
|
||||||
|
|
||||||
Q_EXTERN std::vector<bspBrush_t> bspBrushes;
|
Q_EXTERN std::vector<bspBrush_t> bspBrushes;
|
||||||
|
|
||||||
Q_EXTERN int numBSPBrushSides Q_ASSIGN( 0 );
|
Q_EXTERN std::vector<bspBrushSide_t> bspBrushSides;
|
||||||
Q_EXTERN int allocatedBSPBrushSides Q_ASSIGN( 0 );
|
|
||||||
Q_EXTERN bspBrushSide_t* bspBrushSides Q_ASSIGN( NULL );
|
|
||||||
|
|
||||||
Q_EXTERN int numBSPLightBytes Q_ASSIGN( 0 );
|
Q_EXTERN int numBSPLightBytes Q_ASSIGN( 0 );
|
||||||
Q_EXTERN byte *bspLightBytes Q_ASSIGN( NULL );
|
Q_EXTERN byte *bspLightBytes Q_ASSIGN( NULL );
|
||||||
|
|
|
||||||
|
|
@ -310,7 +310,7 @@ void BeginBSPFile( void ){
|
||||||
/* these values may actually be initialized if the file existed when loaded, so clear them explicitly */
|
/* these values may actually be initialized if the file existed when loaded, so clear them explicitly */
|
||||||
bspModels.clear();
|
bspModels.clear();
|
||||||
bspNodes.clear();
|
bspNodes.clear();
|
||||||
numBSPBrushSides = 0;
|
bspBrushSides.clear();
|
||||||
bspLeafSurfaces.clear();
|
bspLeafSurfaces.clear();
|
||||||
bspLeafBrushes.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.shaderNum = EmitShader( b.contentShader->shader, &b.contentShader->contentFlags, &b.contentShader->surfaceFlags );
|
||||||
db.firstSide = numBSPBrushSides;
|
db.firstSide = bspBrushSides.size();
|
||||||
|
|
||||||
/* walk sides */
|
/* walk sides */
|
||||||
db.numSides = 0;
|
db.numSides = 0;
|
||||||
|
|
@ -391,14 +391,10 @@ void EmitBrushes( brushlist_t& brushes, int *firstBrush, int *numBrushes ){
|
||||||
/* set output number to bogus initially */
|
/* set output number to bogus initially */
|
||||||
side.outputNum = -1;
|
side.outputNum = -1;
|
||||||
|
|
||||||
/* check count */
|
|
||||||
AUTOEXPAND_BY_REALLOC_BSP( BrushSides, 1024 );
|
|
||||||
|
|
||||||
/* emit side */
|
/* emit side */
|
||||||
side.outputNum = numBSPBrushSides;
|
side.outputNum = bspBrushSides.size();
|
||||||
bspBrushSide_t& cp = bspBrushSides[ numBSPBrushSides ];
|
bspBrushSide_t& cp = bspBrushSides.emplace_back();
|
||||||
db.numSides++;
|
db.numSides++;
|
||||||
numBSPBrushSides++;
|
|
||||||
cp.planeNum = side.planenum;
|
cp.planeNum = side.planenum;
|
||||||
|
|
||||||
/* emit shader */
|
/* emit shader */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user