Fix Chunk destructor segfault using smart pointers #112 (#414)

This commit is contained in:
ModMaker101
2026-03-04 10:43:29 -05:00
committed by GitHub
parent ca5fde56fe
commit 2be856a2d4
2 changed files with 12 additions and 14 deletions

View File

@@ -52,7 +52,7 @@ Chunk::Chunk(Level *level, LevelRenderer::rteMap &globalRenderableTileEntities,
: globalRenderableTileEntities( &globalRenderableTileEntities ), globalRenderableTileEntities_cs(&globalRenderableTileEntities_cs)
{
clipChunk->visible = false;
bb = NULL;
bb = nullptr;
id = 0;
this->level = level;
@@ -101,15 +101,15 @@ void Chunk::setPos(int x, int y, int z)
float g = 6.0f;
// 4J - changed to just set the value rather than make a new one, if we've already created storage
if( bb == NULL )
if( !bb )
{
bb = AABB::newPermanent(-g, -g, -g, XZSIZE+g, SIZE+g, XZSIZE+g);
bb = shared_ptr<AABB>(AABB::newPermanent(-g, -g, -g, XZSIZE+g, SIZE+g, XZSIZE+g));
}
else
{
else
{
// 4J MGH - bounds are relative to the position now, so the AABB will be setup already, either above, or from the tesselator bounds.
// bb->set(-g, -g, -g, SIZE+g, SIZE+g, SIZE+g);
}
}
clipChunk->aabb[0] = bb->x0 + x;
clipChunk->aabb[1] = bb->y0 + y;
clipChunk->aabb[2] = bb->z0 + z;
@@ -154,6 +154,7 @@ void Chunk::translateToPos()
Chunk::Chunk()
{
bb = nullptr;
}
void Chunk::makeCopyForRebuild(Chunk *source)
@@ -998,7 +999,7 @@ int Chunk::getList(int layer)
void Chunk::cull(Culler *culler)
{
clipChunk->visible = culler->isVisible(bb);
clipChunk->visible = culler->isVisible(bb.get());
}
void Chunk::renderBB()
@@ -1027,10 +1028,7 @@ void Chunk::clearDirty()
#endif
}
Chunk::~Chunk()
{
delete bb;
}
Chunk::~Chunk() = default;
bool Chunk::emptyFlagSet(int layer)
{

View File

@@ -46,11 +46,11 @@ public:
int xRender, yRender, zRender;
int xRenderOffs, yRenderOffs, zRenderOffs;
int xm, ym, zm;
AABB *bb;
int xm, ym, zm;
shared_ptr<AABB> bb;
ClipChunk *clipChunk;
int id;
int id;
//public:
// vector<shared_ptr<TileEntity> > renderableTileEntities; // 4J - removed