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;
|
||||
D3D11_VIEWPORT m_customViewport;
|
||||
bool m_useCustomViewport = false;
|
||||
UINT m_gammaTexWidth = 0;
|
||||
UINT m_gammaTexHeight = 0;
|
||||
|
||||
struct GammaCBData
|
||||
{
|
||||
|
|
|
|||
|
|
@ -937,7 +937,7 @@ float GameRenderer::ComputeGammaFromSlider(float slider0to100)
|
|||
slider = min(slider, 100.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
|
||||
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"
|
||||
"{\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"
|
||||
"}\n";
|
||||
|
||||
|
|
@ -75,6 +79,9 @@ void PostProcesser::Init()
|
|||
pBackBuffer->GetDesc(&bbDesc);
|
||||
pBackBuffer->Release();
|
||||
|
||||
m_gammaTexWidth = bbDesc.Width;
|
||||
m_gammaTexHeight = bbDesc.Height;
|
||||
|
||||
DXGI_FORMAT texFormat = bbDesc.Format;
|
||||
if (m_wineMode)
|
||||
{
|
||||
|
|
@ -219,7 +226,9 @@ void PostProcesser::Apply() const
|
|||
if (FAILED(hr))
|
||||
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;
|
||||
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);
|
||||
|
||||
UINT numViewports = 1;
|
||||
D3D11_VIEWPORT oldViewport;
|
||||
D3D11_VIEWPORT oldViewport = {};
|
||||
ctx->RSGetViewports(&numViewports, &oldViewport);
|
||||
|
||||
ID3D11RenderTargetView* bbRTV = g_pRenderTargetView;
|
||||
ctx->OMSetRenderTargets(1, &bbRTV, nullptr);
|
||||
|
||||
D3D11_TEXTURE2D_DESC bbDesc;
|
||||
pBackBuffer->GetDesc(&bbDesc);
|
||||
pBackBuffer->Release();
|
||||
|
||||
D3D11_VIEWPORT vp;
|
||||
if (m_useCustomViewport)
|
||||
{
|
||||
|
|
@ -253,8 +258,8 @@ void PostProcesser::Apply() const
|
|||
}
|
||||
else
|
||||
{
|
||||
vp.Width = static_cast<FLOAT>(bbDesc.Width);
|
||||
vp.Height = static_cast<FLOAT>(bbDesc.Height);
|
||||
vp.Width = static_cast<FLOAT>(m_gammaTexWidth);
|
||||
vp.Height = static_cast<FLOAT>(m_gammaTexHeight);
|
||||
vp.MinDepth = 0.0f;
|
||||
vp.MaxDepth = 1.0f;
|
||||
vp.TopLeftX = 0;
|
||||
|
|
@ -313,7 +318,8 @@ void PostProcesser::CopyBackbuffer()
|
|||
if (FAILED(hr))
|
||||
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();
|
||||
}
|
||||
|
||||
|
|
@ -342,7 +348,7 @@ void PostProcesser::ApplyFromCopied() const
|
|||
ctx->OMGetRenderTargets(1, &oldRTV, &oldDSV);
|
||||
|
||||
UINT numViewports = 1;
|
||||
D3D11_VIEWPORT oldViewport;
|
||||
D3D11_VIEWPORT oldViewport = {};
|
||||
ctx->RSGetViewports(&numViewports, &oldViewport);
|
||||
|
||||
ID3D11RenderTargetView* bbRTV = g_pRenderTargetView;
|
||||
|
|
@ -355,10 +361,8 @@ void PostProcesser::ApplyFromCopied() const
|
|||
}
|
||||
else
|
||||
{
|
||||
D3D11_TEXTURE2D_DESC texDesc;
|
||||
m_pGammaOffscreenTex->GetDesc(&texDesc);
|
||||
vp.Width = static_cast<FLOAT>(texDesc.Width);
|
||||
vp.Height = static_cast<FLOAT>(texDesc.Height);
|
||||
vp.Width = static_cast<FLOAT>(m_gammaTexWidth);
|
||||
vp.Height = static_cast<FLOAT>(m_gammaTexHeight);
|
||||
vp.MinDepth = 0.0f;
|
||||
vp.MaxDepth = 1.0f;
|
||||
vp.TopLeftX = 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue