mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Implement right click options to debug or hide failed events
This commit is contained in:
+37
-2
@@ -28,6 +28,7 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
TreelistView.TreeListColumn treeListColumn1 = ((TreelistView.TreeListColumn)(new TreelistView.TreeListColumn("EID", "EID")));
|
||||
TreelistView.TreeListColumn treeListColumn2 = ((TreelistView.TreeListColumn)(new TreelistView.TreeListColumn("Event", "Event")));
|
||||
TreelistView.TreeListColumn treeListColumn3 = ((TreelistView.TreeListColumn)(new TreelistView.TreeListColumn("Before", "Before")));
|
||||
@@ -37,8 +38,12 @@
|
||||
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||
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.tableLayoutPanel1.SuspendLayout();
|
||||
this.rightclickMenu.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.events)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@@ -73,10 +78,35 @@
|
||||
// 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(0, 13);
|
||||
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
|
||||
//
|
||||
@@ -104,7 +134,7 @@
|
||||
treeListColumn4,
|
||||
treeListColumn5,
|
||||
treeListColumn6});
|
||||
this.events.Cursor = System.Windows.Forms.Cursors.Arrow;
|
||||
this.events.Cursor = System.Windows.Forms.Cursors.VSplit;
|
||||
this.events.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.events.Location = new System.Drawing.Point(3, 68);
|
||||
this.events.MultiSelect = false;
|
||||
@@ -117,6 +147,7 @@
|
||||
this.events.ViewOptions.ShowLine = false;
|
||||
this.events.ViewOptions.ShowPlusMinus = false;
|
||||
this.events.NodeDoubleClicked += new TreelistView.TreeListView.NodeDoubleClickedHandler(this.events_NodeDoubleClicked);
|
||||
this.events.MouseClick += new System.Windows.Forms.MouseEventHandler(this.events_MouseClick);
|
||||
//
|
||||
// PixelHistoryView
|
||||
//
|
||||
@@ -130,6 +161,7 @@
|
||||
this.Text = "Pixel History";
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
this.tableLayoutPanel1.PerformLayout();
|
||||
this.rightclickMenu.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.events)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
@@ -141,5 +173,8 @@
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||
private System.Windows.Forms.Label historyContext;
|
||||
private System.Windows.Forms.Label eventsHidden;
|
||||
private System.Windows.Forms.ContextMenuStrip rightclickMenu;
|
||||
private System.Windows.Forms.ToolStripMenuItem hideFailedEventsToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem;
|
||||
}
|
||||
}
|
||||
@@ -40,6 +40,12 @@ namespace renderdocui.Windows
|
||||
public partial class PixelHistoryView : DockContent, ILogViewerForm
|
||||
{
|
||||
Core m_Core;
|
||||
FetchTexture texture;
|
||||
Point pixel;
|
||||
PixelModification[] modifications;
|
||||
bool[] visibleChannels;
|
||||
float rangeMin, rangeMax;
|
||||
int numChannels, channelIdx;
|
||||
|
||||
public PixelHistoryView(Core core, FetchTexture tex, Point pt,
|
||||
float rangemin, float rangemax, bool[] channels,
|
||||
@@ -49,16 +55,20 @@ namespace renderdocui.Windows
|
||||
|
||||
Icon = global::renderdocui.Properties.Resources.icon;
|
||||
|
||||
events.BeginInit();
|
||||
events.BeginUpdate();
|
||||
|
||||
m_Core = core;
|
||||
|
||||
texture = tex;
|
||||
pixel = pt;
|
||||
modifications = history;
|
||||
rangeMin = rangemin;
|
||||
rangeMax = rangemax;
|
||||
visibleChannels = channels;
|
||||
|
||||
Text = String.Format("Pixel History on {0} for ({1}, {2})", tex.name, pt.X, pt.Y);
|
||||
|
||||
string channelStr = "";
|
||||
int numChannels = 0;
|
||||
int channelIdx = 0;
|
||||
numChannels = 0;
|
||||
channelIdx = 0;
|
||||
|
||||
if (channels[0])
|
||||
{
|
||||
@@ -95,28 +105,40 @@ namespace renderdocui.Windows
|
||||
historyContext.Text = String.Format("Preview colours displayed in visible range {0} - {1} with {2} visible.",
|
||||
Formatter.Format(rangemin), Formatter.Format(rangemax), channelStr) + Environment.NewLine;
|
||||
historyContext.Text += Environment.NewLine;
|
||||
historyContext.Text += "Double click to jump to an event." + Environment.NewLine;
|
||||
historyContext.Text += "Right click to debug an event, or hide failed events.";
|
||||
|
||||
bool uintTex = (tex.format.compType == FormatComponentType.UInt);
|
||||
bool sintTex = (tex.format.compType == FormatComponentType.SInt);
|
||||
bool srgbTex = tex.format.srgbCorrected ||
|
||||
(tex.creationFlags & TextureCreationFlags.SwapBuffer) > 0;
|
||||
eventsHidden.Text = "";
|
||||
|
||||
UpdateEventList();
|
||||
}
|
||||
|
||||
void UpdateEventList()
|
||||
{
|
||||
events.BeginUpdate();
|
||||
|
||||
events.Nodes.Clear();
|
||||
|
||||
bool uintTex = (texture.format.compType == FormatComponentType.UInt);
|
||||
bool sintTex = (texture.format.compType == FormatComponentType.SInt);
|
||||
bool srgbTex = texture.format.srgbCorrected ||
|
||||
(texture.creationFlags & TextureCreationFlags.SwapBuffer) > 0;
|
||||
bool floatTex = (!uintTex && !sintTex);
|
||||
|
||||
int numComps = (int)tex.format.compCount;
|
||||
int numComps = (int)texture.format.compCount;
|
||||
|
||||
if (tex.format.compType == FormatComponentType.Depth ||
|
||||
(tex.format.special && tex.format.specialFormat == SpecialFormat.D24S8) ||
|
||||
(tex.format.special && tex.format.specialFormat == SpecialFormat.D32S8))
|
||||
if (texture.format.compType == FormatComponentType.Depth ||
|
||||
(texture.format.special && texture.format.specialFormat == SpecialFormat.D24S8) ||
|
||||
(texture.format.special && texture.format.specialFormat == SpecialFormat.D32S8))
|
||||
numComps = 0;
|
||||
|
||||
float rangesize = (rangemax - rangemin);
|
||||
float rangesize = (rangeMax - rangeMin);
|
||||
|
||||
foreach (PixelModification mod in history)
|
||||
foreach (PixelModification mod in modifications)
|
||||
{
|
||||
string name = "name";
|
||||
|
||||
var drawcall = core.GetDrawcall(core.CurFrame, mod.eventID);
|
||||
var drawcall = m_Core.GetDrawcall(m_Core.CurFrame, mod.eventID);
|
||||
|
||||
if (drawcall == null) continue;
|
||||
|
||||
@@ -155,6 +177,9 @@ namespace renderdocui.Windows
|
||||
passed = false;
|
||||
}
|
||||
|
||||
if(!passed && hideFailedEventsToolStripMenuItem.Checked)
|
||||
continue;
|
||||
|
||||
string preModVal = "";
|
||||
string postModVal = "";
|
||||
|
||||
@@ -223,17 +248,17 @@ namespace renderdocui.Windows
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!channels[0]) r = 0.0f;
|
||||
if (!channels[1]) g = 0.0f;
|
||||
if (!channels[2]) b = 0.0f;
|
||||
if (!visibleChannels[0]) r = 0.0f;
|
||||
if (!visibleChannels[1]) g = 0.0f;
|
||||
if (!visibleChannels[2]) b = 0.0f;
|
||||
}
|
||||
|
||||
r = Helpers.Clamp((r - rangemin) / rangesize, 0.0f, 1.0f);
|
||||
g = Helpers.Clamp((g - rangemin) / rangesize, 0.0f, 1.0f);
|
||||
b = Helpers.Clamp((b - rangemin) / rangesize, 0.0f, 1.0f);
|
||||
r = Helpers.Clamp((r - rangeMin) / rangesize, 0.0f, 1.0f);
|
||||
g = Helpers.Clamp((g - rangeMin) / rangesize, 0.0f, 1.0f);
|
||||
b = Helpers.Clamp((b - rangeMin) / rangesize, 0.0f, 1.0f);
|
||||
|
||||
if(numComps == 0)
|
||||
r = g = b = Helpers.Clamp((mod.preMod.depth - rangemin) / rangesize, 0.0f, 1.0f);
|
||||
r = g = b = Helpers.Clamp((mod.preMod.depth - rangeMin) / rangesize, 0.0f, 1.0f);
|
||||
|
||||
if (srgbTex)
|
||||
{
|
||||
@@ -254,17 +279,17 @@ namespace renderdocui.Windows
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!channels[0]) r = 0.0f;
|
||||
if (!channels[1]) g = 0.0f;
|
||||
if (!channels[2]) b = 0.0f;
|
||||
if (!visibleChannels[0]) r = 0.0f;
|
||||
if (!visibleChannels[1]) g = 0.0f;
|
||||
if (!visibleChannels[2]) b = 0.0f;
|
||||
}
|
||||
|
||||
r = Helpers.Clamp((r - rangemin) / rangesize, 0.0f, 1.0f);
|
||||
g = Helpers.Clamp((g - rangemin) / rangesize, 0.0f, 1.0f);
|
||||
b = Helpers.Clamp((b - rangemin) / rangesize, 0.0f, 1.0f);
|
||||
r = Helpers.Clamp((r - rangeMin) / rangesize, 0.0f, 1.0f);
|
||||
g = Helpers.Clamp((g - rangeMin) / rangesize, 0.0f, 1.0f);
|
||||
b = Helpers.Clamp((b - rangeMin) / rangesize, 0.0f, 1.0f);
|
||||
|
||||
if (numComps == 0)
|
||||
r = g = b = Helpers.Clamp((mod.postMod.depth - rangemin) / rangesize, 0.0f, 1.0f);
|
||||
r = g = b = Helpers.Clamp((mod.postMod.depth - rangeMin) / rangesize, 0.0f, 1.0f);
|
||||
|
||||
if (srgbTex)
|
||||
{
|
||||
@@ -280,7 +305,6 @@ namespace renderdocui.Windows
|
||||
}
|
||||
|
||||
events.EndUpdate();
|
||||
events.EndInit();
|
||||
}
|
||||
|
||||
public void OnLogfileClosed()
|
||||
@@ -303,5 +327,58 @@ namespace renderdocui.Windows
|
||||
m_Core.SetEventID(this, m_Core.CurFrame, (uint)node.Tag);
|
||||
}
|
||||
}
|
||||
|
||||
private void events_MouseClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Right)
|
||||
{
|
||||
rightclickMenu.Show(events.PointToScreen(e.Location));
|
||||
}
|
||||
}
|
||||
|
||||
private void debugToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (events.SelectedNode == null) return;
|
||||
|
||||
var node = events.SelectedNode;
|
||||
|
||||
if (node.Tag is uint)
|
||||
{
|
||||
m_Core.SetEventID(this, m_Core.CurFrame, (uint)node.Tag);
|
||||
|
||||
ShaderDebugTrace trace = null;
|
||||
|
||||
ShaderReflection shaderDetails = m_Core.CurPipelineState.GetShaderReflection(ShaderStageType.Pixel);
|
||||
|
||||
m_Core.Renderer.Invoke((ReplayRenderer r) =>
|
||||
{
|
||||
trace = r.PSGetDebugStates((UInt32)pixel.X, (UInt32)pixel.Y);
|
||||
});
|
||||
|
||||
if (trace == null || trace.states.Length == 0)
|
||||
{
|
||||
MessageBox.Show("Error debugging pixel.", "Debug Error",
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
this.BeginInvoke(new Action(() =>
|
||||
{
|
||||
ShaderViewer s = new ShaderViewer(m_Core, shaderDetails, ShaderStageType.Pixel, trace);
|
||||
|
||||
s.Show(this.DockPanel);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
private void hideFailedEventsToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (hideFailedEventsToolStripMenuItem.Checked)
|
||||
eventsHidden.Text = "Failed events are currently hidden";
|
||||
else
|
||||
eventsHidden.Text = "";
|
||||
|
||||
UpdateEventList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,4 +117,7 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="rightclickMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
Reference in New Issue
Block a user