contrast, brightness, flags);
SetShaderParameters(YUVbuf);
Execute(nullptr, 4);
-
- // we changed view port, so we need to restore our real viewport.
- g_Windowing.RestoreViewPort();
-
}
CYUV2RGBShader::~CYUV2RGBShader()
m_effect.SetTexture("g_VTexture", YUVbuf->planes[2].texture);
m_effect.SetFloatArray("g_StepXY", m_texSteps, ARRAY_SIZE(m_texSteps));
- // we need to set view port to the full size of current render target
- ID3D11RenderTargetView* rtView = nullptr;
- g_Windowing.Get3D11Context()->OMGetRenderTargets(1, &rtView, nullptr);
-
- // get dimention of render target
- ID3D11Resource* rtResource = nullptr;
- rtView->GetResource(&rtResource);
- ID3D11Texture2D* rtTexture = nullptr;
- HRESULT hr = rtResource->QueryInterface(__uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&rtTexture));
-
- float viewPortWidth = 0.0f, viewPortHeight = 0.0f;
-
- if (S_OK == hr && rtTexture)
- {
- D3D11_TEXTURE2D_DESC rtDescr = {};
- rtTexture->GetDesc(&rtDescr);
- viewPortWidth = static_cast<float>(rtDescr.Width);
- viewPortHeight = static_cast<float>(rtDescr.Height);
- }
-
- SAFE_RELEASE(rtTexture);
- SAFE_RELEASE(rtResource);
- SAFE_RELEASE(rtView);
-
- D3D11_VIEWPORT viewPort = { 0.0f, 0.0f, viewPortWidth, viewPortHeight, 0.0, 1.0f };
- g_Windowing.Get3D11Context()->RSSetViewports(1, &viewPort);
+ UINT numPorts = 1;
+ D3D11_VIEWPORT viewPort;
+ g_Windowing.Get3D11Context()->RSGetViewports(&numPorts, &viewPort);
m_effect.SetFloatArray("g_viewPort", &viewPort.Width, 2);
}
void CWinRenderer::Stage1()
{
+ CD3D11_VIEWPORT viewPort(0.0f, 0.0f, 0.0f, 0.0f);
ID3D11DeviceContext* pContext = g_Windowing.Get3D11Context();
- // Store current render target and depth view.
- ID3D11RenderTargetView *oldRT = nullptr; ID3D11DepthStencilView* oldDS = nullptr;
- pContext->OMGetRenderTargets(1, &oldRT, &oldDS);
-
- if (!m_bUseHQScaler)
- {
- // disable depth
- pContext->OMSetRenderTargets(1, &oldRT, nullptr);
- // render video frame
- m_colorShader->Render(m_sourceRect, g_graphicsContext.StereoCorrection(m_destRect),
- CMediaSettings::GetInstance().GetCurrentVideoSettings().m_Contrast,
- CMediaSettings::GetInstance().GetCurrentVideoSettings().m_Brightness,
- m_iFlags, (YUVBuffer*)m_VideoBuffers[m_iYV12RenderBuffer]);
- }
- else
+ // store current render target and depth view.
+ ID3D11RenderTargetView *oldRTView = nullptr; ID3D11DepthStencilView* oldDSView = nullptr;
+ pContext->OMGetRenderTargets(1, &oldRTView, &oldDSView);
+ // select destination rectangle
+ CRect destRect = m_bUseHQScaler ? m_sourceRect : g_graphicsContext.StereoCorrection(m_destRect);
+ // select target view
+ ID3D11RenderTargetView* pRTView = m_bUseHQScaler ? m_IntermediateTarget.GetRenderTarget() : oldRTView;
+ // set destination render target
+ pContext->OMSetRenderTargets(1, &pRTView, nullptr);
+ // get rendertarget's dimension
+ if (pRTView)
{
- // At DX9 setting a new render target will cause the viewport
- // to be set to the full size of the new render target.
- // In DX11 we should do this manualy
- CD3D11_VIEWPORT viewPort(0.0f, 0.0f, static_cast<float>(m_IntermediateTarget.GetWidth()), static_cast<float>(m_IntermediateTarget.GetHeight()));
- pContext->RSSetViewports(1, &viewPort);
-
- ID3D11RenderTargetView *newRT = m_IntermediateTarget.GetRenderTarget();
-
- // this needs to avoid binding m_IntermediateTarget as shader resource and as render target at the same time
- CD3DHelper::PSClearShaderResources(pContext);
- // Switch the render target to the temporary destination
- pContext->OMSetRenderTargets(1, &newRT, nullptr);
-
- m_colorShader->Render(m_sourceRect, m_sourceRect,
- CMediaSettings::GetInstance().GetCurrentVideoSettings().m_Contrast,
- CMediaSettings::GetInstance().GetCurrentVideoSettings().m_Brightness,
- m_iFlags, (YUVBuffer*)m_VideoBuffers[m_iYV12RenderBuffer]);
- // Restore our view port.
- g_Windowing.RestoreViewPort();
- }
+ ID3D11Resource* pResource = nullptr;
+ ID3D11Texture2D* pTexture = nullptr;
+ pRTView->GetResource(&pResource);
+ if (SUCCEEDED(pResource->QueryInterface(__uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&pTexture))))
+ {
+ D3D11_TEXTURE2D_DESC desc;
+ pTexture->GetDesc(&desc);
+ viewPort = CD3D11_VIEWPORT(0.0f, 0.0f, desc.Width, desc.Height);
+ }
+ SAFE_RELEASE(pResource);
+ SAFE_RELEASE(pTexture);
+ }
+ // reset scissors for HQ scaler
+ if (m_bUseHQScaler)
+ g_Windowing.ResetScissors();
+ // reset view port
+ pContext->RSSetViewports(1, &viewPort);
+ // render video frame
+ m_colorShader->Render(m_sourceRect, destRect,
+ CMediaSettings::GetInstance().GetCurrentVideoSettings().m_Contrast,
+ CMediaSettings::GetInstance().GetCurrentVideoSettings().m_Brightness,
+ m_iFlags, (YUVBuffer*)m_VideoBuffers[m_iYV12RenderBuffer]);
+ // Restore our view port.
+ g_Windowing.RestoreViewPort();
// Restore the render target and depth view.
- pContext->OMSetRenderTargets(1, &oldRT, oldDS);
- SAFE_RELEASE(oldRT);
- SAFE_RELEASE(oldDS);
+ pContext->OMSetRenderTargets(1, &oldRTView, oldDSView);
+ SAFE_RELEASE(oldRTView);
+ SAFE_RELEASE(oldDSView);
}
void CWinRenderer::Stage2()