diff options
| author | ModMaker101 <119018978+ModMaker101@users.noreply.github.com> | 2026-03-04 10:43:29 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-04 22:43:29 +0700 |
| commit | 2be856a2d447ab758e02bfeaaa9cac5e1114dbfc (patch) | |
| tree | 45522b197014c467126fce318f963b5d50d76664 /Minecraft.Client | |
| parent | ca5fde56fed613a8f45767868636e2321b03d3f3 (diff) | |
Fix Chunk destructor segfault using smart pointers #112 (#414)
Diffstat (limited to 'Minecraft.Client')
| -rw-r--r-- | Minecraft.Client/Chunk.cpp | 20 | ||||
| -rw-r--r-- | Minecraft.Client/Chunk.h | 6 |
2 files changed, 12 insertions, 14 deletions
diff --git a/Minecraft.Client/Chunk.cpp b/Minecraft.Client/Chunk.cpp index d039227b..63cd0501 100644 --- a/Minecraft.Client/Chunk.cpp +++ b/Minecraft.Client/Chunk.cpp @@ -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) { diff --git a/Minecraft.Client/Chunk.h b/Minecraft.Client/Chunk.h index f7947156..e0ae016e 100644 --- a/Minecraft.Client/Chunk.h +++ b/Minecraft.Client/Chunk.h @@ -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 |
