From 6f2a9b6cc31799981df2cf1d7f2a4dd916fa64d1 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 22 Nov 2017 15:36:01 +0000 Subject: [PATCH] Render thumbnails after main viewport is drawn. * This doesn't make any difference really locally, but when using a remote host for replay, it means the main viewport will update before the thumbnails wait for those textures to transfer. --- renderdoc/replay/replay_output.cpp | 52 ++++++++++++++++-------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/renderdoc/replay/replay_output.cpp b/renderdoc/replay/replay_output.cpp index c4693986e..1c3c99162 100644 --- a/renderdoc/replay/replay_output.cpp +++ b/renderdoc/replay/replay_output.cpp @@ -572,10 +572,36 @@ void ReplayOutput::Display() m_MainOutput.dirty = true; } + if(m_pDevice->CheckResizeOutputWindow(m_PixelContext.outputID)) + m_MainOutput.dirty = true; + for(size_t i = 0; i < m_Thumbnails.size(); i++) if(m_pDevice->CheckResizeOutputWindow(m_Thumbnails[i].outputID)) m_Thumbnails[i].dirty = true; + if(m_MainOutput.dirty) + { + m_MainOutput.dirty = false; + + switch(m_Type) + { + case ReplayOutputType::Mesh: DisplayMesh(); break; + case ReplayOutputType::Texture: DisplayTex(); break; + default: RDCERR("Unexpected display type! %d", m_Type); break; + } + + m_pDevice->FlipOutputWindow(m_MainOutput.outputID); + + DisplayContext(); + } + else + { + m_pDevice->BindOutputWindow(m_MainOutput.outputID, false); + m_pDevice->FlipOutputWindow(m_MainOutput.outputID); + m_pDevice->BindOutputWindow(m_PixelContext.outputID, false); + m_pDevice->FlipOutputWindow(m_PixelContext.outputID); + } + for(size_t i = 0; i < m_Thumbnails.size(); i++) { if(!m_Thumbnails[i].dirty) @@ -584,6 +610,7 @@ void ReplayOutput::Display() m_pDevice->FlipOutputWindow(m_Thumbnails[i].outputID); continue; } + if(!m_pDevice->IsOutputWindowVisible(m_Thumbnails[i].outputID)) continue; @@ -642,31 +669,6 @@ void ReplayOutput::Display() m_Thumbnails[i].dirty = false; } - - if(m_pDevice->CheckResizeOutputWindow(m_PixelContext.outputID)) - m_MainOutput.dirty = true; - - if(!m_MainOutput.dirty) - { - m_pDevice->BindOutputWindow(m_MainOutput.outputID, false); - m_pDevice->FlipOutputWindow(m_MainOutput.outputID); - m_pDevice->BindOutputWindow(m_PixelContext.outputID, false); - m_pDevice->FlipOutputWindow(m_PixelContext.outputID); - return; - } - - m_MainOutput.dirty = false; - - switch(m_Type) - { - case ReplayOutputType::Mesh: DisplayMesh(); break; - case ReplayOutputType::Texture: DisplayTex(); break; - default: RDCERR("Unexpected display type! %d", m_Type); break; - } - - m_pDevice->FlipOutputWindow(m_MainOutput.outputID); - - DisplayContext(); } void ReplayOutput::DisplayTex()