modernize surfaceExtra_t storage

This commit is contained in:
Garux
2024-11-13 06:47:24 +05:00
parent a24c330de2
commit db64da67a4
+10 -30
View File
@@ -40,34 +40,11 @@
------------------------------------------------------------------------------- */
#define GROW_SURFACE_EXTRAS 1024
static int numSurfaceExtras = 0;
static int maxSurfaceExtras = 0;
static surfaceExtra_t *surfaceExtras;
static std::vector<surfaceExtra_t> surfaceExtras;
static surfaceExtra_t seDefault;
/*
AllocSurfaceExtra()
allocates a new extra storage
*/
static surfaceExtra_t& AllocSurfaceExtra(){
/* enough space? */
AUTOEXPAND_BY_REALLOC_ADD( surfaceExtras, numSurfaceExtras, maxSurfaceExtras, GROW_SURFACE_EXTRAS );
/* add another */
surfaceExtra_t& se = surfaceExtras[ numSurfaceExtras++ ];
se = seDefault;
/* return it */
return se;
}
/*
SetDefaultSampleSize()
sets the default lightmap sample size
@@ -86,7 +63,7 @@ void SetDefaultSampleSize( int sampleSize ){
void SetSurfaceExtra( const mapDrawSurface_t& ds ){
/* get a new extra */
surfaceExtra_t& se = AllocSurfaceExtra();
surfaceExtra_t& se = surfaceExtras.emplace_back( seDefault );
/* copy out the relevant bits */
se.mds = &ds;
@@ -111,7 +88,7 @@ void SetSurfaceExtra( const mapDrawSurface_t& ds ){
*/
const surfaceExtra_t& GetSurfaceExtra( int num ){
if ( num < 0 || num >= numSurfaceExtras ) {
if ( num < 0 || size_t( num ) >= surfaceExtras.size() ) {
return seDefault;
}
return surfaceExtras[ num ];
@@ -139,10 +116,10 @@ void WriteSurfaceExtraFile( const char *path ){
FILE *sf = SafeOpenWrite( srfPath, "wt" );
/* lap through the extras list */
for ( int i = -1; i < numSurfaceExtras; i++ )
for ( int i = -1, size = surfaceExtras.size(); i < size; ++i )
{
/* get extra */
const surfaceExtra_t *se = &GetSurfaceExtra( i );
const surfaceExtra_t * const se = &GetSurfaceExtra( i );
/* default or surface num? */
if ( i < 0 ) {
@@ -252,8 +229,11 @@ void LoadSurfaceExtraFile( const char *path ){
if ( surfaceNum < 0 ) {
Error( "ReadSurfaceExtraFile(): %s, line %d: bogus surface num %d", srfPath.c_str(), scriptline, surfaceNum );
}
while ( surfaceNum >= numSurfaceExtras )
AllocSurfaceExtra();
if( size_t( surfaceNum ) >= surfaceExtras.size() ){
if( size_t( surfaceNum ) >= surfaceExtras.capacity() ) // ensure that capacity grows efficiently, as it's not guaranteed for vector::resize()
surfaceExtras.reserve( surfaceExtras.capacity() << 1 );
surfaceExtras.resize( surfaceNum + 1, seDefault );
}
se = &surfaceExtras[ surfaceNum ];
}