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 @@
+