mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 09:00:44 +00:00
Forcibly refresh UI state after editing a shader or removing an edit
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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(); });
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user