gl: Delete context owned resources from resource manager.

This fixes tracking problems when a context id is reused.
This commit is contained in:
David McFarland
2018-01-03 11:11:17 +01:00
committed by Baldur Karlsson
parent 089b9c1ece
commit e63f696ddb
2 changed files with 22 additions and 0 deletions
+2
View File
@@ -821,6 +821,8 @@ void WrappedOpenGL::DeleteContext(void *contextHandle)
RenderDoc::Inst().RemoveDeviceFrameCapturer(ctxdata.ctx);
GetResourceManager()->DeleteContext(contextHandle);
if(ctxdata.built && ctxdata.ready)
{
if(ctxdata.Program)
+20
View File
@@ -92,6 +92,26 @@ public:
ResourceManager::Shutdown();
}
void DeleteContext(void *context)
{
size_t count = 0;
for(auto it = m_CurrentResourceIds.begin(); it != m_CurrentResourceIds.end(); it++)
{
if(it->first.Context == context)
{
++count;
ResourceId res = it->second;
MarkCleanResource(res);
if(HasResourceRecord(res))
GetResourceRecord(res)->Delete(this);
ReleaseCurrentResource(it->second);
it = m_CurrentResourceIds.erase(it);
}
}
RDCDEBUG("Removed %zu/%zu resources belonging to context %p", count,
m_CurrentResourceIds.size(), context);
}
inline void RemoveResourceRecord(ResourceId id)
{
for(auto it = m_GLResourceRecords.begin(); it != m_GLResourceRecords.end(); it++)