From 7eca17b28a2c1a625a1b9246dcd5993eb98c27fb Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 7 Nov 2016 14:51:24 +0100 Subject: [PATCH] Check if we're on the replay context during replay for backbuffer state --- renderdoc/driver/gl/gl_renderstate.cpp | 21 +++++++++++++-------- renderdoc/driver/gl/gl_replay.h | 1 + 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index 4eec81709..d573c5c3e 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -1128,16 +1128,21 @@ void GLRenderState::ApplyState(void *ctx, WrappedOpenGL *gl) } } - // apply drawbuffers/readbuffer to default framebuffer - m_Real->glBindFramebuffer(eGL_READ_FRAMEBUFFER, gl->GetFakeBBFBO()); - m_Real->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, gl->GetFakeBBFBO()); - m_Real->glDrawBuffers(numDBs, DBs); + // this will always return true during capture, but on replay we only do + // this work if we're on the replay context + if(gl->GetReplay()->IsReplayContext(ctx)) + { + // apply drawbuffers/readbuffer to default framebuffer + m_Real->glBindFramebuffer(eGL_READ_FRAMEBUFFER, gl->GetFakeBBFBO()); + m_Real->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, gl->GetFakeBBFBO()); + m_Real->glDrawBuffers(numDBs, DBs); - // see above for reasoning for this - m_Real->glReadBuffer(eGL_COLOR_ATTACHMENT0); + // see above for reasoning for this + m_Real->glReadBuffer(eGL_COLOR_ATTACHMENT0); - m_Real->glBindFramebuffer(eGL_READ_FRAMEBUFFER, ReadFBO); - m_Real->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, DrawFBO); + m_Real->glBindFramebuffer(eGL_READ_FRAMEBUFFER, ReadFBO); + m_Real->glBindFramebuffer(eGL_DRAW_FRAMEBUFFER, DrawFBO); + } m_Real->glHint(eGL_FRAGMENT_SHADER_DERIVATIVE_HINT, Hints.Derivatives); m_Real->glHint(eGL_LINE_SMOOTH_HINT, Hints.LineSmooth); diff --git a/renderdoc/driver/gl/gl_replay.h b/renderdoc/driver/gl/gl_replay.h index 7f20489df..27236deb1 100644 --- a/renderdoc/driver/gl/gl_replay.h +++ b/renderdoc/driver/gl/gl_replay.h @@ -224,6 +224,7 @@ public: void SetReplayData(GLWindowingData data); + bool IsReplayContext(void *ctx) { return m_ReplayCtx.ctx == NULL || ctx == m_ReplayCtx.ctx; } private: void FillCBufferValue(WrappedOpenGL &gl, GLuint prog, bool bufferBacked, bool rowMajor, uint32_t offs, uint32_t matStride, const vector &data,