remove global std::size_t mapEntityNum;

(not buildable)
This commit is contained in:
Garux 2021-11-06 17:27:11 +03:00
parent 25bb05b0d2
commit aa110638d4
8 changed files with 57 additions and 67 deletions

View File

@ -259,12 +259,11 @@ static void FixBrushSides( entity_t *e ){
creates a full bsp + surfaces for the worldspawn entity creates a full bsp + surfaces for the worldspawn entity
*/ */
static void ProcessWorldModel(){ static void ProcessWorldModel( entity_t& e ){
entity_t *e;
const char *value; const char *value;
/* sets integer blockSize from worldspawn "_blocksize" key if it exists */ /* sets integer blockSize from worldspawn "_blocksize" key if it exists */
if( entities[ 0 ].read_keyvalue( value, "_blocksize", "blocksize", "chopsize" ) ) { /* "chopsize" : sof2 */ if( e.read_keyvalue( value, "_blocksize", "blocksize", "chopsize" ) ) { /* "chopsize" : sof2 */
/* scan 3 numbers */ /* scan 3 numbers */
const int s = sscanf( value, "%d %d %d", &blockSize[ 0 ], &blockSize[ 1 ], &blockSize[ 2 ] ); const int s = sscanf( value, "%d %d %d", &blockSize[ 0 ], &blockSize[ 1 ], &blockSize[ 2 ] );
@ -276,12 +275,11 @@ static void ProcessWorldModel(){
Sys_Printf( "block size = { %d %d %d }\n", blockSize[ 0 ], blockSize[ 1 ], blockSize[ 2 ] ); Sys_Printf( "block size = { %d %d %d }\n", blockSize[ 0 ], blockSize[ 1 ], blockSize[ 2 ] );
/* sof2: ignore leaks? */ /* sof2: ignore leaks? */
const bool ignoreLeaks = entities[ 0 ].boolForKey( "_ignoreleaks", "ignoreleaks" ); const bool ignoreLeaks = e.boolForKey( "_ignoreleaks", "ignoreleaks" );
/* begin worldspawn model */ /* begin worldspawn model */
BeginModel(); BeginModel( e );
e = &entities[ 0 ]; e.firstDrawSurf = 0;
e->firstDrawSurf = 0;
/* ydnar: gs mods */ /* ydnar: gs mods */
ClearMetaTriangles(); ClearMetaTriangles();
@ -294,7 +292,7 @@ static void ProcessWorldModel(){
} }
/* build an initial bsp tree using all of the sides of all of the structural brushes */ /* build an initial bsp tree using all of the sides of all of the structural brushes */
facelist_t faces = MakeStructuralBSPFaceList( entities[ 0 ].brushes ); facelist_t faces = MakeStructuralBSPFaceList( e.brushes );
tree_t tree = FaceBSP( faces ); tree_t tree = FaceBSP( faces );
MakeTreePortals( tree ); MakeTreePortals( tree );
FilterStructuralBrushesIntoTree( e, tree ); FilterStructuralBrushesIntoTree( e, tree );
@ -322,7 +320,7 @@ static void ProcessWorldModel(){
ClipSidesIntoTree( e, tree ); ClipSidesIntoTree( e, tree );
/* build a visible face tree (same thing as the initial bsp tree but after reducing the faces) */ /* build a visible face tree (same thing as the initial bsp tree but after reducing the faces) */
faces = MakeVisibleBSPFaceList( entities[ 0 ].brushes ); faces = MakeVisibleBSPFaceList( e.brushes );
FreeTree( tree ); FreeTree( tree );
tree = FaceBSP( faces ); tree = FaceBSP( faces );
MakeTreePortals( tree ); MakeTreePortals( tree );
@ -394,7 +392,7 @@ static void ProcessWorldModel(){
} }
/* ydnar: fog hull */ /* ydnar: fog hull */
if ( entities[ 0 ].read_keyvalue( value, "_foghull" ) ) { if ( e.read_keyvalue( value, "_foghull" ) ) {
const auto shader = String64()( "textures/", value ); const auto shader = String64()( "textures/", value );
MakeFogHullSurfs( e, shader ); MakeFogHullSurfs( e, shader );
} }
@ -434,7 +432,7 @@ static void ProcessWorldModel(){
} }
/* create the flare surface (note shader defaults automatically) */ /* create the flare surface (note shader defaults automatically) */
DrawSurfaceForFlare( mapEntityNum, origin, normal, color, flareShader, lightStyle ); DrawSurfaceForFlare( e.mapEntityNum, origin, normal, color, flareShader, lightStyle );
} }
} }
} }
@ -458,11 +456,10 @@ static void ProcessWorldModel(){
creates bsp + surfaces for other brush models creates bsp + surfaces for other brush models
*/ */
static void ProcessSubModel(){ static void ProcessSubModel( entity_t& e ){
/* start a brush model */ /* start a brush model */
BeginModel(); BeginModel( e );
entity_t *e = &entities[ mapEntityNum ]; e.firstDrawSurf = numMapDrawSurfs;
e->firstDrawSurf = numMapDrawSurfs;
/* ydnar: gs mods */ /* ydnar: gs mods */
ClearMetaTriangles(); ClearMetaTriangles();
@ -541,21 +538,21 @@ static void ProcessModels(){
CreateMapFogs(); CreateMapFogs();
/* walk entity list */ /* walk entity list */
for ( mapEntityNum = 0; mapEntityNum < entities.size(); mapEntityNum++ ) for ( size_t entityNum = 0; entityNum < entities.size(); ++entityNum )
{ {
/* get entity */ /* get entity */
const entity_t& entity = entities[ mapEntityNum ]; entity_t& entity = entities[ entityNum ];
if ( entity.brushes.empty() && entity.patches == NULL ) { if ( entity.brushes.empty() && entity.patches == NULL ) {
continue; continue;
} }
/* process the model */ /* process the model */
Sys_FPrintf( SYS_VRB, "############### model %zu ###############\n", bspModels.size() ); Sys_FPrintf( SYS_VRB, "############### model %zu ###############\n", bspModels.size() );
if ( mapEntityNum == 0 ) { if ( entityNum == 0 ) {
ProcessWorldModel(); ProcessWorldModel( entity );
} }
else{ else{
ProcessSubModel(); ProcessSubModel( entity );
} }
/* potentially turn off the deluge of text */ /* potentially turn off the deluge of text */

View File

@ -947,9 +947,8 @@ int MergeBSPMain( Args& args ){
a stripped down ProcessModels a stripped down ProcessModels
*/ */
static void PseudoCompileBSP( bool need_tree ){ static void PseudoCompileBSP( bool need_tree ){
int models; int models = 1;
char modelValue[16]; char modelValue[16];
entity_t *entity;
facelist_t faces; facelist_t faces;
tree_t tree{}; tree_t tree{};
@ -957,30 +956,29 @@ static void PseudoCompileBSP( bool need_tree ){
numMapDrawSurfs = 0; numMapDrawSurfs = 0;
BeginBSPFile(); BeginBSPFile();
models = 1; for ( size_t entityNum = 0; entityNum < entities.size(); ++entityNum )
for ( mapEntityNum = 0; mapEntityNum < entities.size(); mapEntityNum++ )
{ {
/* get entity */ /* get entity */
entity = &entities[ mapEntityNum ]; entity_t& entity = entities[ entityNum ];
if ( entity->brushes.empty() && entity->patches == NULL ) { if ( entity.brushes.empty() && entity.patches == NULL ) {
continue; continue;
} }
if ( mapEntityNum != 0 ) { if ( entityNum != 0 ) {
sprintf( modelValue, "*%d", models++ ); sprintf( modelValue, "*%d", models++ );
entity->setKeyValue( "model", modelValue ); entity.setKeyValue( "model", modelValue );
} }
/* process the model */ /* process the model */
Sys_FPrintf( SYS_VRB, "############### model %zu ###############\n", bspModels.size() ); Sys_FPrintf( SYS_VRB, "############### model %zu ###############\n", bspModels.size() );
BeginModel(); BeginModel( entity );
entity->firstDrawSurf = numMapDrawSurfs; entity.firstDrawSurf = numMapDrawSurfs;
ClearMetaTriangles(); ClearMetaTriangles();
PatchMapDrawSurfs( entity ); PatchMapDrawSurfs( entity );
if ( mapEntityNum == 0 && need_tree ) { if ( entityNum == 0 && need_tree ) {
faces = MakeStructuralBSPFaceList( entities[0].brushes ); faces = MakeStructuralBSPFaceList( entities[0].brushes );
tree = FaceBSP( faces ); tree = FaceBSP( faces );
} }
@ -991,7 +989,7 @@ static void PseudoCompileBSP( bool need_tree ){
} }
/* a minimized ClipSidesIntoTree */ /* a minimized ClipSidesIntoTree */
for ( const brush_t& brush : entity->brushes ) for ( const brush_t& brush : entity.brushes )
{ {
/* walk the brush sides */ /* walk the brush sides */
for ( const side_t& side : brush.sides ) for ( const side_t& side : brush.sides )
@ -1020,7 +1018,7 @@ static void PseudoCompileBSP( bool need_tree ){
FilterStructuralBrushesIntoTree( entity, tree ); FilterStructuralBrushesIntoTree( entity, tree );
FilterDetailBrushesIntoTree( entity, tree ); FilterDetailBrushesIntoTree( entity, tree );
EmitBrushes( entity->brushes, &entity->firstBrush, &entity->numBrushes ); EmitBrushes( entity.brushes, &entity.firstBrush, &entity.numBrushes );
EndModel( entity, tree.headnode ); EndModel( entity, tree.headnode );
} }
EndBSPFile( false ); EndBSPFile( false );

View File

@ -1362,7 +1362,7 @@ static void LoadEntityIndexMap( entity_t& e ){
} }
/* note it */ /* note it */
Sys_FPrintf( SYS_VRB, "Entity %d (%s) has shader index map \"%s\"\n", e.mapEntityNum, e.classname(), indexMapFilename ); Sys_FPrintf( SYS_VRB, "Entity %d (%s) has shader index map \"%s\"\n", e.mapEntityNum, e.classname(), indexMapFilename );
/* handle tga image */ /* handle tga image */
if ( path_extension_is( indexMapFilename, "tga" ) ) { if ( path_extension_is( indexMapFilename, "tga" ) ) {

View File

@ -415,7 +415,7 @@ static void make_brush_sides( const Plane3f plane, const Plane3f (&p)[3], const
buildBrush.sides[4].planenum = FindFloatPlane( reverse, 0, NULL ); buildBrush.sides[4].planenum = FindFloatPlane( reverse, 0, NULL );
} }
static void ClipModel( int spawnFlags, float clipDepth, shaderInfo_t *si, const mapDrawSurface_t *ds, const char *modelName ){ static void ClipModel( int spawnFlags, float clipDepth, shaderInfo_t *si, const mapDrawSurface_t *ds, const char *modelName, entity_t& entity ){
const int spf = ( spawnFlags & ( eClipFlags & ~eClipModel ) ); const int spf = ( spawnFlags & ( eClipFlags & ~eClipModel ) );
/* ydnar: giant hack land: generate clipping brushes for model triangles */ /* ydnar: giant hack land: generate clipping brushes for model triangles */
@ -489,7 +489,7 @@ static void ClipModel( int spawnFlags, float clipDepth, shaderInfo_t *si, const
/* prepare a brush */ /* prepare a brush */
buildBrush.sides.reserve( MAX_BUILD_SIDES ); buildBrush.sides.reserve( MAX_BUILD_SIDES );
buildBrush.entityNum = mapEntityNum; buildBrush.entityNum = entity.mapEntityNum;
buildBrush.contentShader = si; buildBrush.contentShader = si;
buildBrush.compileFlags = si->compileFlags; buildBrush.compileFlags = si->compileFlags;
buildBrush.contentFlags = si->contentFlags; buildBrush.contentFlags = si->contentFlags;
@ -966,9 +966,9 @@ default_CLIPMODEL:
if ( CreateBrushWindings( buildBrush ) ) { if ( CreateBrushWindings( buildBrush ) ) {
AddBrushBevels(); AddBrushBevels();
//% EmitBrushes( buildBrush, NULL, NULL ); //% EmitBrushes( buildBrush, NULL, NULL );
brush_t& newBrush = entities[ mapEntityNum ].brushes.emplace_front( buildBrush ); brush_t& newBrush = entity.brushes.emplace_front( buildBrush );
newBrush.original = &newBrush; newBrush.original = &newBrush;
entities[ mapEntityNum ].numBrushes++; entity.numBrushes++;
} }
else{ else{
Sys_Warning( "triangle (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f) of %s was not autoclipped\n", Sys_Warning( "triangle (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f) (%6.0f %6.0f %6.0f) of %s was not autoclipped\n",
@ -988,7 +988,7 @@ default_CLIPMODEL:
adds a picomodel into the bsp adds a picomodel into the bsp
*/ */
void InsertModel( const char *name, int skin, int frame, const Matrix4& transform, const std::list<remap_t> *remaps, shaderInfo_t *celShader, int eNum, int castShadows, int recvShadows, int spawnFlags, float lightmapScale, int lightmapSampleSize, float shadeAngle, float clipDepth ){ void InsertModel( const char *name, int skin, int frame, const Matrix4& transform, const std::list<remap_t> *remaps, shaderInfo_t *celShader, entity_t& entity, int castShadows, int recvShadows, int spawnFlags, float lightmapScale, int lightmapSampleSize, float shadeAngle, float clipDepth ){
int i, j; int i, j;
const Matrix4 nTransform( matrix4_for_normal_transform( transform ) ); const Matrix4 nTransform( matrix4_for_normal_transform( transform ) );
const bool transform_lefthanded = MATRIX4_LEFTHANDED == matrix4_handedness( transform ); const bool transform_lefthanded = MATRIX4_LEFTHANDED == matrix4_handedness( transform );
@ -1138,7 +1138,7 @@ void InsertModel( const char *name, int skin, int frame, const Matrix4& transfor
/* allocate a surface (ydnar: gs mods) */ /* allocate a surface (ydnar: gs mods) */
ds = AllocDrawSurface( ESurfaceType::Triangles ); ds = AllocDrawSurface( ESurfaceType::Triangles );
ds->entityNum = eNum; ds->entityNum = entity.mapEntityNum;
ds->castShadows = castShadows; ds->castShadows = castShadows;
ds->recvShadows = recvShadows; ds->recvShadows = recvShadows;
@ -1249,7 +1249,7 @@ void InsertModel( const char *name, int skin, int frame, const Matrix4& transfor
/* set cel shader */ /* set cel shader */
ds->celShader = celShader; ds->celShader = celShader;
ClipModel( spawnFlags, clipDepth, si, ds, name ); ClipModel( spawnFlags, clipDepth, si, ds, name, entity );
} }
} }
@ -1410,7 +1410,6 @@ void AddTriangleModels( entity_t *eparent ){
/* insert the model */ /* insert the model */
InsertModel( model, skin, frame, transform, &remaps, celShader, mapEntityNum, castShadows, recvShadows, spawnFlags, lightmapScale, lightmapSampleSize, shadeAngle, clipDepth ); InsertModel( model, skin, frame, transform, &remaps, celShader, *eparent, castShadows, recvShadows, spawnFlags, lightmapScale, lightmapSampleSize, shadeAngle, clipDepth );
} }
} }

View File

@ -1489,7 +1489,7 @@ void EndBSPFile( bool do_write );
void EmitBrushes( brushlist_t& brushes, int *firstBrush, int *numBrushes ); void EmitBrushes( brushlist_t& brushes, int *firstBrush, int *numBrushes );
void EmitFogs(); void EmitFogs();
void BeginModel(); void BeginModel( const entity_t& e );
void EndModel( entity_t *e, node_t *headnode ); void EndModel( entity_t *e, node_t *headnode );
@ -1523,7 +1523,7 @@ tree_t FaceBSP( facelist_t& list );
/* model.c */ /* model.c */
void assimp_init(); void assimp_init();
void InsertModel( const char *name, int skin, int frame, const Matrix4& transform, const std::list<remap_t> *remaps, shaderInfo_t *celShader, int eNum, int castShadows, int recvShadows, int spawnFlags, float lightmapScale, int lightmapSampleSize, float shadeAngle, float clipDepth ); void InsertModel( const char *name, int skin, int frame, const Matrix4& transform, const std::list<remap_t> *remaps, shaderInfo_t *celShader, entity_t& entity, int castShadows, int recvShadows, int spawnFlags, float lightmapScale, int lightmapSampleSize, float shadeAngle, float clipDepth );
void AddTriangleModels( entity_t *e ); void AddTriangleModels( entity_t *e );
@ -1538,7 +1538,6 @@ void TidyEntitySurfaces( entity_t *e );
mapDrawSurface_t *CloneSurface( mapDrawSurface_t *src, shaderInfo_t *si ); mapDrawSurface_t *CloneSurface( mapDrawSurface_t *src, shaderInfo_t *si );
bool IsTriangleDegenerate( bspDrawVert_t *points, int a, int b, int c ); bool IsTriangleDegenerate( bspDrawVert_t *points, int a, int b, int c );
void ClearSurface( mapDrawSurface_t *ds ); void ClearSurface( mapDrawSurface_t *ds );
void AddEntitySurfaceModels( entity_t *e );
mapDrawSurface_t *DrawSurfaceForSide( const entity_t *e, const brush_t& b, const side_t& s, const winding_t& w ); mapDrawSurface_t *DrawSurfaceForSide( const entity_t *e, const brush_t& b, const side_t& s, const winding_t& w );
mapDrawSurface_t *DrawSurfaceForMesh( entity_t *e, parseMesh_t *p, mesh_t *mesh ); mapDrawSurface_t *DrawSurfaceForMesh( entity_t *e, parseMesh_t *p, mesh_t *mesh );
mapDrawSurface_t *DrawSurfaceForFlare( int entNum, const Vector3& origin, const Vector3& normal, const Vector3& color, const char *flareShader, int lightStyle ); mapDrawSurface_t *DrawSurfaceForFlare( int entNum, const Vector3& origin, const Vector3& normal, const Vector3& color, const char *flareShader, int lightStyle );
@ -1555,7 +1554,7 @@ void Fur( mapDrawSurface_t *src );
/* surface_foliage.c */ /* surface_foliage.c */
void Foliage( mapDrawSurface_t *src ); void Foliage( mapDrawSurface_t *src, entity_t& entity );
/* ydnar: surface_meta.c */ /* ydnar: surface_meta.c */
@ -1799,8 +1798,6 @@ inline int sampleSize = DEFAULT_LIGHTMAP_SAMPLE_SIZE; /* lightmap sampl
inline int minSampleSize = DEFAULT_LIGHTMAP_MIN_SAMPLE_SIZE; /* minimum sample size to use at all */ inline int minSampleSize = DEFAULT_LIGHTMAP_MIN_SAMPLE_SIZE; /* minimum sample size to use at all */
inline int sampleScale; /* vortex: lightmap sample scale (ie quality)*/ inline int sampleScale; /* vortex: lightmap sample scale (ie quality)*/
inline std::size_t mapEntityNum;
inline std::vector<plane_t> mapplanes; /* mapplanes[ num ^ 1 ] will always be the mirror or mapplanes[ num ] */ /* nummapplanes will always be even */ inline std::vector<plane_t> mapplanes; /* mapplanes[ num ^ 1 ] will always be the mirror or mapplanes[ num ] */ /* nummapplanes will always be even */
inline MinMax g_mapMinmax; inline MinMax g_mapMinmax;

View File

@ -2719,7 +2719,7 @@ static void BiasSurfaceTextures( mapDrawSurface_t *ds ){
adds models to a specified triangle, returns the number of models added adds models to a specified triangle, returns the number of models added
*/ */
static int AddSurfaceModelsToTriangle_r( mapDrawSurface_t *ds, const surfaceModel_t& model, bspDrawVert_t **tri ){ static int AddSurfaceModelsToTriangle_r( mapDrawSurface_t *ds, const surfaceModel_t& model, bspDrawVert_t **tri, entity_t& entity ){
bspDrawVert_t mid, *tri2[ 3 ]; bspDrawVert_t mid, *tri2[ 3 ];
int max, n, localNumSurfaceModels; int max, n, localNumSurfaceModels;
@ -2811,7 +2811,7 @@ static int AddSurfaceModelsToTriangle_r( mapDrawSurface_t *ds, const surfaceMode
} }
/* insert the model */ /* insert the model */
InsertModel( model.model.c_str(), 0, 0, transform, NULL, ds->celShader, ds->entityNum, ds->castShadows, ds->recvShadows, 0, ds->lightmapScale, 0, 0, clipDepthGlobal ); InsertModel( model.model.c_str(), 0, 0, transform, NULL, ds->celShader, entity, ds->castShadows, ds->recvShadows, 0, ds->lightmapScale, 0, 0, clipDepthGlobal );
/* return to sender */ /* return to sender */
return 1; return 1;
@ -2824,7 +2824,7 @@ static int AddSurfaceModelsToTriangle_r( mapDrawSurface_t *ds, const surfaceMode
/* recurse to first triangle */ /* recurse to first triangle */
VectorCopy( tri, tri2 ); VectorCopy( tri, tri2 );
tri2[ max ] = &mid; tri2[ max ] = &mid;
n = AddSurfaceModelsToTriangle_r( ds, model, tri2 ); n = AddSurfaceModelsToTriangle_r( ds, model, tri2, entity );
if ( n < 0 ) { if ( n < 0 ) {
return n; return n;
} }
@ -2833,7 +2833,7 @@ static int AddSurfaceModelsToTriangle_r( mapDrawSurface_t *ds, const surfaceMode
/* recurse to second triangle */ /* recurse to second triangle */
VectorCopy( tri, tri2 ); VectorCopy( tri, tri2 );
tri2[ ( max + 1 ) % 3 ] = &mid; tri2[ ( max + 1 ) % 3 ] = &mid;
n = AddSurfaceModelsToTriangle_r( ds, model, tri2 ); n = AddSurfaceModelsToTriangle_r( ds, model, tri2, entity );
if ( n < 0 ) { if ( n < 0 ) {
return n; return n;
} }
@ -2850,7 +2850,7 @@ static int AddSurfaceModelsToTriangle_r( mapDrawSurface_t *ds, const surfaceMode
adds a surface's shader models to the surface adds a surface's shader models to the surface
*/ */
static int AddSurfaceModels( mapDrawSurface_t *ds ){ static int AddSurfaceModels( mapDrawSurface_t *ds, entity_t& entity ){
int i, x, y, n, pw[ 5 ], r, localNumSurfaceModels, iterations; int i, x, y, n, pw[ 5 ], r, localNumSurfaceModels, iterations;
mesh_t src, *mesh, *subdivided; mesh_t src, *mesh, *subdivided;
bspDrawVert_t centroid, *tri[ 3 ]; bspDrawVert_t centroid, *tri[ 3 ];
@ -2906,7 +2906,7 @@ static int AddSurfaceModels( mapDrawSurface_t *ds ){
tri[ 2 ] = &ds->verts[ ( i + 1 ) % ds->numVerts ]; tri[ 2 ] = &ds->verts[ ( i + 1 ) % ds->numVerts ];
/* create models */ /* create models */
n = AddSurfaceModelsToTriangle_r( ds, model, tri ); n = AddSurfaceModelsToTriangle_r( ds, model, tri, entity );
if ( n < 0 ) { if ( n < 0 ) {
return n; return n;
} }
@ -2948,7 +2948,7 @@ static int AddSurfaceModels( mapDrawSurface_t *ds ){
tri[ 0 ] = &mesh->verts[ pw[ r + 0 ] ]; tri[ 0 ] = &mesh->verts[ pw[ r + 0 ] ];
tri[ 1 ] = &mesh->verts[ pw[ r + 1 ] ]; tri[ 1 ] = &mesh->verts[ pw[ r + 1 ] ];
tri[ 2 ] = &mesh->verts[ pw[ r + 2 ] ]; tri[ 2 ] = &mesh->verts[ pw[ r + 2 ] ];
n = AddSurfaceModelsToTriangle_r( ds, model, tri ); n = AddSurfaceModelsToTriangle_r( ds, model, tri, entity );
if ( n < 0 ) { if ( n < 0 ) {
return n; return n;
} }
@ -2958,7 +2958,7 @@ static int AddSurfaceModels( mapDrawSurface_t *ds ){
tri[ 0 ] = &mesh->verts[ pw[ r + 0 ] ]; tri[ 0 ] = &mesh->verts[ pw[ r + 0 ] ];
tri[ 1 ] = &mesh->verts[ pw[ r + 2 ] ]; tri[ 1 ] = &mesh->verts[ pw[ r + 2 ] ];
tri[ 2 ] = &mesh->verts[ pw[ r + 3 ] ]; tri[ 2 ] = &mesh->verts[ pw[ r + 3 ] ];
n = AddSurfaceModelsToTriangle_r( ds, model, tri ); n = AddSurfaceModelsToTriangle_r( ds, model, tri, entity );
if ( n < 0 ) { if ( n < 0 ) {
return n; return n;
} }
@ -2980,7 +2980,7 @@ static int AddSurfaceModels( mapDrawSurface_t *ds ){
tri[ 0 ] = &ds->verts[ ds->indexes[ i ] ]; tri[ 0 ] = &ds->verts[ ds->indexes[ i ] ];
tri[ 1 ] = &ds->verts[ ds->indexes[ i + 1 ] ]; tri[ 1 ] = &ds->verts[ ds->indexes[ i + 1 ] ];
tri[ 2 ] = &ds->verts[ ds->indexes[ i + 2 ] ]; tri[ 2 ] = &ds->verts[ ds->indexes[ i + 2 ] ];
n = AddSurfaceModelsToTriangle_r( ds, model, tri ); n = AddSurfaceModelsToTriangle_r( ds, model, tri, entity );
if ( n < 0 ) { if ( n < 0 ) {
return n; return n;
} }
@ -3014,7 +3014,7 @@ void AddEntitySurfaceModels( entity_t *e ){
/* walk the surface list */ /* walk the surface list */
for ( i = e->firstDrawSurf; i < numMapDrawSurfs; i++ ) for ( i = e->firstDrawSurf; i < numMapDrawSurfs; i++ )
numSurfaceModels += AddSurfaceModels( &mapDrawSurfs[ i ] ); numSurfaceModels += AddSurfaceModels( &mapDrawSurfs[ i ], *e );
} }
@ -3122,7 +3122,7 @@ void FilterDrawsurfsIntoTree( entity_t *e, tree_t& tree ){
/* ydnar/sd: make foliage surfaces */ /* ydnar/sd: make foliage surfaces */
if ( !si->foliage.empty() ) { if ( !si->foliage.empty() ) {
Foliage( ds ); Foliage( ds, *e );
} }
/* create a flare surface if necessary */ /* create a flare surface if necessary */

View File

@ -155,7 +155,7 @@ static void SubdivideFoliageTriangle_r( mapDrawSurface_t *ds, const foliage_t& f
generates a foliage file for a bsp generates a foliage file for a bsp
*/ */
void Foliage( mapDrawSurface_t *src ){ void Foliage( mapDrawSurface_t *src, entity_t& entity ){
int i, j, x, y, pw[ 5 ], r, oldNumMapDrawSurfs; int i, j, x, y, pw[ 5 ], r, oldNumMapDrawSurfs;
mapDrawSurface_t *ds; mapDrawSurface_t *ds;
shaderInfo_t *si; shaderInfo_t *si;
@ -255,7 +255,7 @@ void Foliage( mapDrawSurface_t *src ){
oldNumMapDrawSurfs = numMapDrawSurfs; oldNumMapDrawSurfs = numMapDrawSurfs;
/* add the model to the bsp */ /* add the model to the bsp */
InsertModel( foliage.model.c_str(), 0, 0, matrix4_scale_for_vec3( Vector3( foliage.scale ) ), NULL, NULL, src->entityNum, src->castShadows, src->recvShadows, 0, src->lightmapScale, 0, 0, clipDepthGlobal ); InsertModel( foliage.model.c_str(), 0, 0, matrix4_scale_for_vec3( Vector3( foliage.scale ) ), NULL, NULL, entity, src->castShadows, src->recvShadows, 0, src->lightmapScale, 0, 0, clipDepthGlobal );
/* walk each new surface */ /* walk each new surface */
for ( i = oldNumMapDrawSurfs; i < numMapDrawSurfs; i++ ) for ( i = oldNumMapDrawSurfs; i < numMapDrawSurfs; i++ )

View File

@ -476,14 +476,10 @@ void EmitFogs(){
sets up a new brush model sets up a new brush model
*/ */
void BeginModel(){ void BeginModel( const entity_t& e ){
MinMax minmax; MinMax minmax;
MinMax lgMinmax; /* ydnar: lightgrid mins/maxs */ MinMax lgMinmax; /* ydnar: lightgrid mins/maxs */
/* get model and entity */
bspModel_t& mod = bspModels.emplace_back();
const entity_t& e = entities[ mapEntityNum ];
/* bound the brushes */ /* bound the brushes */
for ( const brush_t& b : e.brushes ) for ( const brush_t& b : e.brushes )
{ {
@ -506,6 +502,9 @@ void BeginModel(){
minmax.extend( vert.xyz ); minmax.extend( vert.xyz );
} }
/* get model */
bspModel_t& mod = bspModels.emplace_back();
/* ydnar: lightgrid mins/maxs */ /* ydnar: lightgrid mins/maxs */
if ( lgMinmax.valid() ) { if ( lgMinmax.valid() ) {
/* use lightgrid bounds */ /* use lightgrid bounds */