From 9f9610ce6db2753d9f8d95cb037257193bb9531f Mon Sep 17 00:00:00 2001 From: baldurk Date: Sun, 31 Jul 2016 13:07:39 +0700 Subject: [PATCH] Recreate output windows after use, since D3D12 breaks them --- renderdocui/Windows/BufferViewer.Designer.cs | 36 +++++----- renderdocui/Windows/BufferViewer.cs | 43 +++++++++--- renderdocui/Windows/TextureViewer.Designer.cs | 26 +------- renderdocui/Windows/TextureViewer.cs | 65 ++++++++++++++++--- 4 files changed, 111 insertions(+), 59 deletions(-) diff --git a/renderdocui/Windows/BufferViewer.Designer.cs b/renderdocui/Windows/BufferViewer.Designer.cs index 3cf2f1371..54f6fb1e2 100644 --- a/renderdocui/Windows/BufferViewer.Designer.cs +++ b/renderdocui/Windows/BufferViewer.Designer.cs @@ -54,7 +54,7 @@ WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient7 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); this.previewTable = new System.Windows.Forms.TableLayoutPanel(); - this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.renderTable = new System.Windows.Forms.TableLayoutPanel(); this.render = new renderdocui.Controls.NoScrollPanel(); this.configCamControls = new System.Windows.Forms.GroupBox(); this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); @@ -131,7 +131,7 @@ label3 = new System.Windows.Forms.Label(); label5 = new System.Windows.Forms.Label(); this.previewTable.SuspendLayout(); - this.tableLayoutPanel3.SuspendLayout(); + this.renderTable.SuspendLayout(); this.configCamControls.SuspendLayout(); this.tableLayoutPanel2.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.camSpeed)).BeginInit(); @@ -204,7 +204,7 @@ // this.previewTable.ColumnCount = 1; this.previewTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.previewTable.Controls.Add(this.tableLayoutPanel3, 0, 1); + this.previewTable.Controls.Add(this.renderTable, 0, 1); this.previewTable.Controls.Add(this.toolStrip2, 0, 0); this.previewTable.Dock = System.Windows.Forms.DockStyle.Fill; this.previewTable.Location = new System.Drawing.Point(3, 3); @@ -218,25 +218,25 @@ // // tableLayoutPanel3 // - this.tableLayoutPanel3.ColumnCount = 2; - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.Controls.Add(this.render, 1, 0); - this.tableLayoutPanel3.Controls.Add(this.configCamControls, 0, 0); - this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 28); - this.tableLayoutPanel3.Name = "tableLayoutPanel3"; - this.tableLayoutPanel3.RowCount = 1; - this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel3.Size = new System.Drawing.Size(539, 250); - this.tableLayoutPanel3.TabIndex = 5; + this.renderTable.ColumnCount = 2; + this.renderTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.renderTable.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.renderTable.Controls.Add(this.render, 1, 0); + this.renderTable.Controls.Add(this.configCamControls, 0, 0); + this.renderTable.Dock = System.Windows.Forms.DockStyle.Fill; + this.renderTable.Location = new System.Drawing.Point(3, 28); + this.renderTable.Name = "tableLayoutPanel3"; + this.renderTable.RowCount = 1; + this.renderTable.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.renderTable.Size = new System.Drawing.Size(539, 250); + this.renderTable.TabIndex = 5; // // render // this.render.BackColor = System.Drawing.Color.Black; this.render.Dock = System.Windows.Forms.DockStyle.Fill; this.render.Location = new System.Drawing.Point(203, 3); - this.render.Name = "render"; + this.render.Name = "render_SETUP_AT_RUNTIME_SEE_CODE"; this.render.Size = new System.Drawing.Size(333, 244); this.render.TabIndex = 2; this.render.Paint += new System.Windows.Forms.PaintEventHandler(this.render_Paint); @@ -1066,7 +1066,7 @@ this.Load += new System.EventHandler(this.BufferViewer_Load); this.previewTable.ResumeLayout(false); this.previewTable.PerformLayout(); - this.tableLayoutPanel3.ResumeLayout(false); + this.renderTable.ResumeLayout(false); this.configCamControls.ResumeLayout(false); this.tableLayoutPanel2.ResumeLayout(false); this.tableLayoutPanel2.PerformLayout(); @@ -1127,7 +1127,7 @@ private System.Windows.Forms.ToolStripSeparator instSep; private System.Windows.Forms.ToolStripLabel instLabel; private System.Windows.Forms.ToolStripTextBox instanceIdxToolitem; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.TableLayoutPanel renderTable; private System.Windows.Forms.GroupBox configCamControls; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; private System.Windows.Forms.TextBox nearGuess; diff --git a/renderdocui/Windows/BufferViewer.cs b/renderdocui/Windows/BufferViewer.cs index ad989449a..1af5c5ebe 100644 --- a/renderdocui/Windows/BufferViewer.cs +++ b/renderdocui/Windows/BufferViewer.cs @@ -265,14 +265,8 @@ namespace renderdocui.Windows SetStyle(ControlStyles.OptimizedDoubleBuffer, true); - RenderHandle = render.Handle; + RecreateRenderPanel(); - render.Painting = true; - - render.MouseWheel += render_MouseWheel; - render.MouseWheelHandler = render_MouseWheel; - (render as Control).KeyDown += new KeyEventHandler(BufferViewer_KeyDown); - (render as Control).KeyUp += new KeyEventHandler(BufferViewer_KeyUp); ResetConfig(); MeshView = meshview; @@ -490,10 +484,39 @@ namespace renderdocui.Windows #region ILogViewerForm + void RecreateRenderPanel() + { + renderTable.Controls.Clear(); + + render.Dispose(); + + render = new Controls.NoScrollPanel(); + + render.Painting = true; + + render.BackColor = Color.Black; + render.Dock = DockStyle.Fill; + render.Paint += new PaintEventHandler(render_Paint); + render.MouseClick += new MouseEventHandler(render_MouseClick); + render.MouseDown += new MouseEventHandler(render_MouseDown); + render.MouseMove += new MouseEventHandler(render_MouseMove); + render.MouseWheel += render_MouseWheel; + render.MouseWheelHandler = render_MouseWheel; + render.KeyDown += new KeyEventHandler(render_KeyDown); + render.KeyUp += new KeyEventHandler(render_KeyUp); + + RenderHandle = render.Handle; + + renderTable.Controls.Add(render, 1, 0); + renderTable.Controls.Add(configCamControls, 0, 0); + } + public void OnLogfileClosed() { if (IsDisposed) return; + RecreateRenderPanel(); + m_Output = null; ResetConfig(); @@ -507,6 +530,8 @@ namespace renderdocui.Windows { ClearStoredData(); + RecreateRenderPanel(); + exportToToolStripMenuItem.Enabled = exportToolItem.Enabled = true; var draw = m_Core.CurDrawcall; @@ -2375,12 +2400,12 @@ namespace renderdocui.Windows }); } - void BufferViewer_KeyUp(object sender, KeyEventArgs e) + void render_KeyUp(object sender, KeyEventArgs e) { m_CurrentCamera.KeyUp(sender, e); } - void BufferViewer_KeyDown(object sender, KeyEventArgs e) + void render_KeyDown(object sender, KeyEventArgs e) { m_CurrentCamera.KeyDown(sender, e); } diff --git a/renderdocui/Windows/TextureViewer.Designer.cs b/renderdocui/Windows/TextureViewer.Designer.cs index 06b3891dc..46ef5af23 100644 --- a/renderdocui/Windows/TextureViewer.Designer.cs +++ b/renderdocui/Windows/TextureViewer.Designer.cs @@ -1156,7 +1156,7 @@ // // renderContainer // - this.renderContainer.BackColor = System.Drawing.Color.Maroon; + this.renderContainer.BackColor = System.Drawing.Color.Transparent; this.renderContainer.Controls.Add(this.render); this.renderContainer.Dock = System.Windows.Forms.DockStyle.Fill; this.renderContainer.Location = new System.Drawing.Point(0, 0); @@ -1167,19 +1167,7 @@ // // render // - this.render.BackColor = System.Drawing.Color.Black; - this.render.Dock = System.Windows.Forms.DockStyle.Fill; - this.render.Location = new System.Drawing.Point(0, 0); - this.render.Name = "render"; - this.render.Size = new System.Drawing.Size(404, 230); - this.render.TabIndex = 0; - this.render.Paint += new System.Windows.Forms.PaintEventHandler(this.render_Paint); - this.render.Layout += new System.Windows.Forms.LayoutEventHandler(this.render_Layout); - this.render.MouseClick += new System.Windows.Forms.MouseEventHandler(this.render_MouseClick); - this.render.MouseDown += new System.Windows.Forms.MouseEventHandler(this.render_MouseClick); - this.render.MouseLeave += new System.EventHandler(this.render_MouseLeave); - this.render.MouseMove += new System.Windows.Forms.MouseEventHandler(this.render_MouseMove); - this.render.MouseUp += new System.Windows.Forms.MouseEventHandler(this.render_MouseUp); + this.render.Name = "render_SETUP_AT_RUNTIME_SEE_CODE"; // // renderVScroll // @@ -1219,15 +1207,7 @@ // // pixelContext // - this.pixelContext.BackColor = System.Drawing.Color.Transparent; - this.pixelContextPanel.SetColumnSpan(this.pixelContext, 2); - this.pixelContext.Dock = System.Windows.Forms.DockStyle.Fill; - this.pixelContext.Location = new System.Drawing.Point(3, 3); - this.pixelContext.Name = "pixelContext"; - this.pixelContext.Size = new System.Drawing.Size(209, 121); - this.pixelContext.TabIndex = 6; - this.pixelContext.Paint += new System.Windows.Forms.PaintEventHandler(this.pixelContext_Paint); - this.pixelContext.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pixelContext_MouseClick); + this.pixelContext.Name = "pixelContext_SETUP_AT_RUNTIME_SEE_CODE"; // // debugPixelContext // diff --git a/renderdocui/Windows/TextureViewer.cs b/renderdocui/Windows/TextureViewer.cs index 87b7e7082..97c4786f3 100644 --- a/renderdocui/Windows/TextureViewer.cs +++ b/renderdocui/Windows/TextureViewer.cs @@ -417,20 +417,16 @@ namespace renderdocui.Windows mainLayout.Dock = DockStyle.Fill; - render.Painting = true; - pixelContext.Painting = true; - saveTex.Enabled = gotoLocationButton.Enabled = viewTexBuffer.Enabled = false; DockHandler.GetPersistStringCallback = PersistString; renderContainer.MouseWheelHandler = render_MouseWheel; - render.MouseWheel += render_MouseWheel; renderContainer.MouseDown += render_MouseClick; renderContainer.MouseMove += render_MouseMove; - render.KeyHandler = render_KeyDown; - pixelContext.KeyHandler = render_KeyDown; + RecreateRenderPanel(); + RecreateContextPanel(); rangeHistogram.RangeUpdated += new EventHandler(rangeHistogram_RangeUpdated); @@ -1044,6 +1040,54 @@ namespace renderdocui.Windows #region ILogViewerForm + void RecreateRenderPanel() + { + renderContainer.Controls.Clear(); + + render.Dispose(); + + render = new NoScrollPanel(); + + render.Painting = true; + + render.BackColor = Color.Black; + render.Dock = DockStyle.Fill; + render.Paint += new PaintEventHandler(this.render_Paint); + render.Layout += new LayoutEventHandler(this.render_Layout); + render.MouseClick += new MouseEventHandler(this.render_MouseClick); + render.MouseDown += new MouseEventHandler(this.render_MouseClick); + render.MouseLeave += new EventHandler(this.render_MouseLeave); + render.MouseMove += new MouseEventHandler(this.render_MouseMove); + render.MouseUp += new MouseEventHandler(this.render_MouseUp); + render.MouseWheel += render_MouseWheel; + render.KeyHandler = render_KeyDown; + + renderContainer.Controls.Add(render); + } + + void RecreateContextPanel() + { + pixelContextPanel.Controls.Clear(); + + pixelContext.Dispose(); + + pixelContext = new NoScrollPanel(); + + pixelContext.Painting = true; + + pixelContext.BackColor = Color.Transparent; + pixelContext.Dock = DockStyle.Fill; + pixelContext.Paint += new PaintEventHandler(pixelContext_Paint); + pixelContext.MouseClick += new MouseEventHandler(pixelContext_MouseClick); + pixelContext.KeyHandler = render_KeyDown; + + pixelContextPanel.Controls.Add(pixelContext, 0, 0); + pixelContextPanel.Controls.Add(debugPixelContext, 1, 1); + pixelContextPanel.Controls.Add(pixelHistory, 0, 1); + + pixelContextPanel.SetColumnSpan(pixelContext, 2); + } + public void OnLogfileLoaded() { var outConfig = new OutputConfig(); @@ -1056,6 +1100,9 @@ namespace renderdocui.Windows rwPanel.ClearThumbnails(); roPanel.ClearThumbnails(); + RecreateRenderPanel(); + RecreateContextPanel(); + m_HighWaterStatusLength = 0; IntPtr contextHandle = pixelContext.Handle; @@ -1118,6 +1165,9 @@ namespace renderdocui.Windows rwPanel.ClearThumbnails(); roPanel.ClearThumbnails(); + RecreateRenderPanel(); + RecreateContextPanel(); + texturefilter.SelectedIndex = 0; m_TexDisplay = new TextureDisplay(); @@ -1768,9 +1818,6 @@ namespace renderdocui.Windows UI_UpdateFittedScale(); - //render.Width = (int)(CurrentTexDisplayWidth * m_TexDisplay.scale); - //render.Height = (int)(CurrentTexDisplayHeight * m_TexDisplay.scale); - UI_UpdateTextureDetails(); UI_UpdateChannels();