When reading the frame don't fudge the current state

* e.g. when binding a buffer we only want to protect the current state (so
  as not to mess anything up like VAOs) before we're reading the frame.
This commit is contained in:
baldurk
2014-12-17 18:29:55 +00:00
parent 10926066bc
commit c1c97e291b
3 changed files with 20 additions and 19 deletions
+3 -2
View File
@@ -411,8 +411,8 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
m_DrawcallStack.push_back(&m_ParentDrawcall);
m_CurEventID = 1;
m_CurDrawcallID = 1;
m_CurEventID = 0;
m_CurDrawcallID = 0;
m_FirstEventID = 0;
m_LastEventID = ~0U;
@@ -2528,6 +2528,7 @@ void WrappedOpenGL::ContextReplayLog(LogState readType, uint32_t startEventID, u
else if(m_State == READING)
{
m_CurEventID = 1;
m_CurDrawcallID = 1;
m_FirstEventID = 0;
m_LastEventID = ~0U;
}
@@ -104,7 +104,7 @@ bool WrappedOpenGL::Serialise_glBindBuffer(GLenum target, GLuint buffer)
// if we're just reading, make sure not to trample state (e.g. element array buffer
// binding in a VAO), since this is just a bind-to-create chunk.
GLuint prevbuf = 0;
if(m_State == READING)
if(m_State == READING && m_CurEventID == 0)
m_Real.glGetIntegerv(BufferBinding(Target), (GLint *)&prevbuf);
GLResource res = GetResourceManager()->GetLiveResource(Id);
@@ -112,7 +112,7 @@ bool WrappedOpenGL::Serialise_glBindBuffer(GLenum target, GLuint buffer)
m_Buffers[GetResourceManager()->GetLiveID(Id)].curType = Target;
if(m_State == READING)
if(m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(Target, prevbuf);
}
}
@@ -3006,7 +3006,7 @@ bool WrappedOpenGL::Serialise_glBindVertexBuffers(GLuint first, GLsizei count, c
if(m_State <= EXECUTING)
{
if(m_State == READING)
if(m_State == READING && m_CurEventID == 0)
{
if(vid != ResourceId())
{
@@ -3622,12 +3622,12 @@ bool WrappedOpenGL::Serialise_glTextureSubImage1DEXT(GLuint texture, GLenum targ
if(m_State <= EXECUTING)
{
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0);
m_Real.glTextureSubImage1DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, Width, Format, Type, buf ? buf : (const void *)bufoffs);
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf);
SAFE_DELETE_ARRAY(buf);
@@ -3809,12 +3809,12 @@ bool WrappedOpenGL::Serialise_glTextureSubImage2DEXT(GLuint texture, GLenum targ
if(m_State <= EXECUTING)
{
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0);
m_Real.glTextureSubImage2DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, Width, Height, Format, Type, buf ? buf : (const void *)bufoffs);
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf);
SAFE_DELETE_ARRAY(buf);
@@ -3998,12 +3998,12 @@ bool WrappedOpenGL::Serialise_glTextureSubImage3DEXT(GLuint texture, GLenum targ
if(m_State <= EXECUTING)
{
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0);
m_Real.glTextureSubImage3DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, zoff, Width, Height, Depth, Format, Type, buf ? buf : (const void *)bufoffs);
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf);
SAFE_DELETE_ARRAY(buf);
@@ -4172,12 +4172,12 @@ bool WrappedOpenGL::Serialise_glCompressedTextureSubImage1DEXT(GLuint texture, G
if(m_State <= EXECUTING)
{
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0);
m_Real.glCompressedTextureSubImage1DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, Width, fmt, byteSize, buf ? buf : (const void *)bufoffs);
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf);
SAFE_DELETE_ARRAY(buf);
@@ -4348,12 +4348,12 @@ bool WrappedOpenGL::Serialise_glCompressedTextureSubImage2DEXT(GLuint texture, G
if(m_State <= EXECUTING)
{
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0);
m_Real.glCompressedTextureSubImage2DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, Width, Height, fmt, byteSize, buf ? buf : (const void *)bufoffs);
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf);
SAFE_DELETE_ARRAY(buf);
@@ -4526,12 +4526,12 @@ bool WrappedOpenGL::Serialise_glCompressedTextureSubImage3DEXT(GLuint texture, G
if(m_State <= EXECUTING)
{
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, 0);
m_Real.glCompressedTextureSubImage3DEXT(GetResourceManager()->GetLiveResource(id).name, Target, Level, xoff, yoff, zoff, Width, Height, Depth, fmt, byteSize, buf ? buf : (const void *)bufoffs);
if(!UnpackBufBound && m_State == READING)
if(!UnpackBufBound && m_State == READING && m_CurEventID == 0)
m_Real.glBindBuffer(eGL_PIXEL_UNPACK_BUFFER, unpackbuf);
SAFE_DELETE_ARRAY(buf);
@@ -4695,7 +4695,7 @@ bool WrappedOpenGL::Serialise_glTextureBufferRangeEXT(GLuint texture, GLenum tar
if(m_State < WRITING)
{
if(m_State == READING)
if(m_State == READING && m_CurEventID == 0)
{
ResourceId liveId = GetResourceManager()->GetLiveID(texid);
m_Textures[liveId].width = uint32_t(Size)/uint32_t(GetByteSize(1, 1, 1, GetBaseFormat(fmt), GetDataType(fmt), 1));
@@ -4774,7 +4774,7 @@ bool WrappedOpenGL::Serialise_glTextureBufferEXT(GLuint texture, GLenum target,
{
buffer = GetResourceManager()->GetLiveResource(bufid).name;
if(m_State == READING)
if(m_State == READING && m_CurEventID == 0)
{
ResourceId liveId = GetResourceManager()->GetLiveID(texid);
uint32_t Size = 1;