Serialise out glBindBuffer{Base,Range} and glBindFramebuffer

This commit is contained in:
baldurk
2014-05-25 18:17:00 +01:00
parent 5d7f296deb
commit 459c3b5aa3
4 changed files with 92 additions and 6 deletions
+3
View File
@@ -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,
+29
View File
@@ -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;
+44 -6
View File
@@ -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);
}
+16
View File
@@ -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;