Forcibly refresh UI state after editing a shader or removing an edit

This commit is contained in:
baldurk
2016-02-21 16:10:46 +01:00
parent c35531c65f
commit 1a05f4fc4a
8 changed files with 31 additions and 17 deletions
+2 -2
View File
@@ -177,7 +177,7 @@ struct IReplayRenderer
virtual bool InitResolver() = 0;
virtual bool SetContextFilter(ResourceId id, uint32_t firstDefEv, uint32_t lastDefEv) = 0;
virtual bool SetFrameEvent(uint32_t frameID, uint32_t eventID) = 0;
virtual bool SetFrameEvent(uint32_t frameID, uint32_t eventID, bool force) = 0;
virtual bool GetD3D11PipelineState(D3D11PipelineState *state) = 0;
virtual bool GetGLPipelineState(GLPipelineState *state) = 0;
virtual bool GetVulkanPipelineState(VulkanPipelineState *state) = 0;
@@ -244,7 +244,7 @@ extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_HasCallstacks(Replay
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_InitResolver(ReplayRenderer *rend);
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_SetContextFilter(ReplayRenderer *rend, ResourceId id, uint32_t firstDefEv, uint32_t lastDefEv);
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_SetFrameEvent(ReplayRenderer *rend, uint32_t frameID, uint32_t eventID);
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_SetFrameEvent(ReplayRenderer *rend, uint32_t frameID, uint32_t eventID, bool32 force);
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetD3D11PipelineState(ReplayRenderer *rend, D3D11PipelineState *state);
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetGLPipelineState(ReplayRenderer *rend, GLPipelineState *state);
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetVulkanPipelineState(ReplayRenderer *rend, VulkanPipelineState *state);
+2 -7
View File
@@ -186,11 +186,6 @@ bool ReplayRenderer::SetContextFilter(ResourceId id, uint32_t firstDefEv, uint32
return true;
}
bool ReplayRenderer::SetFrameEvent(uint32_t frameID, uint32_t eventID)
{
return SetFrameEvent(frameID, eventID, false);
}
bool ReplayRenderer::SetFrameEvent(uint32_t frameID, uint32_t eventID, bool force)
{
if(m_FrameID != frameID || eventID != m_EventID || force)
@@ -1565,8 +1560,8 @@ extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_InitResolver(ReplayR
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_SetContextFilter(ReplayRenderer *rend, ResourceId id, uint32_t firstDefEv, uint32_t lastDefEv)
{ return rend->SetContextFilter(id, firstDefEv, lastDefEv); }
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_SetFrameEvent(ReplayRenderer *rend, uint32_t frameID, uint32_t eventID)
{ return rend->SetFrameEvent(frameID, eventID); }
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_SetFrameEvent(ReplayRenderer *rend, uint32_t frameID, uint32_t eventID, bool32 force)
{ return rend->SetFrameEvent(frameID, eventID, force != 0); }
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetD3D11PipelineState(ReplayRenderer *rend, D3D11PipelineState *state)
{ return rend->GetD3D11PipelineState(state); }
extern "C" RENDERDOC_API bool32 RENDERDOC_CC ReplayRenderer_GetGLPipelineState(ReplayRenderer *rend, GLPipelineState *state)
-1
View File
@@ -144,7 +144,6 @@ struct ReplayRenderer : public IReplayRenderer
bool InitResolver();
bool SetContextFilter(ResourceId id, uint32_t firstDefEv, uint32_t lastDefEv);
bool SetFrameEvent(uint32_t frameID, uint32_t eventID);
bool SetFrameEvent(uint32_t frameID, uint32_t eventID, bool force);
void FetchPipelineState();
+1 -1
View File
@@ -241,7 +241,7 @@ void DisplayRendererPreview(ReplayRenderer *renderer, TextureDisplay displayCfg)
if(msg.message == WM_QUIT) break;
// set to random event beyond the end of the frame to ensure output is marked as dirty
ReplayRenderer_SetFrameEvent(renderer, 0, 10000000+rand()%1000);
ReplayRenderer_SetFrameEvent(renderer, 0, 10000000+rand()%1000, true);
ReplayOutput_Display(out);
Sleep(40);
+13 -3
View File
@@ -616,7 +616,7 @@ namespace renderdocui.Code
m_Renderer.Invoke((ReplayRenderer r) =>
{
r.FileChanged();
r.SetFrameEvent(m_FrameID, m_EventID > 0 ? m_EventID-1 : 1);
r.SetFrameEvent(m_FrameID, m_EventID > 0 ? m_EventID-1 : 1, true);
});
SetEventID(null, CurFrame, CurEvent);
@@ -846,7 +846,7 @@ namespace renderdocui.Code
m_Renderer.Invoke((ReplayRenderer r) => { r.SetContextFilter(ctx, firstDeferred, lastDeferred); });
m_Renderer.Invoke((ReplayRenderer r) => {
r.SetFrameEvent(m_FrameID, m_EventID);
r.SetFrameEvent(m_FrameID, m_EventID, true);
m_D3D11PipelineState = r.GetD3D11PipelineState();
m_GLPipelineState = r.GetGLPipelineState();
m_VulkanPipelineState = r.GetVulkanPipelineState();
@@ -866,7 +866,17 @@ namespace renderdocui.Code
}
}
public void RefreshStatus()
{
SetEventID(null, m_FrameID, m_EventID, true);
}
public void SetEventID(ILogViewerForm exclude, UInt32 frameID, UInt32 eventID)
{
SetEventID(exclude, frameID, eventID, false);
}
private void SetEventID(ILogViewerForm exclude, UInt32 frameID, UInt32 eventID, bool force)
{
m_FrameID = frameID;
m_EventID = eventID;
@@ -876,7 +886,7 @@ namespace renderdocui.Code
m_Renderer.Invoke((ReplayRenderer r) => { r.SetContextFilter(ResourceId.Null, 0, 0); });
m_Renderer.Invoke((ReplayRenderer r) =>
{
r.SetFrameEvent(m_FrameID, m_EventID);
r.SetFrameEvent(m_FrameID, m_EventID, force);
m_D3D11PipelineState = r.GetD3D11PipelineState();
m_GLPipelineState = r.GetGLPipelineState();
m_VulkanPipelineState = r.GetVulkanPipelineState();
+3 -3
View File
@@ -209,7 +209,7 @@ namespace renderdoc
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
private static extern bool ReplayRenderer_SetContextFilter(IntPtr real, ResourceId id, UInt32 firstDefEv, UInt32 lastDefEv);
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
private static extern bool ReplayRenderer_SetFrameEvent(IntPtr real, UInt32 frameID, UInt32 eventID);
private static extern bool ReplayRenderer_SetFrameEvent(IntPtr real, UInt32 frameID, UInt32 eventID, bool force);
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
private static extern bool ReplayRenderer_GetD3D11PipelineState(IntPtr real, IntPtr mem);
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
@@ -328,8 +328,8 @@ namespace renderdoc
public bool SetContextFilter(ResourceId id, UInt32 firstDefEv, UInt32 lastDefEv)
{ return ReplayRenderer_SetContextFilter(m_Real, id, firstDefEv, lastDefEv); }
public bool SetFrameEvent(UInt32 frameID, UInt32 eventID)
{ return ReplayRenderer_SetFrameEvent(m_Real, frameID, eventID); }
public bool SetFrameEvent(UInt32 frameID, UInt32 eventID, bool force)
{ return ReplayRenderer_SetFrameEvent(m_Real, frameID, eventID, force); }
public GLPipelineState GetGLPipelineState()
{
@@ -2008,6 +2008,8 @@ namespace renderdocui.Windows.PipelineState
if (files.Count == 0)
return;
D3D11PipelineStateViewer pipeviewer = this;
ShaderViewer sv = new ShaderViewer(m_Core, false, entryFunc, files,
// Save Callback
@@ -2101,10 +2103,12 @@ namespace renderdocui.Windows.PipelineState
if (to == ResourceId.Null)
{
r.RemoveReplacement(from);
pipeviewer.BeginInvoke((MethodInvoker)delegate { m_Core.RefreshStatus(); });
}
else
{
r.ReplaceResource(from, to);
pipeviewer.BeginInvoke((MethodInvoker)delegate { m_Core.RefreshStatus(); });
}
});
},
@@ -2117,6 +2121,7 @@ namespace renderdocui.Windows.PipelineState
m_Core.Renderer.BeginInvoke((ReplayRenderer r) =>
{
r.RemoveReplacement(stage.Shader);
pipeviewer.BeginInvoke((MethodInvoker)delegate { m_Core.RefreshStatus(); });
});
});
@@ -1884,6 +1884,8 @@ namespace renderdocui.Windows.PipelineState
if (files.Count == 0)
return;
GLPipelineStateViewer pipeviewer = this;
ShaderViewer sv = new ShaderViewer(m_Core, false, "main", files,
// Save Callback
@@ -1906,10 +1908,12 @@ namespace renderdocui.Windows.PipelineState
if (to == ResourceId.Null)
{
r.RemoveReplacement(from);
pipeviewer.BeginInvoke((MethodInvoker)delegate { m_Core.RefreshStatus(); });
}
else
{
r.ReplaceResource(from, to);
pipeviewer.BeginInvoke((MethodInvoker)delegate { m_Core.RefreshStatus(); });
}
});
},
@@ -1922,6 +1926,7 @@ namespace renderdocui.Windows.PipelineState
m_Core.Renderer.BeginInvoke((ReplayRenderer r) =>
{
r.RemoveReplacement(stage.Shader);
pipeviewer.BeginInvoke((MethodInvoker)delegate { m_Core.RefreshStatus(); });
});
});