Add menu item to jump from pixel history modifications to each primitive

This commit is contained in:
baldurk
2016-07-22 14:40:40 +02:00
parent bd079b7632
commit 28c1768397
9 changed files with 134 additions and 63 deletions
+12
View File
@@ -87,6 +87,7 @@ namespace renderdocui.Code
private DebugMessages m_DebugMessages = null;
private TimelineBar m_TimelineBar = null;
private TextureViewer m_TextureViewer = null;
private BufferViewer m_MeshViewer = null;
private PipelineStateViewer m_PipelineStateViewer = null;
private StatisticsViewer m_StatisticsViewer = null;
@@ -782,6 +783,17 @@ namespace renderdocui.Code
return m_TextureViewer;
}
public BufferViewer GetMeshViewer()
{
if (m_MeshViewer == null || m_MeshViewer.IsDisposed)
{
m_MeshViewer = new BufferViewer(this, true);
AddLogViewer(m_MeshViewer);
}
return m_MeshViewer;
}
public PipelineStateViewer GetPipelineStateViewer()
{
if (m_PipelineStateViewer == null || m_PipelineStateViewer.IsDisposed)
+9
View File
@@ -24,6 +24,7 @@
******************************************************************************/
using System;
using System.Runtime.InteropServices;
// from replay_enums.h
@@ -520,6 +521,14 @@ namespace renderdoc
public static class EnumString
{
[DllImport("renderdoc.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
private static extern UInt32 Topology_VertexOffset(PrimitiveTopology topology, UInt32 prim);
public static UInt32 GetVertexOffset(this PrimitiveTopology topology, UInt32 primitiveIndex)
{
return Topology_VertexOffset(topology, primitiveIndex);
}
public static string Str(this DebugMessageSource source)
{
switch (source)
+5 -1
View File
@@ -761,7 +761,7 @@ namespace renderdocui.Windows
public bool MeshView;
private int RowOffset
public int RowOffset
{
get
{
@@ -769,6 +769,10 @@ namespace renderdocui.Windows
int.TryParse(rowOffset.Text, out row);
return row;
}
set
{
rowOffset.Text = value.ToString();
}
}
private uint DefaultMaxRows { get { return 200000; } }
+3 -3
View File
@@ -185,7 +185,7 @@ namespace renderdocui.Windows
m_Core.GetPipelineStateViewer().Show(dockPanel);
var bv = new BufferViewer(m_Core, true);
var bv = m_Core.GetMeshViewer();
bv.InitFromPersistString("");
bv.Show(dockPanel);
@@ -446,7 +446,7 @@ namespace renderdocui.Windows
}
else if (IsPersist(persistString, typeof(BufferViewer).ToString()))
{
var ret = new BufferViewer(m_Core, true);
var ret = m_Core.GetMeshViewer();
ret.InitFromPersistString(persistString);
return ret;
}
@@ -1571,7 +1571,7 @@ namespace renderdocui.Windows
private void meshOutputToolStripMenuItem_Click(object sender, EventArgs e)
{
BufferViewer b = new BufferViewer(m_Core, true);
BufferViewer b = m_Core.GetMeshViewer();
b.InitFromPersistString("");
@@ -2119,7 +2119,8 @@ namespace renderdocui.Windows.PipelineState
private void inputLayouts_NodeDoubleClick(TreelistView.Node node)
{
(new BufferViewer(m_Core, true)).Show(m_DockContent.DockPanel);
var viewer = m_Core.GetMeshViewer();
viewer.Show(m_DockContent.DockPanel);
}
private D3D11PipelineState.ShaderStage GetStageForSender(object sender)
@@ -2719,7 +2720,8 @@ namespace renderdocui.Windows.PipelineState
private void meshView_Click(object sender, EventArgs e)
{
(new BufferViewer(m_Core, true)).Show(m_DockContent.DockPanel);
var viewer = m_Core.GetMeshViewer();
viewer.Show(m_DockContent.DockPanel);
}
private float GetHueForVB(int i)
@@ -1850,7 +1850,8 @@ namespace renderdocui.Windows.PipelineState
private void inputLayouts_NodeDoubleClick(TreelistView.Node node)
{
(new BufferViewer(m_Core, true)).Show(m_DockContent.DockPanel);
var viewer = m_Core.GetMeshViewer();
viewer.Show(m_DockContent.DockPanel);
}
private GLPipelineState.ShaderStage GetStageForSender(object sender)
@@ -2146,7 +2147,8 @@ namespace renderdocui.Windows.PipelineState
private void meshView_Click(object sender, EventArgs e)
{
(new BufferViewer(m_Core, true)).Show(m_DockContent.DockPanel);
var viewer = m_Core.GetMeshViewer();
viewer.Show(m_DockContent.DockPanel);
}
private float GetHueForVB(int i)
@@ -2077,7 +2077,8 @@ namespace renderdocui.Windows.PipelineState
private void inputLayouts_NodeDoubleClick(TreelistView.Node node)
{
(new BufferViewer(m_Core, true)).Show(m_DockContent.DockPanel);
var viewer = m_Core.GetMeshViewer();
viewer.Show(m_DockContent.DockPanel);
}
private VulkanPipelineState.ShaderStage GetStageForSender(object sender)
@@ -2377,7 +2378,8 @@ namespace renderdocui.Windows.PipelineState
private void meshView_Click(object sender, EventArgs e)
{
(new BufferViewer(m_Core, true)).Show(m_DockContent.DockPanel);
var viewer = m_Core.GetMeshViewer();
viewer.Show(m_DockContent.DockPanel);
}
private float GetHueForVB(int i)
+62 -52
View File
@@ -29,21 +29,22 @@
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
TreelistView.TreeListColumn treeListColumn1 = ((TreelistView.TreeListColumn)(new TreelistView.TreeListColumn("Event", "Event")));
TreelistView.TreeListColumn treeListColumn2 = ((TreelistView.TreeListColumn)(new TreelistView.TreeListColumn("Before", "")));
TreelistView.TreeListColumn treeListColumn3 = ((TreelistView.TreeListColumn)(new TreelistView.TreeListColumn("BeforeCol", "")));
TreelistView.TreeListColumn treeListColumn4 = ((TreelistView.TreeListColumn)(new TreelistView.TreeListColumn("After", "")));
TreelistView.TreeListColumn treeListColumn5 = ((TreelistView.TreeListColumn)(new TreelistView.TreeListColumn("AfterCol", "")));
TreelistView.TreeListColumn treeListColumn1 = new TreelistView.TreeListColumn("Event", "Event");
TreelistView.TreeListColumn treeListColumn2 = new TreelistView.TreeListColumn("Before", "");
TreelistView.TreeListColumn treeListColumn3 = new TreelistView.TreeListColumn("BeforeCol", "");
TreelistView.TreeListColumn treeListColumn4 = new TreelistView.TreeListColumn("After", "");
TreelistView.TreeListColumn treeListColumn5 = new TreelistView.TreeListColumn("AfterCol", "");
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.events = new TreelistView.TreeListView();
this.historyContext = new System.Windows.Forms.Label();
this.eventsHidden = new System.Windows.Forms.Label();
this.rightclickMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.hideFailedEventsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.events = new TreelistView.TreeListView();
this.jumpToPrimitiveMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.tableLayoutPanel1.SuspendLayout();
this.rightclickMenu.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.events)).BeginInit();
this.rightclickMenu.SuspendLayout();
this.SuspendLayout();
//
// tableLayoutPanel1
@@ -63,50 +64,6 @@
this.tableLayoutPanel1.Size = new System.Drawing.Size(386, 478);
this.tableLayoutPanel1.TabIndex = 2;
//
// historyContext
//
this.historyContext.AutoSize = true;
this.historyContext.Location = new System.Drawing.Point(3, 0);
this.historyContext.Name = "historyContext";
this.historyContext.Size = new System.Drawing.Size(378, 52);
this.historyContext.TabIndex = 2;
this.historyContext.Text = "***code overwritten preview*** Preview colours displayed in visible range {min} -" +
" {max} with {red, blue, green} channels.\r\n\r\nRight click to debug an event, or hi" +
"de failed events.";
//
// eventsHidden
//
this.eventsHidden.AutoSize = true;
this.eventsHidden.ForeColor = System.Drawing.Color.Red;
this.eventsHidden.Location = new System.Drawing.Point(3, 52);
this.eventsHidden.Name = "eventsHidden";
this.eventsHidden.Size = new System.Drawing.Size(92, 13);
this.eventsHidden.TabIndex = 3;
this.eventsHidden.Text = "events are hidden";
//
// rightclickMenu
//
this.rightclickMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.hideFailedEventsToolStripMenuItem,
this.debugToolStripMenuItem});
this.rightclickMenu.Name = "rightclickMenu";
this.rightclickMenu.Size = new System.Drawing.Size(161, 48);
//
// hideFailedEventsToolStripMenuItem
//
this.hideFailedEventsToolStripMenuItem.CheckOnClick = true;
this.hideFailedEventsToolStripMenuItem.Name = "hideFailedEventsToolStripMenuItem";
this.hideFailedEventsToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
this.hideFailedEventsToolStripMenuItem.Text = "&Hide failed events";
this.hideFailedEventsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.hideFailedEventsToolStripMenuItem_CheckedChanged);
//
// debugToolStripMenuItem
//
this.debugToolStripMenuItem.Name = "debugToolStripMenuItem";
this.debugToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
this.debugToolStripMenuItem.Text = "&Debug pixel";
this.debugToolStripMenuItem.Click += new System.EventHandler(this.debugToolStripMenuItem_Click);
//
// events
//
treeListColumn1.AutoSize = true;
@@ -142,6 +99,58 @@
this.events.NodeDoubleClicked += new TreelistView.TreeListView.NodeDoubleClickedHandler(this.events_NodeDoubleClicked);
this.events.MouseClick += new System.Windows.Forms.MouseEventHandler(this.events_MouseClick);
//
// historyContext
//
this.historyContext.AutoSize = true;
this.historyContext.Location = new System.Drawing.Point(3, 0);
this.historyContext.Name = "historyContext";
this.historyContext.Size = new System.Drawing.Size(378, 52);
this.historyContext.TabIndex = 2;
this.historyContext.Text = "***code overwritten preview*** Preview colours displayed in visible range {min} -" +
" {max} with {red, blue, green} channels.\r\n\r\nRight click to debug an event, hi" +
"de failed events, or jump to the modification's primitive in the mesh view.";
//
// eventsHidden
//
this.eventsHidden.AutoSize = true;
this.eventsHidden.ForeColor = System.Drawing.Color.Red;
this.eventsHidden.Location = new System.Drawing.Point(3, 52);
this.eventsHidden.Name = "eventsHidden";
this.eventsHidden.Size = new System.Drawing.Size(92, 13);
this.eventsHidden.TabIndex = 3;
this.eventsHidden.Text = "events are hidden";
//
// rightclickMenu
//
this.rightclickMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.hideFailedEventsToolStripMenuItem,
this.jumpToPrimitiveMenuItem,
this.debugToolStripMenuItem});
this.rightclickMenu.Name = "rightclickMenu";
this.rightclickMenu.Size = new System.Drawing.Size(161, 92);
//
// hideFailedEventsToolStripMenuItem
//
this.hideFailedEventsToolStripMenuItem.CheckOnClick = true;
this.hideFailedEventsToolStripMenuItem.Name = "hideFailedEventsToolStripMenuItem";
this.hideFailedEventsToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
this.hideFailedEventsToolStripMenuItem.Text = "&Hide failed events";
this.hideFailedEventsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.hideFailedEventsToolStripMenuItem_CheckedChanged);
//
// debugToolStripMenuItem
//
this.debugToolStripMenuItem.Name = "debugToolStripMenuItem";
this.debugToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
this.debugToolStripMenuItem.Text = "&Debug pixel";
this.debugToolStripMenuItem.Click += new System.EventHandler(this.debugToolStripMenuItem_Click);
//
// jumpToPrimitiveMenuItem
//
this.jumpToPrimitiveMenuItem.Name = "jumpToPrimitiveMenuItem";
this.jumpToPrimitiveMenuItem.Size = new System.Drawing.Size(160, 22);
this.jumpToPrimitiveMenuItem.Text = "Jump to Primitive";
this.jumpToPrimitiveMenuItem.Click += new System.EventHandler(this.jumpToPrimitiveMenuItem_Click);
//
// PixelHistoryView
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -157,8 +166,8 @@
this.Leave += new System.EventHandler(this.PixelHistoryView_Leave);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel1.PerformLayout();
this.rightclickMenu.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.events)).EndInit();
this.rightclickMenu.ResumeLayout(false);
this.ResumeLayout(false);
}
@@ -172,5 +181,6 @@
private System.Windows.Forms.ContextMenuStrip rightclickMenu;
private System.Windows.Forms.ToolStripMenuItem hideFailedEventsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem jumpToPrimitiveMenuItem;
}
}
+31 -1
View File
@@ -475,25 +475,55 @@ namespace renderdocui.Windows
if (e.Button == MouseButtons.Right)
{
debugToolStripMenuItem.Enabled = false;
debugToolStripMenuItem.Text = "Debug Pixel";
jumpToPrimitiveMenuItem.Visible = false;
if (events.SelectedNode != null && events.SelectedNode.Tag != null && events.SelectedNode.Tag is EventTag)
{
EventTag tag = (EventTag)events.SelectedNode.Tag;
debugToolStripMenuItem.Enabled = true;
if (tag.Primitive == uint.MaxValue)
{
debugToolStripMenuItem.Text = String.Format("Debug Pixel ({0}, {1}) at Event {3}",
pixel.X, pixel.Y, tag.Primitive, tag.EID);
}
else
{
debugToolStripMenuItem.Text = String.Format("Debug Pixel ({0}, {1}) primitive {2} at Event {3}",
pixel.X, pixel.Y, tag.Primitive, tag.EID);
jumpToPrimitiveMenuItem.Text = String.Format("Show primitive {0} at Event {1}", tag.Primitive, tag.EID);
jumpToPrimitiveMenuItem.Visible = true;
}
}
rightclickMenu.Show(events.PointToScreen(e.Location));
}
}
private void jumpToPrimitiveMenuItem_Click(object sender, EventArgs e)
{
if (events.SelectedNode == null) return;
var node = events.SelectedNode;
if (node.Tag is EventTag)
{
EventTag tag = (EventTag)node.Tag;
m_Core.SetEventID(this, tag.EID);
UInt32 vertIdx = m_Core.CurDrawcall.topology.GetVertexOffset(tag.Primitive);
var viewer = m_Core.GetMeshViewer();
viewer.Show(DockPanel);
if (!viewer.IsDisposed && vertIdx != ~0U)
viewer.RowOffset = (int)vertIdx;
}
}
private void debugToolStripMenuItem_Click(object sender, EventArgs e)
{
if (events.SelectedNode == null) return;