mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 17:10:47 +00:00
Add menu item to jump from pixel history modifications to each primitive
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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; } }
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user