make tile unload safer

This commit is contained in:
T1ti
2024-08-17 05:30:31 +02:00
parent 9e958e8404
commit 01dd6ec74a
4 changed files with 13 additions and 5 deletions

View File

@@ -78,7 +78,7 @@ void Noggit::Action::undo(bool redo)
if (pair.second.tmp_edit_values)
texture_set->getTempAlphamaps() = std::make_unique<tmp_edit_alpha_values>(*pair.second.tmp_edit_values);
else
texture_set->getTempAlphamaps() = nullptr;
texture_set->getTempAlphamaps().reset();
std::memcpy(texture_set->getMCLYEntries(), &pair.second.layers_info, sizeof(layer_info) * 4);
texture_set->setNTextures(pair.second.n_textures);

View File

@@ -74,6 +74,9 @@ MapTile::MapTile( int pX
MapTile::~MapTile()
{
{
std::lock_guard<std::mutex> const lock(_mutex);
for (auto& pair : object_instances)
{
for (auto& instance : pair.second)
@@ -81,6 +84,7 @@ MapTile::~MapTile()
instance->derefTile(this);
}
}
}
_world->remove_models_if_needed(uids);
}

View File

@@ -15,6 +15,8 @@ SceneObject::SceneObject(SceneObjectTypes type, Noggit::NoggitRenderContext cont
, _context(context)
, pos(0.f, 0.f, 0.f)
, dir(0.f, 0.f, 0.f)
, uid(0)
, frame(0)
{
// min and max initialized to their opposites
extents[0] = glm::vec3(std::numeric_limits<float>::max());
@@ -86,6 +88,7 @@ void SceneObject::normalizeDirection()
void SceneObject::refTile(MapTile* tile)
{
assert(tile);
auto it = std::find(_tiles.begin(), _tiles.end(), tile);
if (it == _tiles.end())
_tiles.push_back(tile);
@@ -93,6 +96,7 @@ void SceneObject::refTile(MapTile* tile)
void SceneObject::derefTile(MapTile* tile)
{
assert(tile);
auto it = std::find(_tiles.begin(), _tiles.end(), tile);
if (it != _tiles.end())
_tiles.erase(it);

View File

@@ -2039,7 +2039,7 @@ void World::remove_models_if_needed(std::vector<uint32_t> const& uids)
/*
if (uids.size())
{
update_models_by_filename();
need_model_updates = true;
}*/
}