ResourceListener no longer add a resource reference
Former-commit-id: b249d472b4140b85e4e286552323fde6b9b66bd7
This commit is contained in:
parent
588077396c
commit
5b730f1d4c
|
|
@ -49,7 +49,7 @@ class NAZARA_API NzResource
|
||||||
|
|
||||||
bool IsPersistent() const;
|
bool IsPersistent() const;
|
||||||
|
|
||||||
bool RemoveResourceListener(NzResourceListener* listener) const;
|
void RemoveResourceListener(NzResourceListener* listener) const;
|
||||||
bool RemoveResourceReference() const;
|
bool RemoveResourceReference() const;
|
||||||
|
|
||||||
bool SetPersistent(bool persistent = true, bool checkReferenceCount = false);
|
bool SetPersistent(bool persistent = true, bool checkReferenceCount = false);
|
||||||
|
|
|
||||||
|
|
@ -44,8 +44,8 @@ class NAZARA_API NzStaticMesh final : public NzSubMesh, NzResourceListener
|
||||||
void OnResourceReleased(const NzResource* resource, int index) override;
|
void OnResourceReleased(const NzResource* resource, int index) override;
|
||||||
|
|
||||||
NzBoxf m_aabb;
|
NzBoxf m_aabb;
|
||||||
const NzIndexBuffer* m_indexBuffer = nullptr;
|
NzIndexBufferConstRef m_indexBuffer = nullptr;
|
||||||
NzVertexBuffer* m_vertexBuffer = nullptr;
|
NzVertexBufferRef m_vertexBuffer = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NAZARA_STATICMESH_HPP
|
#endif // NAZARA_STATICMESH_HPP
|
||||||
|
|
|
||||||
|
|
@ -33,12 +33,7 @@ void NzResource::AddResourceListener(NzResourceListener* listener, int index) co
|
||||||
NazaraLock(m_mutex)
|
NazaraLock(m_mutex)
|
||||||
|
|
||||||
if (m_resourceListeners.insert(NzResourceEntry(listener, index)).second)
|
if (m_resourceListeners.insert(NzResourceEntry(listener, index)).second)
|
||||||
{
|
|
||||||
m_resourceListenerUpdated = false;
|
m_resourceListenerUpdated = false;
|
||||||
|
|
||||||
// AddResourceReference()
|
|
||||||
m_resourceReferenceCount++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NzResource::AddResourceReference() const
|
void NzResource::AddResourceReference() const
|
||||||
|
|
@ -56,16 +51,12 @@ bool NzResource::IsPersistent() const
|
||||||
return m_resourcePersistent;
|
return m_resourcePersistent;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NzResource::RemoveResourceListener(NzResourceListener* listener) const
|
void NzResource::RemoveResourceListener(NzResourceListener* listener) const
|
||||||
{
|
{
|
||||||
NazaraMutexLock(m_mutex);
|
NazaraMutexLock(m_mutex);
|
||||||
|
|
||||||
if (m_resourceListeners.erase(listener) != 0)
|
if (m_resourceListeners.erase(listener) != 0)
|
||||||
m_resourceListenerUpdated = false;
|
m_resourceListenerUpdated = false;
|
||||||
else
|
|
||||||
NazaraError(NzString::Pointer(listener) + " is not a listener of " + NzString::Pointer(this));
|
|
||||||
|
|
||||||
return RemoveResourceReference();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NzResource::RemoveResourceReference() const
|
bool NzResource::RemoveResourceReference() const
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,7 @@ void NzMesh::AddSubMesh(NzSubMesh* subMesh)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
subMesh->AddResourceListener(this, m_impl->subMeshes.size());
|
subMesh->AddResourceListener(this, m_impl->subMeshes.size());
|
||||||
|
subMesh->AddResourceReference();
|
||||||
|
|
||||||
m_impl->aabbUpdated = false; // On invalide l'AABB
|
m_impl->aabbUpdated = false; // On invalide l'AABB
|
||||||
m_impl->subMeshes.push_back(subMesh);
|
m_impl->subMeshes.push_back(subMesh);
|
||||||
|
|
@ -135,6 +136,7 @@ void NzMesh::AddSubMesh(const NzString& identifier, NzSubMesh* subMesh)
|
||||||
int index = m_impl->subMeshes.size();
|
int index = m_impl->subMeshes.size();
|
||||||
|
|
||||||
subMesh->AddResourceListener(this, index);
|
subMesh->AddResourceListener(this, index);
|
||||||
|
subMesh->AddResourceReference();
|
||||||
|
|
||||||
m_impl->aabbUpdated = false; // On invalide l'AABB
|
m_impl->aabbUpdated = false; // On invalide l'AABB
|
||||||
m_impl->subMeshes.push_back(subMesh);
|
m_impl->subMeshes.push_back(subMesh);
|
||||||
|
|
@ -351,7 +353,10 @@ void NzMesh::Destroy()
|
||||||
NotifyDestroy();
|
NotifyDestroy();
|
||||||
|
|
||||||
for (NzSubMesh* subMesh : m_impl->subMeshes)
|
for (NzSubMesh* subMesh : m_impl->subMeshes)
|
||||||
|
{
|
||||||
subMesh->RemoveResourceListener(this);
|
subMesh->RemoveResourceListener(this);
|
||||||
|
subMesh->RemoveResourceReference();
|
||||||
|
}
|
||||||
|
|
||||||
delete m_impl;
|
delete m_impl;
|
||||||
m_impl = nullptr;
|
m_impl = nullptr;
|
||||||
|
|
@ -838,10 +843,13 @@ void NzMesh::RemoveSubMesh(const NzString& identifier)
|
||||||
|
|
||||||
// On déplace l'itérateur du début d'une distance de x
|
// On déplace l'itérateur du début d'une distance de x
|
||||||
auto it2 = m_impl->subMeshes.begin();
|
auto it2 = m_impl->subMeshes.begin();
|
||||||
std::advance(it, index);
|
std::advance(it2, index);
|
||||||
|
|
||||||
// On libère la ressource
|
// On libère la ressource
|
||||||
(*it2)->RemoveResourceListener(this);
|
NzSubMesh* subMesh = *it2;
|
||||||
|
subMesh->RemoveResourceListener(this);
|
||||||
|
subMesh->RemoveResourceReference();
|
||||||
|
|
||||||
m_impl->subMeshes.erase(it2);
|
m_impl->subMeshes.erase(it2);
|
||||||
|
|
||||||
m_impl->aabbUpdated = false; // On invalide l'AABB
|
m_impl->aabbUpdated = false; // On invalide l'AABB
|
||||||
|
|
@ -868,7 +876,10 @@ void NzMesh::RemoveSubMesh(unsigned int index)
|
||||||
std::advance(it, index);
|
std::advance(it, index);
|
||||||
|
|
||||||
// On libère la ressource
|
// On libère la ressource
|
||||||
(*it)->RemoveResourceListener(this);
|
NzSubMesh* subMesh = *it;
|
||||||
|
subMesh->RemoveResourceListener(this);
|
||||||
|
subMesh->RemoveResourceReference();
|
||||||
|
|
||||||
m_impl->subMeshes.erase(it);
|
m_impl->subMeshes.erase(it);
|
||||||
|
|
||||||
m_impl->aabbUpdated = false; // On invalide l'AABB
|
m_impl->aabbUpdated = false; // On invalide l'AABB
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue