make tile unload safer
This commit is contained in:
@@ -78,7 +78,7 @@ void Noggit::Action::undo(bool redo)
|
|||||||
if (pair.second.tmp_edit_values)
|
if (pair.second.tmp_edit_values)
|
||||||
texture_set->getTempAlphamaps() = std::make_unique<tmp_edit_alpha_values>(*pair.second.tmp_edit_values);
|
texture_set->getTempAlphamaps() = std::make_unique<tmp_edit_alpha_values>(*pair.second.tmp_edit_values);
|
||||||
else
|
else
|
||||||
texture_set->getTempAlphamaps() = nullptr;
|
texture_set->getTempAlphamaps().reset();
|
||||||
|
|
||||||
std::memcpy(texture_set->getMCLYEntries(), &pair.second.layers_info, sizeof(layer_info) * 4);
|
std::memcpy(texture_set->getMCLYEntries(), &pair.second.layers_info, sizeof(layer_info) * 4);
|
||||||
texture_set->setNTextures(pair.second.n_textures);
|
texture_set->setNTextures(pair.second.n_textures);
|
||||||
|
|||||||
@@ -74,11 +74,15 @@ MapTile::MapTile( int pX
|
|||||||
|
|
||||||
MapTile::~MapTile()
|
MapTile::~MapTile()
|
||||||
{
|
{
|
||||||
for (auto& pair : object_instances)
|
|
||||||
{
|
{
|
||||||
for (auto& instance : pair.second)
|
std::lock_guard<std::mutex> const lock(_mutex);
|
||||||
|
|
||||||
|
for (auto& pair : object_instances)
|
||||||
{
|
{
|
||||||
instance->derefTile(this);
|
for (auto& instance : pair.second)
|
||||||
|
{
|
||||||
|
instance->derefTile(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ SceneObject::SceneObject(SceneObjectTypes type, Noggit::NoggitRenderContext cont
|
|||||||
, _context(context)
|
, _context(context)
|
||||||
, pos(0.f, 0.f, 0.f)
|
, pos(0.f, 0.f, 0.f)
|
||||||
, dir(0.f, 0.f, 0.f)
|
, dir(0.f, 0.f, 0.f)
|
||||||
|
, uid(0)
|
||||||
|
, frame(0)
|
||||||
{
|
{
|
||||||
// min and max initialized to their opposites
|
// min and max initialized to their opposites
|
||||||
extents[0] = glm::vec3(std::numeric_limits<float>::max());
|
extents[0] = glm::vec3(std::numeric_limits<float>::max());
|
||||||
@@ -86,6 +88,7 @@ void SceneObject::normalizeDirection()
|
|||||||
|
|
||||||
void SceneObject::refTile(MapTile* tile)
|
void SceneObject::refTile(MapTile* tile)
|
||||||
{
|
{
|
||||||
|
assert(tile);
|
||||||
auto it = std::find(_tiles.begin(), _tiles.end(), tile);
|
auto it = std::find(_tiles.begin(), _tiles.end(), tile);
|
||||||
if (it == _tiles.end())
|
if (it == _tiles.end())
|
||||||
_tiles.push_back(tile);
|
_tiles.push_back(tile);
|
||||||
@@ -93,6 +96,7 @@ void SceneObject::refTile(MapTile* tile)
|
|||||||
|
|
||||||
void SceneObject::derefTile(MapTile* tile)
|
void SceneObject::derefTile(MapTile* tile)
|
||||||
{
|
{
|
||||||
|
assert(tile);
|
||||||
auto it = std::find(_tiles.begin(), _tiles.end(), tile);
|
auto it = std::find(_tiles.begin(), _tiles.end(), tile);
|
||||||
if (it != _tiles.end())
|
if (it != _tiles.end())
|
||||||
_tiles.erase(it);
|
_tiles.erase(it);
|
||||||
|
|||||||
@@ -2039,7 +2039,7 @@ void World::remove_models_if_needed(std::vector<uint32_t> const& uids)
|
|||||||
/*
|
/*
|
||||||
if (uids.size())
|
if (uids.size())
|
||||||
{
|
{
|
||||||
update_models_by_filename();
|
need_model_updates = true;
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user