mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-23 06:56:40 +00:00
Proper record deletion and record parenting
This commit is contained in:
@@ -79,6 +79,17 @@ class GLResourceManager : public ResourceManager<GLResource, GLResourceRecord>
|
||||
return id;
|
||||
}
|
||||
|
||||
using ResourceManager::HasCurrentResource;
|
||||
|
||||
bool HasCurrentResource(GLResource res)
|
||||
{
|
||||
auto it = m_CurrentResourceIds.find(res);
|
||||
if(it != m_CurrentResourceIds.end())
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void UnregisterResource(GLResource res)
|
||||
{
|
||||
auto it = m_CurrentResourceIds.find(res);
|
||||
@@ -106,6 +117,13 @@ class GLResourceManager : public ResourceManager<GLResource, GLResourceRecord>
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
using ResourceManager::HasResourceRecord;
|
||||
|
||||
bool HasResourceRecord(GLResource res)
|
||||
{
|
||||
return ResourceManager::HasResourceRecord(GetID(res));
|
||||
}
|
||||
|
||||
using ResourceManager::GetResourceRecord;
|
||||
|
||||
|
||||
@@ -1946,18 +1946,34 @@ void WrappedOpenGL::glVertexBindingDivisor(GLuint bindingindex, GLuint divisor)
|
||||
|
||||
void WrappedOpenGL::glDeleteBuffers(GLsizei n, const GLuint *buffers)
|
||||
{
|
||||
m_Real.glDeleteBuffers(n, buffers);
|
||||
|
||||
for(GLsizei i=0; i < n; i++)
|
||||
GetResourceManager()->UnregisterResource(BufferRes(GetCtx(), buffers[i]));
|
||||
{
|
||||
GLResource res = BufferRes(GetCtx(), buffers[i]);
|
||||
if(GetResourceManager()->HasCurrentResource(res))
|
||||
{
|
||||
if(GetResourceManager()->HasResourceRecord(res))
|
||||
GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager());
|
||||
GetResourceManager()->UnregisterResource(res);
|
||||
}
|
||||
}
|
||||
|
||||
m_Real.glDeleteBuffers(n, buffers);
|
||||
}
|
||||
|
||||
void WrappedOpenGL::glDeleteVertexArrays(GLsizei n, const GLuint *arrays)
|
||||
{
|
||||
m_Real.glDeleteVertexArrays(n, arrays);
|
||||
|
||||
for(GLsizei i=0; i < n; i++)
|
||||
GetResourceManager()->UnregisterResource(VertexArrayRes(GetCtx(), arrays[i]));
|
||||
{
|
||||
GLResource res = VertexArrayRes(GetCtx(), arrays[i]);
|
||||
if(GetResourceManager()->HasCurrentResource(res))
|
||||
{
|
||||
if(GetResourceManager()->HasResourceRecord(res))
|
||||
GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager());
|
||||
GetResourceManager()->UnregisterResource(res);
|
||||
}
|
||||
}
|
||||
|
||||
m_Real.glDeleteVertexArrays(n, arrays);
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
@@ -117,7 +117,11 @@ void WrappedOpenGL::glNamedFramebufferTextureEXT(GLuint framebuffer, GLenum atta
|
||||
Serialise_glNamedFramebufferTextureEXT(framebuffer, attachment, texture, level);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
@@ -145,9 +149,15 @@ void WrappedOpenGL::glFramebufferTexture(GLenum target, GLenum attachment, GLuin
|
||||
attachment, texture, level);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -193,9 +203,15 @@ void WrappedOpenGL::glNamedFramebufferTexture1DEXT(GLuint framebuffer, GLenum at
|
||||
Serialise_glNamedFramebufferTexture1DEXT(framebuffer, attachment, textarget, texture, level);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,9 +237,15 @@ void WrappedOpenGL::glFramebufferTexture1D(GLenum target, GLenum attachment, GLe
|
||||
attachment, textarget, texture, level);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -269,9 +291,15 @@ void WrappedOpenGL::glNamedFramebufferTexture2DEXT(GLuint framebuffer, GLenum at
|
||||
Serialise_glNamedFramebufferTexture2DEXT(framebuffer, attachment, textarget, texture, level);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -297,9 +325,15 @@ void WrappedOpenGL::glFramebufferTexture2D(GLenum target, GLenum attachment, GLe
|
||||
attachment, textarget, texture, level);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -346,9 +380,15 @@ void WrappedOpenGL::glNamedFramebufferTexture3DEXT(GLuint framebuffer, GLenum at
|
||||
Serialise_glNamedFramebufferTexture3DEXT(framebuffer, attachment, textarget, texture, level, zoffset);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -374,9 +414,15 @@ void WrappedOpenGL::glFramebufferTexture3D(GLenum target, GLenum attachment, GLe
|
||||
attachment, textarget, texture, level, zoffset);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
bool WrappedOpenGL::Serialise_glNamedFramebufferRenderbufferEXT(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
|
||||
@@ -421,9 +467,15 @@ void WrappedOpenGL::glNamedFramebufferRenderbufferEXT(GLuint framebuffer, GLenum
|
||||
Serialise_glNamedFramebufferRenderbufferEXT(framebuffer, attachment, renderbuffertarget, renderbuffer);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(renderbuffer != 0 && GetResourceManager()->HasResourceRecord(RenderbufferRes(GetCtx(), renderbuffer)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(RenderbufferRes(GetCtx(), renderbuffer)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -449,9 +501,15 @@ void WrappedOpenGL::glFramebufferRenderbuffer(GLenum target, GLenum attachment,
|
||||
attachment, renderbuffertarget, renderbuffer);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(renderbuffer != 0 && GetResourceManager()->HasResourceRecord(RenderbufferRes(GetCtx(), renderbuffer)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(RenderbufferRes(GetCtx(), renderbuffer)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -497,9 +555,15 @@ void WrappedOpenGL::glNamedFramebufferTextureLayerEXT(GLuint framebuffer, GLenum
|
||||
Serialise_glNamedFramebufferTextureLayerEXT(framebuffer, attachment, texture, level, layer);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -525,9 +589,15 @@ void WrappedOpenGL::glFramebufferTextureLayer(GLenum target, GLenum attachment,
|
||||
attachment, texture, level, layer);
|
||||
|
||||
if(m_State == WRITING_IDLE)
|
||||
{
|
||||
if(texture != 0 && GetResourceManager()->HasResourceRecord(TextureRes(GetCtx(), texture)))
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(TextureRes(GetCtx(), texture)));
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -754,10 +824,18 @@ void WrappedOpenGL::glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLi
|
||||
|
||||
void WrappedOpenGL::glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
|
||||
{
|
||||
m_Real.glDeleteFramebuffers(n, framebuffers);
|
||||
|
||||
for(GLsizei i=0; i < n; i++)
|
||||
GetResourceManager()->UnregisterResource(FramebufferRes(GetCtx(), framebuffers[i]));
|
||||
{
|
||||
GLResource res = FramebufferRes(GetCtx(), framebuffers[i]);
|
||||
if(GetResourceManager()->HasCurrentResource(res))
|
||||
{
|
||||
if(GetResourceManager()->HasResourceRecord(res))
|
||||
GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager());
|
||||
GetResourceManager()->UnregisterResource(res);
|
||||
}
|
||||
}
|
||||
|
||||
m_Real.glDeleteFramebuffers(n, framebuffers);
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glGenRenderbuffers(GLsizei n, GLuint* renderbuffers)
|
||||
@@ -823,10 +901,18 @@ void WrappedOpenGL::glBindRenderbuffer(GLenum target, GLuint renderbuffer)
|
||||
|
||||
void WrappedOpenGL::glDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
|
||||
{
|
||||
m_Real.glDeleteRenderbuffers(n, renderbuffers);
|
||||
|
||||
for(GLsizei i=0; i < n; i++)
|
||||
GetResourceManager()->UnregisterResource(RenderbufferRes(GetCtx(), renderbuffers[i]));
|
||||
{
|
||||
GLResource res = RenderbufferRes(GetCtx(), renderbuffers[i]);
|
||||
if(GetResourceManager()->HasCurrentResource(res))
|
||||
{
|
||||
if(GetResourceManager()->HasResourceRecord(res))
|
||||
GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager());
|
||||
GetResourceManager()->UnregisterResource(res);
|
||||
}
|
||||
}
|
||||
|
||||
m_Real.glDeleteRenderbuffers(n, renderbuffers);
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
|
||||
|
||||
@@ -149,7 +149,8 @@ void WrappedOpenGL::glDeleteSync(GLsync sync)
|
||||
|
||||
ResourceId id = GetResourceManager()->GetSyncID(sync);
|
||||
|
||||
GetResourceManager()->UnregisterResource(GetResourceManager()->GetCurrentResource(id));
|
||||
if(GetResourceManager()->HasCurrentResource(id))
|
||||
GetResourceManager()->UnregisterResource(GetResourceManager()->GetCurrentResource(id));
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glGenQueries(GLsizei n, GLuint* ids)
|
||||
@@ -281,8 +282,16 @@ void WrappedOpenGL::glQueryCounter(GLuint query, GLenum target)
|
||||
|
||||
void WrappedOpenGL::glDeleteQueries(GLsizei n, const GLuint *ids)
|
||||
{
|
||||
m_Real.glDeleteQueries(n, ids);
|
||||
|
||||
for(GLsizei i=0; i < n; i++)
|
||||
GetResourceManager()->UnregisterResource(QueryRes(GetCtx(), ids[i]));
|
||||
{
|
||||
GLResource res = QueryRes(GetCtx(), ids[i]);
|
||||
if(GetResourceManager()->HasCurrentResource(res))
|
||||
{
|
||||
if(GetResourceManager()->HasResourceRecord(res))
|
||||
GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager());
|
||||
GetResourceManager()->UnregisterResource(res);
|
||||
}
|
||||
}
|
||||
|
||||
m_Real.glDeleteQueries(n, ids);
|
||||
}
|
||||
|
||||
@@ -354,8 +354,16 @@ void WrappedOpenGL::glSamplerParameterIuiv(GLuint sampler, GLenum pname, const G
|
||||
|
||||
void WrappedOpenGL::glDeleteSamplers(GLsizei n, const GLuint *ids)
|
||||
{
|
||||
m_Real.glDeleteSamplers(n, ids);
|
||||
|
||||
for(GLsizei i=0; i < n; i++)
|
||||
GetResourceManager()->UnregisterResource(SamplerRes(GetCtx(), ids[i]));
|
||||
{
|
||||
GLResource res = SamplerRes(GetCtx(), ids[i]);
|
||||
if(GetResourceManager()->HasCurrentResource(res))
|
||||
{
|
||||
if(GetResourceManager()->HasResourceRecord(res))
|
||||
GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager());
|
||||
GetResourceManager()->UnregisterResource(res);
|
||||
}
|
||||
}
|
||||
|
||||
m_Real.glDeleteSamplers(n, ids);
|
||||
}
|
||||
|
||||
@@ -201,7 +201,13 @@ void WrappedOpenGL::glDeleteShader(GLuint shader)
|
||||
{
|
||||
m_Real.glDeleteShader(shader);
|
||||
|
||||
GetResourceManager()->UnregisterResource(ShaderRes(GetCtx(), shader));
|
||||
GLResource res = ShaderRes(GetCtx(), shader);
|
||||
if(GetResourceManager()->HasCurrentResource(res))
|
||||
{
|
||||
if(GetResourceManager()->HasResourceRecord(res))
|
||||
GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager());
|
||||
GetResourceManager()->UnregisterResource(res);
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glAttachShader(GLuint program, GLuint shader)
|
||||
@@ -638,7 +644,13 @@ void WrappedOpenGL::glDeleteProgram(GLuint program)
|
||||
{
|
||||
m_Real.glDeleteProgram(program);
|
||||
|
||||
GetResourceManager()->UnregisterResource(ProgramRes(GetCtx(), program));
|
||||
GLResource res = ProgramRes(GetCtx(), program);
|
||||
if(GetResourceManager()->HasCurrentResource(res))
|
||||
{
|
||||
if(GetResourceManager()->HasResourceRecord(res))
|
||||
GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager());
|
||||
GetResourceManager()->UnregisterResource(res);
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glUseProgram(GLuint program)
|
||||
@@ -825,10 +837,18 @@ void WrappedOpenGL::glBindProgramPipeline(GLuint pipeline)
|
||||
|
||||
void WrappedOpenGL::glDeleteProgramPipelines(GLsizei n, const GLuint *pipelines)
|
||||
{
|
||||
m_Real.glDeleteProgramPipelines(n, pipelines);
|
||||
|
||||
for(GLsizei i=0; i < n; i++)
|
||||
GetResourceManager()->UnregisterResource(ProgramPipeRes(GetCtx(), pipelines[i]));
|
||||
{
|
||||
GLResource res = ProgramPipeRes(GetCtx(), pipelines[i]);
|
||||
if(GetResourceManager()->HasCurrentResource(res))
|
||||
{
|
||||
if(GetResourceManager()->HasResourceRecord(res))
|
||||
GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager());
|
||||
GetResourceManager()->UnregisterResource(res);
|
||||
}
|
||||
}
|
||||
|
||||
m_Real.glDeleteProgramPipelines(n, pipelines);
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
@@ -83,10 +83,18 @@ void WrappedOpenGL::glGenTextures(GLsizei n, GLuint* textures)
|
||||
|
||||
void WrappedOpenGL::glDeleteTextures(GLsizei n, const GLuint *textures)
|
||||
{
|
||||
m_Real.glDeleteTextures(n, textures);
|
||||
|
||||
for(GLsizei i=0; i < n; i++)
|
||||
GetResourceManager()->UnregisterResource(TextureRes(GetCtx(), textures[i]));
|
||||
{
|
||||
GLResource res = TextureRes(GetCtx(), textures[i]);
|
||||
if(GetResourceManager()->HasCurrentResource(res))
|
||||
{
|
||||
if(GetResourceManager()->HasResourceRecord(res))
|
||||
GetResourceManager()->GetResourceRecord(res)->Delete(GetResourceManager());
|
||||
GetResourceManager()->UnregisterResource(res);
|
||||
}
|
||||
}
|
||||
|
||||
m_Real.glDeleteTextures(n, textures);
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glBindTexture(GLenum target, GLuint texture)
|
||||
@@ -2754,6 +2762,7 @@ void WrappedOpenGL::glTextureBufferRangeEXT(GLuint texture, GLenum target, GLenu
|
||||
Serialise_glTextureBufferRangeEXT(texture, target, internalformat, buffer, offset, size);
|
||||
|
||||
record->AddChunk(scope.Get());
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2771,6 +2780,7 @@ void WrappedOpenGL::glTexBufferRange(GLenum target, GLenum internalformat, GLuin
|
||||
target, internalformat, buffer, offset, size);
|
||||
|
||||
record->AddChunk(scope.Get());
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2811,6 +2821,7 @@ void WrappedOpenGL::glTextureBufferEXT(GLuint texture, GLenum target, GLenum int
|
||||
Serialise_glTextureBufferEXT(texture, target, internalformat, buffer);
|
||||
|
||||
record->AddChunk(scope.Get());
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2828,6 +2839,7 @@ void WrappedOpenGL::glTexBuffer(GLenum target, GLenum internalformat, GLuint buf
|
||||
target, internalformat, buffer);
|
||||
|
||||
record->AddChunk(scope.Get());
|
||||
record->AddParent(GetResourceManager()->GetResourceRecord(BufferRes(GetCtx(), buffer)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user