try to fix FindFloatPlane bug

unlimit entity count


git-svn-id: svn://svn.icculus.org/netradiant/trunk@382 61c419a2-8eb2-4b30-bcec-8cead039b335
This commit is contained in:
divverent 2009-06-18 06:45:31 +00:00
parent ba342c2f4a
commit b5bff46ac3
5 changed files with 17 additions and 5 deletions

View File

@ -649,6 +649,13 @@ void UnparseEntities( void )
/* run through entity list */
for( i = 0; i < numBSPEntities && i < numEntities; i++ )
{
{
int sz = end - buf;
AUTOEXPAND_BY_REALLOC(bspEntData, sz + 65536, allocatedBSPEntData, 1024);
buf = bspEntData;
end = buf + sz;
}
/* get epair */
ep = entities[ i ].epairs;
if( ep == NULL )
@ -685,7 +692,7 @@ void UnparseEntities( void )
end += 2;
/* check for overflow */
if( end > buf + MAX_MAP_ENTSTRING )
if( end > buf + allocatedBSPEntData )
Error( "Entity text too long" );
}

View File

@ -509,7 +509,7 @@ void LoadIBSPFile( const char *filename )
bspLightBytes = safe_malloc( numBSPLightBytes );
CopyLump( (bspHeader_t*) header, LUMP_LIGHTMAPS, bspLightBytes, 1 );
bspEntDataSize = CopyLump( (bspHeader_t*) header, LUMP_ENTITIES, bspEntData, 1);
bspEntDataSize = CopyLump_Allocate( (bspHeader_t*) header, LUMP_ENTITIES, (void **) &bspEntData, 1, &allocatedBSPEntData);
CopyLightGridLumps( header );

View File

@ -265,7 +265,7 @@ void LoadRBSPFile( const char *filename )
bspLightBytes = safe_malloc( numBSPLightBytes );
CopyLump( (bspHeader_t*) header, LUMP_LIGHTMAPS, bspLightBytes, 1 );
bspEntDataSize = CopyLump( (bspHeader_t*) header, LUMP_ENTITIES, bspEntData, 1);
bspEntDataSize = CopyLump_Allocate( (bspHeader_t*) header, LUMP_ENTITIES, (void **) &bspEntData, 1, &allocatedBSPEntData);
CopyLightGridLumps( header );

View File

@ -212,7 +212,7 @@ ydnar: changed to allow a number of test points to be supplied that
must be within an epsilon distance of the plane
*/
int FindFloatPlane( vec3_t normal, vec_t dist, int numPoints, vec3_t *points ) // NOTE: this has a side effect on the normal. Good or bad?
int FindFloatPlane( vec3_t innormal, vec_t dist, int numPoints, vec3_t *points ) // NOTE: this has a side effect on the normal. Good or bad?
#ifdef USE_HASHING
@ -222,12 +222,14 @@ int FindFloatPlane( vec3_t normal, vec_t dist, int numPoints, vec3_t *points ) /
plane_t *p;
vec_t d;
vec3_t centerofweight;
vec3_t normal;
VectorClear(centerofweight);
for(i = 0; i < numPoints; ++i)
VectorMA(centerofweight, 1.0 / numPoints, points[i], centerofweight);
/* hash the plane */
VectorCopy(innormal, normal);
SnapPlane( normal, &dist, centerofweight );
hash = (PLANE_HASHES - 1) & (int) fabs( dist );
@ -269,6 +271,7 @@ int FindFloatPlane( vec3_t normal, vec_t dist, int numPoints, vec3_t *points ) /
{
int i;
plane_t *p;
vec3_t normal;
vec3_t centerofweight;
@ -277,6 +280,7 @@ int FindFloatPlane( vec3_t normal, vec_t dist, int numPoints, vec3_t *points ) /
for(i = 0; i < numPoints; ++i)
VectorMA(centerofweight, 1.0 / numPoints, points[i], centerofweight);
VectorCopy(innormal, normal);
SnapPlane( normal, &dist, centerofweight );
for( i = 0, p = mapplanes; i < nummapplanes; i++, p++ )
{

View File

@ -2385,7 +2385,8 @@ Q_EXTERN int allocatedBSPShaders Q_ASSIGN( 0 );
Q_EXTERN bspShader_t* bspShaders Q_ASSIGN(0);
Q_EXTERN int bspEntDataSize Q_ASSIGN( 0 );
Q_EXTERN char bspEntData[ MAX_MAP_ENTSTRING ];
Q_EXTERN int allocatedBSPEntData Q_ASSIGN( 0 );
Q_EXTERN char *bspEntData Q_ASSIGN(0);
Q_EXTERN int numBSPLeafs Q_ASSIGN( 0 );
Q_EXTERN bspLeaf_t bspLeafs[ MAX_MAP_LEAFS ];