Make sure we're on a consistent event before calling OnLogFileLoaded

* Certain panels like BufferViewer assume there is a current drawcall
  at startup and not an invalid event ID like 0. Normally the event
  browser is loaded first and sets the event ID, but if it's later in
  the list this will break.
This commit is contained in:
baldurk
2017-02-01 11:17:56 +00:00
parent 0a611417c1
commit 477df04072
5 changed files with 27 additions and 13 deletions
+11 -4
View File
@@ -613,6 +613,13 @@ namespace renderdocui.Code
List<ILogViewerForm> logviewers = new List<ILogViewerForm>();
logviewers.AddRange(m_LogViewers);
// make sure we're on a consistent event before invoking log viewer forms
FetchDrawcall draw = m_DrawCalls.Last();
while (draw.children != null && draw.children.Length > 0)
draw = draw.children.Last();
SetEventID(logviewers.ToArray(), draw.eventID, true);
// notify all the registers log viewers that a log has been loaded
foreach (var logviewer in logviewers)
{
@@ -893,15 +900,15 @@ namespace renderdocui.Code
public void RefreshStatus()
{
SetEventID(null, m_EventID, true);
SetEventID(new ILogViewerForm[] { }, m_EventID, true);
}
public void SetEventID(ILogViewerForm exclude, UInt32 eventID)
{
SetEventID(exclude, eventID, false);
SetEventID(new ILogViewerForm[] { exclude }, eventID, false);
}
private void SetEventID(ILogViewerForm exclude, UInt32 eventID, bool force)
private void SetEventID(ILogViewerForm[] exclude, UInt32 eventID, bool force)
{
m_EventID = eventID;
@@ -917,7 +924,7 @@ namespace renderdocui.Code
foreach (var logviewer in m_LogViewers)
{
if(logviewer == exclude)
if(exclude.Contains(logviewer))
continue;
Control c = (Control)logviewer;