mirror of
https://github.com/smartcmd/MinecraftConsoles.git
synced 2026-08-20 09:57:09 +00:00
Improve gamma pass and cache viewport size
This commit is contained in:
parent
c2bd085547
commit
3e3d0384e2
|
|
@ -45,6 +45,8 @@ private:
|
||||||
bool m_wineMode = false;
|
bool m_wineMode = false;
|
||||||
D3D11_VIEWPORT m_customViewport;
|
D3D11_VIEWPORT m_customViewport;
|
||||||
bool m_useCustomViewport = false;
|
bool m_useCustomViewport = false;
|
||||||
|
UINT m_gammaTexWidth = 0;
|
||||||
|
UINT m_gammaTexHeight = 0;
|
||||||
|
|
||||||
struct GammaCBData
|
struct GammaCBData
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -937,7 +937,7 @@ float GameRenderer::ComputeGammaFromSlider(float slider0to100)
|
||||||
slider = min(slider, 100.0f);
|
slider = min(slider, 100.0f);
|
||||||
|
|
||||||
if (slider > 50.0f)
|
if (slider > 50.0f)
|
||||||
return 1.0f + (slider - 50.0f) / 50.0f * 1.2f; // 1.0 -> 2.2
|
return 1.0f + (slider - 50.0f) / 50.0f * 0.5f; // 1.0 -> 1.5
|
||||||
else
|
else
|
||||||
return 1.0f - (50.0f - slider) / 50.0f * 0.5f; // 1.0 -> 0.5
|
return 1.0f - (50.0f - slider) / 50.0f * 0.5f; // 1.0 -> 0.5
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,11 @@ const char* PostProcesser::g_gammaPSCode =
|
||||||
"float4 main(float4 pos : SV_Position, float2 uv : TEXCOORD0) : SV_Target\n"
|
"float4 main(float4 pos : SV_Position, float2 uv : TEXCOORD0) : SV_Target\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" float4 color = sceneTex.Sample(sceneSampler, uv);\n"
|
" float4 color = sceneTex.Sample(sceneSampler, uv);\n"
|
||||||
" color.rgb = pow(max(color.rgb, 0.0), 1.0 / gamma);\n"
|
"\n"
|
||||||
|
" color.rgb = max(color.rgb, 0.0);\n"
|
||||||
|
"\n"
|
||||||
|
" color.rgb = pow(color.rgb, 1.0 / gamma);\n"
|
||||||
|
"\n"
|
||||||
" return color;\n"
|
" return color;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
|
|
@ -75,6 +79,9 @@ void PostProcesser::Init()
|
||||||
pBackBuffer->GetDesc(&bbDesc);
|
pBackBuffer->GetDesc(&bbDesc);
|
||||||
pBackBuffer->Release();
|
pBackBuffer->Release();
|
||||||
|
|
||||||
|
m_gammaTexWidth = bbDesc.Width;
|
||||||
|
m_gammaTexHeight = bbDesc.Height;
|
||||||
|
|
||||||
DXGI_FORMAT texFormat = bbDesc.Format;
|
DXGI_FORMAT texFormat = bbDesc.Format;
|
||||||
if (m_wineMode)
|
if (m_wineMode)
|
||||||
{
|
{
|
||||||
|
|
@ -219,7 +226,9 @@ void PostProcesser::Apply() const
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ctx->CopyResource(m_pGammaOffscreenTex, pBackBuffer);
|
D3D11_BOX srcBox = { 0, 0, 0, m_gammaTexWidth, m_gammaTexHeight, 1 };
|
||||||
|
ctx->CopySubresourceRegion(m_pGammaOffscreenTex, 0, 0, 0, 0, pBackBuffer, 0, &srcBox);
|
||||||
|
pBackBuffer->Release();
|
||||||
|
|
||||||
D3D11_MAPPED_SUBRESOURCE mapped;
|
D3D11_MAPPED_SUBRESOURCE mapped;
|
||||||
const D3D11_MAP mapType = m_wineMode ? D3D11_MAP_WRITE_NO_OVERWRITE : D3D11_MAP_WRITE_DISCARD;
|
const D3D11_MAP mapType = m_wineMode ? D3D11_MAP_WRITE_NO_OVERWRITE : D3D11_MAP_WRITE_DISCARD;
|
||||||
|
|
@ -236,16 +245,12 @@ void PostProcesser::Apply() const
|
||||||
ctx->OMGetRenderTargets(1, &oldRTV, &oldDSV);
|
ctx->OMGetRenderTargets(1, &oldRTV, &oldDSV);
|
||||||
|
|
||||||
UINT numViewports = 1;
|
UINT numViewports = 1;
|
||||||
D3D11_VIEWPORT oldViewport;
|
D3D11_VIEWPORT oldViewport = {};
|
||||||
ctx->RSGetViewports(&numViewports, &oldViewport);
|
ctx->RSGetViewports(&numViewports, &oldViewport);
|
||||||
|
|
||||||
ID3D11RenderTargetView* bbRTV = g_pRenderTargetView;
|
ID3D11RenderTargetView* bbRTV = g_pRenderTargetView;
|
||||||
ctx->OMSetRenderTargets(1, &bbRTV, nullptr);
|
ctx->OMSetRenderTargets(1, &bbRTV, nullptr);
|
||||||
|
|
||||||
D3D11_TEXTURE2D_DESC bbDesc;
|
|
||||||
pBackBuffer->GetDesc(&bbDesc);
|
|
||||||
pBackBuffer->Release();
|
|
||||||
|
|
||||||
D3D11_VIEWPORT vp;
|
D3D11_VIEWPORT vp;
|
||||||
if (m_useCustomViewport)
|
if (m_useCustomViewport)
|
||||||
{
|
{
|
||||||
|
|
@ -253,8 +258,8 @@ void PostProcesser::Apply() const
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vp.Width = static_cast<FLOAT>(bbDesc.Width);
|
vp.Width = static_cast<FLOAT>(m_gammaTexWidth);
|
||||||
vp.Height = static_cast<FLOAT>(bbDesc.Height);
|
vp.Height = static_cast<FLOAT>(m_gammaTexHeight);
|
||||||
vp.MinDepth = 0.0f;
|
vp.MinDepth = 0.0f;
|
||||||
vp.MaxDepth = 1.0f;
|
vp.MaxDepth = 1.0f;
|
||||||
vp.TopLeftX = 0;
|
vp.TopLeftX = 0;
|
||||||
|
|
@ -313,7 +318,8 @@ void PostProcesser::CopyBackbuffer()
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ctx->CopyResource(m_pGammaOffscreenTex, pBackBuffer);
|
D3D11_BOX srcBox = { 0, 0, 0, m_gammaTexWidth, m_gammaTexHeight, 1 };
|
||||||
|
ctx->CopySubresourceRegion(m_pGammaOffscreenTex, 0, 0, 0, 0, pBackBuffer, 0, &srcBox);
|
||||||
pBackBuffer->Release();
|
pBackBuffer->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -342,7 +348,7 @@ void PostProcesser::ApplyFromCopied() const
|
||||||
ctx->OMGetRenderTargets(1, &oldRTV, &oldDSV);
|
ctx->OMGetRenderTargets(1, &oldRTV, &oldDSV);
|
||||||
|
|
||||||
UINT numViewports = 1;
|
UINT numViewports = 1;
|
||||||
D3D11_VIEWPORT oldViewport;
|
D3D11_VIEWPORT oldViewport = {};
|
||||||
ctx->RSGetViewports(&numViewports, &oldViewport);
|
ctx->RSGetViewports(&numViewports, &oldViewport);
|
||||||
|
|
||||||
ID3D11RenderTargetView* bbRTV = g_pRenderTargetView;
|
ID3D11RenderTargetView* bbRTV = g_pRenderTargetView;
|
||||||
|
|
@ -355,10 +361,8 @@ void PostProcesser::ApplyFromCopied() const
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
D3D11_TEXTURE2D_DESC texDesc;
|
vp.Width = static_cast<FLOAT>(m_gammaTexWidth);
|
||||||
m_pGammaOffscreenTex->GetDesc(&texDesc);
|
vp.Height = static_cast<FLOAT>(m_gammaTexHeight);
|
||||||
vp.Width = static_cast<FLOAT>(texDesc.Width);
|
|
||||||
vp.Height = static_cast<FLOAT>(texDesc.Height);
|
|
||||||
vp.MinDepth = 0.0f;
|
vp.MinDepth = 0.0f;
|
||||||
vp.MaxDepth = 1.0f;
|
vp.MaxDepth = 1.0f;
|
||||||
vp.TopLeftX = 0;
|
vp.TopLeftX = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue