mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-14 05:50:51 +00:00
Serialise out glBindBuffer{Base,Range} and glBindFramebuffer
This commit is contained in:
@@ -132,9 +132,12 @@ enum GLChunkType
|
||||
|
||||
GEN_FRAMEBUFFERS,
|
||||
FRAMEBUFFER_TEX,
|
||||
BIND_FRAMEBUFFER,
|
||||
|
||||
GEN_BUFFER,
|
||||
BIND_BUFFER,
|
||||
BIND_BUFFER_BASE,
|
||||
BIND_BUFFER_RANGE,
|
||||
BUFFERDATA,
|
||||
GEN_VERTEXARRAY,
|
||||
BIND_VERTEXARRAY,
|
||||
|
||||
@@ -182,8 +182,37 @@ void WrappedOpenGL::glPolygonMode(GLenum face, GLenum mode)
|
||||
m_Real.glPolygonMode(face, mode);
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glBindFramebuffer(GLenum target, GLuint framebuffer)
|
||||
{
|
||||
SERIALISE_ELEMENT(GLenum, Target, target);
|
||||
SERIALISE_ELEMENT(ResourceId, Id, GetResourceManager()->GetID(FramebufferRes(framebuffer)));
|
||||
|
||||
if(m_State <= EXECUTING)
|
||||
{
|
||||
if(Id == ResourceId())
|
||||
{
|
||||
m_Real.glBindFramebuffer(Target, m_FakeBB_FBO);
|
||||
}
|
||||
else
|
||||
{
|
||||
GLResource res = GetResourceManager()->GetLiveResource(Id);
|
||||
m_Real.glBindFramebuffer(Target, res.name);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedOpenGL::glBindFramebuffer(GLenum target, GLuint framebuffer)
|
||||
{
|
||||
if(m_State == WRITING_CAPFRAME)
|
||||
{
|
||||
SCOPED_SERIALISE_CONTEXT(BIND_FRAMEBUFFER);
|
||||
Serialise_glBindFramebuffer(target, framebuffer);
|
||||
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
|
||||
if(framebuffer == 0 && (m_State == READING || m_State == EXECUTING))
|
||||
framebuffer = m_FakeBB_FBO;
|
||||
|
||||
|
||||
@@ -1113,21 +1113,59 @@ void WrappedOpenGL::glBufferData(GLenum target, GLsizeiptr size, const void *dat
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
|
||||
{
|
||||
SERIALISE_ELEMENT(GLenum, Target, target);
|
||||
SERIALISE_ELEMENT(uint32_t, Index, index);
|
||||
SERIALISE_ELEMENT(ResourceId, id, m_BufferRecord[BufferIdx(target)]->GetResourceID());
|
||||
|
||||
if(m_State < WRITING)
|
||||
{
|
||||
GLResource res = GetResourceManager()->GetLiveResource(id);
|
||||
m_Real.glBindBufferBase(Target, Index, res.name);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedOpenGL::glBindBufferBase(GLenum target, GLuint index, GLuint buffer)
|
||||
{
|
||||
if(m_State >= WRITING)
|
||||
if(m_State == WRITING_CAPFRAME)
|
||||
{
|
||||
RDCUNIMPLEMENTED();
|
||||
SCOPED_SERIALISE_CONTEXT(BIND_BUFFER_BASE);
|
||||
Serialise_glBindBufferBase(target, index, buffer);
|
||||
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
|
||||
m_Real.glBindBufferBase(target, index, buffer);
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
|
||||
{
|
||||
SERIALISE_ELEMENT(GLenum, Target, target);
|
||||
SERIALISE_ELEMENT(uint32_t, Index, index);
|
||||
SERIALISE_ELEMENT(ResourceId, id, m_BufferRecord[BufferIdx(target)]->GetResourceID());
|
||||
SERIALISE_ELEMENT(uint64_t, Offset, (uint64_t)offset);
|
||||
SERIALISE_ELEMENT(uint64_t, Size, (uint64_t)size);
|
||||
|
||||
if(m_State < WRITING)
|
||||
{
|
||||
GLResource res = GetResourceManager()->GetLiveResource(id);
|
||||
m_Real.glBindBufferRange(Target, Index, res.name, (GLintptr)Offset, (GLsizeiptr)Size);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedOpenGL::glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)
|
||||
{
|
||||
if(m_State >= WRITING)
|
||||
if(m_State == WRITING_CAPFRAME)
|
||||
{
|
||||
RDCUNIMPLEMENTED();
|
||||
SCOPED_SERIALISE_CONTEXT(BIND_BUFFER_RANGE);
|
||||
Serialise_glBindBufferRange(target, index, buffer, offset, size);
|
||||
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
|
||||
m_Real.glBindBufferRange(target, index, buffer, offset, size);
|
||||
@@ -1163,7 +1201,7 @@ bool WrappedOpenGL::Serialise_glVertexAttribPointer(GLuint index, GLint size, GL
|
||||
SERIALISE_ELEMENT(uint64_t, Offset, (uint64_t)pointer);
|
||||
SERIALISE_ELEMENT(ResourceId, id, m_VertexArrayRecord ? m_VertexArrayRecord->GetResourceID() : ResourceId());
|
||||
|
||||
if(m_State == READING)
|
||||
if(m_State < WRITING)
|
||||
{
|
||||
if(id != ResourceId())
|
||||
{
|
||||
@@ -1200,7 +1238,7 @@ bool WrappedOpenGL::Serialise_glEnableVertexAttribArray(GLuint index)
|
||||
{
|
||||
SERIALISE_ELEMENT(GLuint, Index, index);
|
||||
|
||||
if(m_State == READING)
|
||||
if(m_State < WRITING)
|
||||
{
|
||||
m_Real.glEnableVertexAttribArray(Index);
|
||||
}
|
||||
|
||||
@@ -89,9 +89,12 @@ const char *GLChunkNames[] =
|
||||
|
||||
"glGenFramebuffers",
|
||||
"glFramebufferTexture",
|
||||
"glBindFramebuffer",
|
||||
|
||||
"glGenBuffers",
|
||||
"glBindBuffer",
|
||||
"glBindBufferBase",
|
||||
"glBindBufferRange",
|
||||
"glBufferData",
|
||||
"glGenVertexArrays",
|
||||
"glBindVertexArray",
|
||||
@@ -843,6 +846,9 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
|
||||
case GEN_TEXTURE:
|
||||
Serialise_glGenTextures(0, NULL);
|
||||
break;
|
||||
case ACTIVE_TEXTURE:
|
||||
Serialise_glActiveTexture(eGL_UNKNOWN_ENUM);
|
||||
break;
|
||||
case BIND_TEXTURE:
|
||||
Serialise_glBindTexture(eGL_UNKNOWN_ENUM, 0);
|
||||
break;
|
||||
@@ -939,6 +945,10 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
|
||||
break;
|
||||
//
|
||||
|
||||
case BIND_FRAMEBUFFER:
|
||||
Serialise_glBindFramebuffer(eGL_UNKNOWN_ENUM, 0);
|
||||
break;
|
||||
|
||||
case CLEAR:
|
||||
Serialise_glClear(0);
|
||||
break;
|
||||
@@ -979,6 +989,12 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
|
||||
case BIND_BUFFER:
|
||||
Serialise_glBindBuffer(eGL_UNKNOWN_ENUM, 0);
|
||||
break;
|
||||
case BIND_BUFFER_BASE:
|
||||
Serialise_glBindBufferBase(eGL_UNKNOWN_ENUM, 0, 0);
|
||||
break;
|
||||
case BIND_BUFFER_RANGE:
|
||||
Serialise_glBindBufferRange(eGL_UNKNOWN_ENUM, 0, 0, 0, 0);
|
||||
break;
|
||||
case BUFFERDATA:
|
||||
Serialise_glBufferData(eGL_UNKNOWN_ENUM, 0, NULL, eGL_UNKNOWN_ENUM);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user