[3d] fix stretched gui in sbs/ou mode when using hq scalers
authorAnton Fedchin <afedchin@ruswizards.com>
Thu, 23 Jan 2014 19:28:28 +0000 (23:28 +0400)
committerAnton Fedchin <afedchin@ruswizards.com>
Sun, 9 Feb 2014 21:10:50 +0000 (01:10 +0400)
xbmc/cores/VideoRenderers/VideoShaders/WinVideoFilter.cpp
xbmc/cores/VideoRenderers/WinRenderer.cpp
xbmc/rendering/RenderSystem.h
xbmc/rendering/dx/RenderSystemDX.cpp
xbmc/rendering/dx/RenderSystemDX.h

index f619cba..17e9415 100644 (file)
@@ -203,6 +203,10 @@ bool CWinShader::Execute(std::vector<LPDIRECT3DSURFACE9> *vecRT, unsigned int ve
     oldRT->Release();
   }
 
+  // MSDN says: Setting a new render target will cause the viewport 
+  // to be set to the full size of the new render target.
+  // So we need restore our viewport
+  g_Windowing.RestoreViewPort();
   return true;
 }
 
@@ -769,6 +773,10 @@ bool CConvolutionShaderSeparable::ClearIntermediateRenderTarget()
   currentRT->Release();
   intermediateRT->Release();
 
+  // MSDN says: Setting a new render target will cause the viewport 
+  // to be set to the full size of the new render target.
+  // So we need restore our viewport
+  g_Windowing.RestoreViewPort();
   return true;
 }
 
index df7f27b..cc8fa4c 100644 (file)
@@ -954,6 +954,11 @@ void CWinRenderer::Stage1()
     // Restore the render target
     pD3DDevice->SetRenderTarget(0, oldRT);
 
+    // MSDN says: Setting a new render target will cause the viewport 
+    // to be set to the full size of the new render target.
+    // So we need restore our viewport
+    g_Windowing.RestoreViewPort();
+
     oldRT->Release();
     newRT->Release();
   }
index 2bceb67..fa64eba 100644 (file)
@@ -108,6 +108,7 @@ public:
 
   virtual void SetViewPort(CRect& viewPort) = 0;
   virtual void GetViewPort(CRect& viewPort) = 0;
+  virtual void RestoreViewPort() {};
 
   virtual void SetScissors(const CRect &rect) = 0;
   virtual void ResetScissors() = 0;
index 654c23f..527ba8b 100644 (file)
@@ -954,6 +954,14 @@ void CRenderSystemDX::SetViewPort(CRect& viewPort)
   m_pD3DDevice->SetViewport(&m_viewPort);
 }
 
+void CRenderSystemDX::RestoreViewPort()
+{
+  if (!m_bRenderCreated)
+    return;
+
+  m_pD3DDevice->SetViewport(&m_viewPort);
+}
+
 void CRenderSystemDX::SetScissors(const CRect& rect)
 {
   if (!m_bRenderCreated)
index 197fc8f..0697bed 100644 (file)
@@ -61,6 +61,7 @@ public:
 
   virtual void SetViewPort(CRect& viewPort);
   virtual void GetViewPort(CRect& viewPort);
+  virtual void RestoreViewPort();
 
   virtual void SetScissors(const CRect &rect);
   virtual void ResetScissors();