diff --git a/docs/Windows/TextureViewer.aml b/docs/Windows/TextureViewer.aml index c6d1da432..dc81b1d9e 100644 --- a/docs/Windows/TextureViewer.aml +++ b/docs/Windows/TextureViewer.aml @@ -296,6 +296,14 @@ + + + Flip Y + + This button toggles flipping the co-ordinate system in Y - y=0 is at the bottom of the window + instead of at the top. + + Render Overlay diff --git a/docs/imgs/icons/flip_y.png b/docs/imgs/icons/flip_y.png new file mode 100644 index 000000000..e3fb21ea0 Binary files /dev/null and b/docs/imgs/icons/flip_y.png differ diff --git a/docs/renderdoc.shfbproj b/docs/renderdoc.shfbproj index 23faf2537..b68d5a151 100644 --- a/docs/renderdoc.shfbproj +++ b/docs/renderdoc.shfbproj @@ -118,6 +118,10 @@ + + flip_y + flip y + DebugMessages Debug Messages Window diff --git a/renderdoc/data/glsl/texdisplay.frag b/renderdoc/data/glsl/texdisplay.frag index 15a34553d..493e32cfc 100644 --- a/renderdoc/data/glsl/texdisplay.frag +++ b/renderdoc/data/glsl/texdisplay.frag @@ -35,7 +35,7 @@ layout (binding = 0, std140) uniform texdisplay float RangeMinimum; float InverseRangeSize; float MipLevel; - float dummy2; + int FlipY; vec3 TextureResolutionPS; int OutputDisplayFormat; @@ -64,7 +64,7 @@ void main(void) // TODO: Use MipLevel and Slice parameters // TODO: Sample from a point or linear sampler depending on if we're // upscaling (point) or downscaling mip 0 (linear) - vec4 col = texture(tex0, vec2(uv.x, 1.0f-uv.y)); + vec4 col = texture(tex0, vec2(uv.x, FlipY > 0 ? uv.y : 1.0f-uv.y)); if(RawOutput != 0) { diff --git a/renderdoc/data/hlsl/debugcbuffers.h b/renderdoc/data/hlsl/debugcbuffers.h index f83aea1be..0e0fe5599 100644 --- a/renderdoc/data/hlsl/debugcbuffers.h +++ b/renderdoc/data/hlsl/debugcbuffers.h @@ -78,7 +78,7 @@ cbuffer DebugPixelCBufferData REG(b0) float RangeMinimum; float InverseRangeSize; float MipLevel; - int padding; + int FlipY; float3 WireframeColour; int OutputDisplayFormat; diff --git a/renderdoc/data/hlsl/debugdisplay.hlsl b/renderdoc/data/hlsl/debugdisplay.hlsl index 851126dbb..0aa8eb2bb 100644 --- a/renderdoc/data/hlsl/debugdisplay.hlsl +++ b/renderdoc/data/hlsl/debugdisplay.hlsl @@ -45,20 +45,25 @@ float4 RENDERDOC_TexDisplayPS(v2f IN) : SV_Target0 uint4 ucol = 0; int4 scol = 0; + float2 uvTex = IN.tex.xy; + + if(FlipY) + uvTex.y = 1.0f - uvTex.y; + if(uintTex) { ucol = SampleTextureUInt4(OutputDisplayFormat & TEXDISPLAY_TYPEMASK, - IN.tex.xy, Slice, MipLevel, TextureResolutionPS); + uvTex, Slice, MipLevel, TextureResolutionPS); } else if(sintTex) { scol = SampleTextureInt4 (OutputDisplayFormat & TEXDISPLAY_TYPEMASK, - IN.tex.xy, Slice, MipLevel, TextureResolutionPS); + uvTex, Slice, MipLevel, TextureResolutionPS); } else { col = SampleTextureFloat4(OutputDisplayFormat & TEXDISPLAY_TYPEMASK, (ScalePS < 1 && MipLevel == 0), - IN.tex.xy, Slice, MipLevel, TextureResolutionPS); + uvTex, Slice, MipLevel, TextureResolutionPS); } if(RawOutput) diff --git a/renderdoc/driver/d3d11/d3d11_analyse.cpp b/renderdoc/driver/d3d11/d3d11_analyse.cpp index b42764ce7..5eb8f60d4 100644 --- a/renderdoc/driver/d3d11/d3d11_analyse.cpp +++ b/renderdoc/driver/d3d11/d3d11_analyse.cpp @@ -1414,6 +1414,7 @@ void D3D11DebugManager::PickPixel(ResourceId texture, uint32_t x, uint32_t y, ui texDisplay.Red = texDisplay.Green = texDisplay.Blue = texDisplay.Alpha = true; texDisplay.HDRMul = -1.0f; texDisplay.linearDisplayAsGamma = true; + texDisplay.FlipY = false; texDisplay.mip = mip; texDisplay.CustomShader = ResourceId(); texDisplay.sliceFace = sliceFace; @@ -2060,6 +2061,7 @@ ResourceId D3D11DebugManager::ApplyCustomShader(ResourceId shader, ResourceId te TextureDisplay disp; disp.Red = disp.Green = disp.Blue = disp.Alpha = true; + disp.FlipY = false; disp.offx = 0.0f; disp.offy = 0.0f; disp.CustomShader = shader; diff --git a/renderdoc/driver/d3d11/d3d11_debug.cpp b/renderdoc/driver/d3d11/d3d11_debug.cpp index 776a08b95..6d1afa9bf 100644 --- a/renderdoc/driver/d3d11/d3d11_debug.cpp +++ b/renderdoc/driver/d3d11/d3d11_debug.cpp @@ -3271,6 +3271,8 @@ bool D3D11DebugManager::RenderTexture(TextureDisplay cfg) pixelData.WireframeColour.x = cfg.HDRMul; pixelData.RawOutput = cfg.rawoutput ? 1 : 0; + + pixelData.FlipY = cfg.FlipY ? 1 : 0; TextureShaderDetails details = GetShaderDetails(cfg.texid, cfg.rawoutput ? true : false); diff --git a/renderdoc/driver/gl/gl_debug.cpp b/renderdoc/driver/gl/gl_debug.cpp index 702fe0ec6..1e98e9067 100644 --- a/renderdoc/driver/gl/gl_debug.cpp +++ b/renderdoc/driver/gl/gl_debug.cpp @@ -197,6 +197,7 @@ void GLReplay::PickPixel(ResourceId texture, uint32_t x, uint32_t y, uint32_t sl TextureDisplay texDisplay; texDisplay.Red = texDisplay.Green = texDisplay.Blue = texDisplay.Alpha = true; + texDisplay.FlipY = false; texDisplay.HDRMul = -1.0f; texDisplay.linearDisplayAsGamma = true; texDisplay.mip = mip; @@ -240,23 +241,23 @@ bool GLReplay::RenderTexture(TextureDisplay cfg) struct uboData { - Vec2f Position; - float Scale; - float HDRMul; + Vec2f Position; + float Scale; + float HDRMul; - Vec4f Channels; + Vec4f Channels; - float RangeMinimum; - float InverseRangeSize; - float MipLevel; - float dummy2; + float RangeMinimum; + float InverseRangeSize; + float MipLevel; + int32_t FlipY; - Vec3f TextureResolutionPS; - int OutputDisplayFormat; + Vec3f TextureResolutionPS; + int32_t OutputDisplayFormat; - Vec2f OutputRes; - int RawOutput; - float Slice; + Vec2f OutputRes; + int32_t RawOutput; + float Slice; }; uboData *ubo = (uboData *)gl.glMapBufferRange(eGL_UNIFORM_BUFFER, 0, sizeof(uboData), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); @@ -290,6 +291,8 @@ bool GLReplay::RenderTexture(TextureDisplay cfg) } ubo->HDRMul = cfg.HDRMul; + + ubo->FlipY = cfg.FlipY ? 1 : 0; if(cfg.rangemax <= cfg.rangemin) cfg.rangemax += 0.00001f; diff --git a/renderdoc/replay/control_types.h b/renderdoc/replay/control_types.h index 0f67760ec..8fb011129 100644 --- a/renderdoc/replay/control_types.h +++ b/renderdoc/replay/control_types.h @@ -59,6 +59,7 @@ struct TextureDisplay float rangemax; float scale; bool32 Red, Green, Blue, Alpha; + bool32 FlipY; float HDRMul; bool32 linearDisplayAsGamma; ResourceId CustomShader; diff --git a/renderdoc/replay/replay_output.cpp b/renderdoc/replay/replay_output.cpp index 477bb795c..91b3d95b9 100644 --- a/renderdoc/replay/replay_output.cpp +++ b/renderdoc/replay/replay_output.cpp @@ -362,6 +362,7 @@ bool ReplayOutput::Display() disp.Alpha = false; disp.HDRMul = -1.0f; disp.linearDisplayAsGamma = true; + disp.FlipY = false; disp.mip = 0; disp.CustomShader = ResourceId(); disp.texid = m_pDevice->GetLiveID(m_Thumbnails[i].texture); @@ -471,6 +472,7 @@ void ReplayOutput::DisplayTex() texDisplay.CustomShader = ResourceId(); texDisplay.scale = m_RenderData.texDisplay.scale; texDisplay.HDRMul = -1.0f; + texDisplay.FlipY = false; texDisplay.rangemin = 0.0f; texDisplay.rangemax = 1.0f; diff --git a/renderdoccmd/renderdoccmd_win32.cpp b/renderdoccmd/renderdoccmd_win32.cpp index 80e2389d3..b5ea99942 100644 --- a/renderdoccmd/renderdoccmd_win32.cpp +++ b/renderdoccmd/renderdoccmd_win32.cpp @@ -242,6 +242,8 @@ void DisplayRendererPreview(ReplayRenderer *renderer) d.overlay = eTexOverlay_None; d.CustomShader = ResourceId(); d.HDRMul = -1.0f; + d.linearDisplayAsGamma = true; + d.FlipY = false; d.rangemin = 0.0f; d.rangemax = 1.0f; d.scale = 1.0f; @@ -249,6 +251,8 @@ void DisplayRendererPreview(ReplayRenderer *renderer) d.offy = 0.0f; d.sliceFace = 0; d.rawoutput = false; + d.lightBackgroundColour = d.darkBackgroundColour = + FloatVector(0.0f, 0.0f, 0.0f, 0.0f); d.Red = d.Green = d.Blue = true; d.Alpha = false; diff --git a/renderdocui/Interop/FetchInfo.cs b/renderdocui/Interop/FetchInfo.cs index 0bd892e37..8825cf676 100644 --- a/renderdocui/Interop/FetchInfo.cs +++ b/renderdocui/Interop/FetchInfo.cs @@ -413,6 +413,7 @@ namespace renderdoc public float rangemax = 1.0f; public float scale = 1.0f; public bool Red = true, Green = true, Blue = true, Alpha = false; + public bool FlipY = false; public float HDRMul = -1.0f; public bool linearDisplayAsGamma = true; public ResourceId CustomShader = ResourceId.Null; diff --git a/renderdocui/Properties/Resources.Designer.cs b/renderdocui/Properties/Resources.Designer.cs index 59a16dc50..43c1df138 100644 --- a/renderdocui/Properties/Resources.Designer.cs +++ b/renderdocui/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18408 +// Runtime Version:4.0.30319.17929 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -240,6 +240,16 @@ namespace renderdocui.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap flip_y { + get { + object obj = ResourceManager.GetObject("flip_y", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/renderdocui/Properties/Resources.resx b/renderdocui/Properties/Resources.resx index 499539876..4143a3aee 100644 --- a/renderdocui/Properties/Resources.resx +++ b/renderdocui/Properties/Resources.resx @@ -274,4 +274,7 @@ ..\Resources\wireframe_mesh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\flip_y.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/renderdocui/Resources/flip_y.png b/renderdocui/Resources/flip_y.png new file mode 100644 index 000000000..e3fb21ea0 Binary files /dev/null and b/renderdocui/Resources/flip_y.png differ diff --git a/renderdocui/Windows/TextureViewer.Designer.cs b/renderdocui/Windows/TextureViewer.Designer.cs index 1e8d74501..8f16f6ae0 100644 --- a/renderdocui/Windows/TextureViewer.Designer.cs +++ b/renderdocui/Windows/TextureViewer.Designer.cs @@ -33,21 +33,21 @@ System.Windows.Forms.ToolStripLabel toolStripLabel2; System.Windows.Forms.ToolStripLabel toolStripLabel3; System.Windows.Forms.ToolStripLabel toolStripLabel1; - WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin(); - WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin1 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin(); - WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient1 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin(); - WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient2 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient3 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient4 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient5 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient3 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient6 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient7 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin2 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin(); + WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin2 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin(); + WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient4 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient8 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin2 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin(); + WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient9 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient5 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient10 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient11 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient12 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient6 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient13 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient14 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TextureViewer)); this.saveTextureDialog = new System.Windows.Forms.SaveFileDialog(); this.rightclickMenu = new System.Windows.Forms.ContextMenuStrip(this.components); @@ -78,6 +78,7 @@ this.toolStripLabel4 = new System.Windows.Forms.ToolStripLabel(); this.fitToWindow = new System.Windows.Forms.ToolStripButton(); this.zoomOption = new System.Windows.Forms.ToolStripComboBox(); + this.flip_y = new System.Windows.Forms.ToolStripButton(); this.overlayStrip = new System.Windows.Forms.ToolStrip(); this.toolStripLabel5 = new System.Windows.Forms.ToolStripLabel(); this.overlay = new System.Windows.Forms.ToolStripComboBox(); @@ -375,52 +376,52 @@ this.dockPanel.RaiseTabsOnDragOver = false; this.dockPanel.ShowDocumentIcon = true; this.dockPanel.Size = new System.Drawing.Size(1093, 90); - dockPanelGradient1.EndColor = System.Drawing.SystemColors.ControlLight; - dockPanelGradient1.StartColor = System.Drawing.SystemColors.ControlLight; - autoHideStripSkin1.DockStripGradient = dockPanelGradient1; - tabGradient1.EndColor = System.Drawing.SystemColors.Control; - tabGradient1.StartColor = System.Drawing.SystemColors.Control; - tabGradient1.TextColor = System.Drawing.SystemColors.ControlDarkDark; - autoHideStripSkin1.TabGradient = tabGradient1; - autoHideStripSkin1.TextFont = new System.Drawing.Font("Tahoma", 8.25F); - dockPanelSkin1.AutoHideStripSkin = autoHideStripSkin1; - tabGradient2.EndColor = System.Drawing.SystemColors.ControlLightLight; - tabGradient2.StartColor = System.Drawing.SystemColors.ControlLightLight; - tabGradient2.TextColor = System.Drawing.SystemColors.ControlText; - dockPaneStripGradient1.ActiveTabGradient = tabGradient2; - dockPanelGradient2.EndColor = System.Drawing.SystemColors.Control; - dockPanelGradient2.StartColor = System.Drawing.SystemColors.Control; - dockPaneStripGradient1.DockStripGradient = dockPanelGradient2; - tabGradient3.EndColor = System.Drawing.SystemColors.ControlLight; - tabGradient3.StartColor = System.Drawing.SystemColors.ControlLight; - tabGradient3.TextColor = System.Drawing.SystemColors.ControlText; - dockPaneStripGradient1.InactiveTabGradient = tabGradient3; - dockPaneStripSkin1.DocumentGradient = dockPaneStripGradient1; - dockPaneStripSkin1.TextFont = new System.Drawing.Font("Tahoma", 8.25F); - tabGradient4.EndColor = System.Drawing.SystemColors.ActiveCaption; - tabGradient4.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical; - tabGradient4.StartColor = System.Drawing.SystemColors.GradientActiveCaption; - tabGradient4.TextColor = System.Drawing.SystemColors.ActiveCaptionText; - dockPaneStripToolWindowGradient1.ActiveCaptionGradient = tabGradient4; - tabGradient5.EndColor = System.Drawing.SystemColors.Control; - tabGradient5.StartColor = System.Drawing.SystemColors.Control; - tabGradient5.TextColor = System.Drawing.SystemColors.ControlText; - dockPaneStripToolWindowGradient1.ActiveTabGradient = tabGradient5; - dockPanelGradient3.EndColor = System.Drawing.SystemColors.ControlLight; - dockPanelGradient3.StartColor = System.Drawing.SystemColors.ControlLight; - dockPaneStripToolWindowGradient1.DockStripGradient = dockPanelGradient3; - tabGradient6.EndColor = System.Drawing.SystemColors.InactiveCaption; - tabGradient6.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical; - tabGradient6.StartColor = System.Drawing.SystemColors.GradientInactiveCaption; - tabGradient6.TextColor = System.Drawing.SystemColors.InactiveCaptionText; - dockPaneStripToolWindowGradient1.InactiveCaptionGradient = tabGradient6; - tabGradient7.EndColor = System.Drawing.Color.Transparent; - tabGradient7.StartColor = System.Drawing.Color.Transparent; - tabGradient7.TextColor = System.Drawing.SystemColors.ControlDarkDark; - dockPaneStripToolWindowGradient1.InactiveTabGradient = tabGradient7; - dockPaneStripSkin1.ToolWindowGradient = dockPaneStripToolWindowGradient1; - dockPanelSkin1.DockPaneStripSkin = dockPaneStripSkin1; - this.dockPanel.Skin = dockPanelSkin1; + dockPanelGradient4.EndColor = System.Drawing.SystemColors.ControlLight; + dockPanelGradient4.StartColor = System.Drawing.SystemColors.ControlLight; + autoHideStripSkin2.DockStripGradient = dockPanelGradient4; + tabGradient8.EndColor = System.Drawing.SystemColors.Control; + tabGradient8.StartColor = System.Drawing.SystemColors.Control; + tabGradient8.TextColor = System.Drawing.SystemColors.ControlDarkDark; + autoHideStripSkin2.TabGradient = tabGradient8; + autoHideStripSkin2.TextFont = new System.Drawing.Font("Tahoma", 8.25F); + dockPanelSkin2.AutoHideStripSkin = autoHideStripSkin2; + tabGradient9.EndColor = System.Drawing.SystemColors.ControlLightLight; + tabGradient9.StartColor = System.Drawing.SystemColors.ControlLightLight; + tabGradient9.TextColor = System.Drawing.SystemColors.ControlText; + dockPaneStripGradient2.ActiveTabGradient = tabGradient9; + dockPanelGradient5.EndColor = System.Drawing.SystemColors.Control; + dockPanelGradient5.StartColor = System.Drawing.SystemColors.Control; + dockPaneStripGradient2.DockStripGradient = dockPanelGradient5; + tabGradient10.EndColor = System.Drawing.SystemColors.ControlLight; + tabGradient10.StartColor = System.Drawing.SystemColors.ControlLight; + tabGradient10.TextColor = System.Drawing.SystemColors.ControlText; + dockPaneStripGradient2.InactiveTabGradient = tabGradient10; + dockPaneStripSkin2.DocumentGradient = dockPaneStripGradient2; + dockPaneStripSkin2.TextFont = new System.Drawing.Font("Tahoma", 8.25F); + tabGradient11.EndColor = System.Drawing.SystemColors.ActiveCaption; + tabGradient11.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical; + tabGradient11.StartColor = System.Drawing.SystemColors.GradientActiveCaption; + tabGradient11.TextColor = System.Drawing.SystemColors.ActiveCaptionText; + dockPaneStripToolWindowGradient2.ActiveCaptionGradient = tabGradient11; + tabGradient12.EndColor = System.Drawing.SystemColors.Control; + tabGradient12.StartColor = System.Drawing.SystemColors.Control; + tabGradient12.TextColor = System.Drawing.SystemColors.ControlText; + dockPaneStripToolWindowGradient2.ActiveTabGradient = tabGradient12; + dockPanelGradient6.EndColor = System.Drawing.SystemColors.ControlLight; + dockPanelGradient6.StartColor = System.Drawing.SystemColors.ControlLight; + dockPaneStripToolWindowGradient2.DockStripGradient = dockPanelGradient6; + tabGradient13.EndColor = System.Drawing.SystemColors.InactiveCaption; + tabGradient13.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical; + tabGradient13.StartColor = System.Drawing.SystemColors.GradientInactiveCaption; + tabGradient13.TextColor = System.Drawing.SystemColors.InactiveCaptionText; + dockPaneStripToolWindowGradient2.InactiveCaptionGradient = tabGradient13; + tabGradient14.EndColor = System.Drawing.Color.Transparent; + tabGradient14.StartColor = System.Drawing.Color.Transparent; + tabGradient14.TextColor = System.Drawing.SystemColors.ControlDarkDark; + dockPaneStripToolWindowGradient2.InactiveTabGradient = tabGradient14; + dockPaneStripSkin2.ToolWindowGradient = dockPaneStripToolWindowGradient2; + dockPanelSkin2.DockPaneStripSkin = dockPaneStripSkin2; + this.dockPanel.Skin = dockPanelSkin2; this.dockPanel.TabIndex = 0; // // depthstencilPanel @@ -468,11 +469,12 @@ this.zoomStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripLabel4, this.fitToWindow, - this.zoomOption}); + this.zoomOption, + this.flip_y}); this.zoomStrip.Location = new System.Drawing.Point(0, 50); this.zoomStrip.Margin = new System.Windows.Forms.Padding(0, 0, 12, 0); this.zoomStrip.Name = "zoomStrip"; - this.zoomStrip.Size = new System.Drawing.Size(204, 25); + this.zoomStrip.Size = new System.Drawing.Size(258, 25); this.zoomStrip.TabIndex = 2; // // toolStripLabel4 @@ -511,6 +513,17 @@ this.zoomOption.SelectedIndexChanged += new System.EventHandler(this.zoomOption_SelectedIndexChanged); this.zoomOption.KeyDown += new System.Windows.Forms.KeyEventHandler(this.zoomOption_KeyDown); // + // flip_y + // + this.flip_y.CheckOnClick = true; + this.flip_y.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.flip_y.Image = global::renderdocui.Properties.Resources.flip_y; + this.flip_y.ImageTransparentColor = System.Drawing.Color.Magenta; + this.flip_y.Name = "flip_y"; + this.flip_y.Size = new System.Drawing.Size(23, 22); + this.flip_y.Text = "Flip Y"; + this.flip_y.CheckedChanged += new System.EventHandler(this.updateChannelsHandler); + // // overlayStrip // this.overlayStrip.Dock = System.Windows.Forms.DockStyle.None; @@ -518,7 +531,7 @@ this.overlayStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripLabel5, this.overlay}); - this.overlayStrip.Location = new System.Drawing.Point(216, 50); + this.overlayStrip.Location = new System.Drawing.Point(270, 50); this.overlayStrip.Margin = new System.Windows.Forms.Padding(0, 0, 12, 0); this.overlayStrip.Name = "overlayStrip"; this.overlayStrip.Size = new System.Drawing.Size(171, 25); @@ -1419,6 +1432,7 @@ private System.Windows.Forms.ToolStripButton customCreate; private System.Windows.Forms.ToolStripButton customDelete; private System.Windows.Forms.ToolStripButton customEdit; + private System.Windows.Forms.ToolStripButton flip_y; private System.Windows.Forms.ToolStripButton gammaDisplay; private System.Windows.Forms.ToolStripSeparator gammaSeparator; private System.Windows.Forms.ToolTip toolTip; diff --git a/renderdocui/Windows/TextureViewer.cs b/renderdocui/Windows/TextureViewer.cs index 4e07201e2..448549c91 100644 --- a/renderdocui/Windows/TextureViewer.cs +++ b/renderdocui/Windows/TextureViewer.cs @@ -1353,7 +1353,11 @@ namespace renderdocui.Windows } } - string hoverCoords = String.Format("{0}, {1}", m_CurHoverPixel.X >> (int)m_TexDisplay.mip, m_CurHoverPixel.Y >> (int)m_TexDisplay.mip); + int y = m_CurHoverPixel.Y >> (int)m_TexDisplay.mip; + if (m_TexDisplay.FlipY) + y = (int)tex.height - y; + + string hoverCoords = String.Format("{0}, {1}", m_CurHoverPixel.X >> (int)m_TexDisplay.mip, y); string statusText = "Hover - " + hoverCoords; if (m_CurHoverPixel.X > tex.width || m_CurHoverPixel.Y > tex.height || m_CurHoverPixel.X < 0 || m_CurHoverPixel.Y < 0) @@ -1361,8 +1365,12 @@ namespace renderdocui.Windows if (m_CurPixelValue != null) { + y = m_PickedPoint.Y >> (int)m_TexDisplay.mip; + if (m_TexDisplay.FlipY) + y = (int)tex.height - y; + statusText += " - Right click - " + - (m_PickedPoint.X >> (int)m_TexDisplay.mip) + "," + (m_PickedPoint.Y >> (int)m_TexDisplay.mip) + ": "; + (m_PickedPoint.X >> (int)m_TexDisplay.mip) + "," + y + ": "; PixelValue val = m_CurPixelValue; @@ -1584,6 +1592,8 @@ namespace renderdocui.Windows } } + m_TexDisplay.FlipY = flip_y.Checked; + channelStrip.ResumeLayout(); m_Core.Renderer.BeginInvoke(RT_UpdateAndDisplay); @@ -1894,9 +1904,16 @@ namespace renderdocui.Windows private void RT_PickPixelsAndUpdate(int x, int y, bool ctx) { + FetchTexture tex = CurrentTexture; + + if (tex == null) return; + if(ctx) m_Output.SetPixelContextLocation((UInt32)x, (UInt32)y); + if (m_TexDisplay.FlipY) + y = (int)tex.height - y; + var pickValue = m_Output.PickPixel(m_TexDisplay.texid, true, (UInt32)x, (UInt32)y, m_TexDisplay.sliceFace, m_TexDisplay.mip); PixelValue realValue = null; @@ -2022,13 +2039,22 @@ namespace renderdocui.Windows if (e.Button == MouseButtons.None && m_TexDisplay.texid != ResourceId.Null) { - m_Core.Renderer.BeginInvoke((ReplayRenderer r) => - { - if (m_Output != null) - RT_UpdateHoverColour(m_Output.PickPixel(m_TexDisplay.texid, true, (UInt32)m_CurHoverPixel.X, (UInt32)m_CurHoverPixel.Y, - m_TexDisplay.sliceFace, m_TexDisplay.mip)); - }); + FetchTexture tex = CurrentTexture; + if (tex != null) + { + m_Core.Renderer.BeginInvoke((ReplayRenderer r) => + { + if (m_Output != null) + { + UInt32 y = (UInt32)m_CurHoverPixel.Y; + if (m_TexDisplay.FlipY) + y = tex.height - y; + RT_UpdateHoverColour(m_Output.PickPixel(m_TexDisplay.texid, true, (UInt32)m_CurHoverPixel.X, y, + m_TexDisplay.sliceFace, m_TexDisplay.mip)); + } + }); + } } Panel p = renderContainer; diff --git a/renderdocui/renderdocui.csproj b/renderdocui/renderdocui.csproj index c7803f4b7..da95c8c5f 100644 --- a/renderdocui/renderdocui.csproj +++ b/renderdocui/renderdocui.csproj @@ -451,6 +451,7 @@ +