diff --git a/renderdoc/driver/gl/gl_driver.cpp b/renderdoc/driver/gl/gl_driver.cpp index bb09f3aa4..426c55c46 100644 --- a/renderdoc/driver/gl/gl_driver.cpp +++ b/renderdoc/driver/gl/gl_driver.cpp @@ -813,7 +813,7 @@ void WrappedOpenGL::AttemptCapture() bool WrappedOpenGL::Serialise_BeginCaptureFrame(bool applyInitialState) { - GLRenderState state(&m_Real, m_pSerialiser); + GLRenderState state(&m_Real, m_pSerialiser, m_State); if(m_State >= WRITING) { diff --git a/renderdoc/driver/gl/gl_renderstate.cpp b/renderdoc/driver/gl/gl_renderstate.cpp index 1f06e9a35..7b51d5cfb 100644 --- a/renderdoc/driver/gl/gl_renderstate.cpp +++ b/renderdoc/driver/gl/gl_renderstate.cpp @@ -25,9 +25,10 @@ #include "gl_renderstate.h" #include "gl_driver.h" -GLRenderState::GLRenderState(const GLHookSet *funcs, Serialiser *ser) +GLRenderState::GLRenderState(const GLHookSet *funcs, Serialiser *ser, LogState state) : m_Real(funcs) , m_pSerialiser(ser) + , m_State(state) { Clear(); } @@ -352,17 +353,20 @@ void GLRenderState::ApplyState() numDBs++; DBs[i] = DrawBuffers[i]; - // since we are faking the default framebuffer with our own - // to see the results, replace back/front/left/right with color attachment 0 - if(DBs[i] == eGL_BACK_LEFT || DBs[i] == eGL_BACK_RIGHT || - DBs[i] == eGL_FRONT_LEFT || DBs[i] == eGL_FRONT_RIGHT) - DBs[i] = eGL_COLOR_ATTACHMENT0; - - // These aren't valid for glDrawBuffers but can be returned when we call glGet, - // assume they mean left implicitly - if(DBs[i] == eGL_BACK || - DBs[i] == eGL_FRONT) - DBs[i] = eGL_COLOR_ATTACHMENT0; + if(m_State < WRITING) + { + // since we are faking the default framebuffer with our own + // to see the results, replace back/front/left/right with color attachment 0 + if(DBs[i] == eGL_BACK_LEFT || DBs[i] == eGL_BACK_RIGHT || + DBs[i] == eGL_FRONT_LEFT || DBs[i] == eGL_FRONT_RIGHT) + DBs[i] = eGL_COLOR_ATTACHMENT0; + + // These aren't valid for glDrawBuffers but can be returned when we call glGet, + // assume they mean left implicitly + if(DBs[i] == eGL_BACK || + DBs[i] == eGL_FRONT) + DBs[i] = eGL_COLOR_ATTACHMENT0; + } } else { diff --git a/renderdoc/driver/gl/gl_renderstate.h b/renderdoc/driver/gl/gl_renderstate.h index 616737ea6..0046adef4 100644 --- a/renderdoc/driver/gl/gl_renderstate.h +++ b/renderdoc/driver/gl/gl_renderstate.h @@ -31,7 +31,7 @@ struct GLRenderState { - GLRenderState(const GLHookSet *funcs, Serialiser *ser); + GLRenderState(const GLHookSet *funcs, Serialiser *ser, LogState state); ~GLRenderState(); void FetchState(); @@ -205,5 +205,6 @@ struct GLRenderState void Serialise(LogState state, void *ctx, WrappedOpenGL *gl); private: Serialiser *m_pSerialiser; + LogState m_State; const GLHookSet *m_Real; }; diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index f450ed1fd..39910ad6c 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -683,7 +683,7 @@ void GLReplay::SavePipelineState() WrappedOpenGL &gl = *m_pDriver; GLResourceManager *rm = m_pDriver->GetResourceManager(); - GLRenderState rs(&gl.GetHookset(), NULL); + GLRenderState rs(&gl.GetHookset(), NULL, READING); rs.FetchState(); MakeCurrentReplayContext(&m_ReplayCtx);