Remove old RT1_FloatRGB and RT2_FloatRGB in favor pooled render targets
This commit is contained in:
@@ -20,8 +20,6 @@ RenderBuffers::RenderBuffers(const SpawnParams& params)
|
|||||||
CREATE_TEXTURE(GBuffer1);
|
CREATE_TEXTURE(GBuffer1);
|
||||||
CREATE_TEXTURE(GBuffer2);
|
CREATE_TEXTURE(GBuffer2);
|
||||||
CREATE_TEXTURE(GBuffer3);
|
CREATE_TEXTURE(GBuffer3);
|
||||||
CREATE_TEXTURE(RT1_FloatRGB);
|
|
||||||
CREATE_TEXTURE(RT2_FloatRGB);
|
|
||||||
#undef CREATE_TEXTURE
|
#undef CREATE_TEXTURE
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,19 +123,7 @@ bool RenderBuffers::GetUseAlpha() const
|
|||||||
|
|
||||||
void RenderBuffers::SetUseAlpha(bool value)
|
void RenderBuffers::SetUseAlpha(bool value)
|
||||||
{
|
{
|
||||||
if (_useAlpha != value)
|
_useAlpha = value;
|
||||||
{
|
|
||||||
_useAlpha = value;
|
|
||||||
|
|
||||||
// Reallocate buffers
|
|
||||||
if (_width != 0)
|
|
||||||
{
|
|
||||||
auto desc = GPUTextureDescription::New2D(_width, _height, GetOutputFormat(), GPUTextureFlags::ShaderResource | GPUTextureFlags::RenderTarget);
|
|
||||||
desc.DefaultClearColor = Color::Transparent;
|
|
||||||
RT1_FloatRGB->Init(desc);
|
|
||||||
RT2_FloatRGB->Init(desc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const RenderBuffers::CustomBuffer* RenderBuffers::FindCustomBuffer(const StringView& name) const
|
const RenderBuffers::CustomBuffer* RenderBuffers::FindCustomBuffer(const StringView& name) const
|
||||||
@@ -197,12 +183,6 @@ bool RenderBuffers::Init(int32 width, int32 height)
|
|||||||
desc.DefaultClearColor = Color::Transparent;
|
desc.DefaultClearColor = Color::Transparent;
|
||||||
result |= GBuffer3->Init(desc);
|
result |= GBuffer3->Init(desc);
|
||||||
|
|
||||||
// Helper HDR buffers
|
|
||||||
desc.Format = GetOutputFormat();
|
|
||||||
desc.DefaultClearColor = Color::Transparent;
|
|
||||||
result |= RT1_FloatRGB->Init(desc);
|
|
||||||
result |= RT2_FloatRGB->Init(desc);
|
|
||||||
|
|
||||||
// Cache data
|
// Cache data
|
||||||
_width = width;
|
_width = width;
|
||||||
_height = height;
|
_height = height;
|
||||||
|
|||||||
@@ -54,9 +54,6 @@ public:
|
|||||||
GPUTexture* GBuffer[4];
|
GPUTexture* GBuffer[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
GPUTexture* RT1_FloatRGB;
|
|
||||||
GPUTexture* RT2_FloatRGB;
|
|
||||||
|
|
||||||
// Helper target for the eye adaptation
|
// Helper target for the eye adaptation
|
||||||
float LastEyeAdaptationTime = 0.0f;
|
float LastEyeAdaptationTime = 0.0f;
|
||||||
GPUTexture* LuminanceMap = nullptr;
|
GPUTexture* LuminanceMap = nullptr;
|
||||||
|
|||||||
@@ -1126,7 +1126,8 @@ void GlobalSurfaceAtlasPass::RenderDebug(RenderContext& renderContext, GPUContex
|
|||||||
Float2 outputSizeThird = outputSize * 0.333f;
|
Float2 outputSizeThird = outputSize * 0.333f;
|
||||||
Float2 outputSizeTwoThird = outputSize * 0.666f;
|
Float2 outputSizeTwoThird = outputSize * 0.666f;
|
||||||
|
|
||||||
GPUTexture* tempBuffer = renderContext.Buffers->RT2_FloatRGB;
|
auto tempBuffer = RenderTargetPool::Get(output->GetDescription());
|
||||||
|
RENDER_TARGET_POOL_SET_NAME(tempBuffer, "GlobalSurfaceAtlas.TempBuffer");
|
||||||
context->Clear(tempBuffer->View(), Color::Black);
|
context->Clear(tempBuffer->View(), Color::Black);
|
||||||
context->SetRenderTarget(tempBuffer->View());
|
context->SetRenderTarget(tempBuffer->View());
|
||||||
|
|
||||||
|
|||||||
@@ -388,7 +388,7 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont
|
|||||||
auto outputFormat = renderContext.Buffers->GetOutputFormat();
|
auto outputFormat = renderContext.Buffers->GetOutputFormat();
|
||||||
auto tempDesc = GPUTextureDescription::New2D(renderContext.Buffers->GetWidth(), renderContext.Buffers->GetHeight(), outputFormat);
|
auto tempDesc = GPUTextureDescription::New2D(renderContext.Buffers->GetWidth(), renderContext.Buffers->GetHeight(), outputFormat);
|
||||||
auto lightBuffer = RenderTargetPool::Get(tempDesc);
|
auto lightBuffer = RenderTargetPool::Get(tempDesc);
|
||||||
RENDER_TARGET_POOL_SET_NAME(lightBuffer, "Lighting");
|
RENDER_TARGET_POOL_SET_NAME(lightBuffer, "LightBuffer");
|
||||||
|
|
||||||
#if USE_EDITOR
|
#if USE_EDITOR
|
||||||
if (renderContext.View.Mode == ViewMode::QuadOverdraw)
|
if (renderContext.View.Mode == ViewMode::QuadOverdraw)
|
||||||
@@ -471,7 +471,8 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont
|
|||||||
if (renderContext.View.Mode == ViewMode::LightBuffer)
|
if (renderContext.View.Mode == ViewMode::LightBuffer)
|
||||||
{
|
{
|
||||||
auto colorGradingLUT = ColorGradingPass::Instance()->RenderLUT(renderContext);
|
auto colorGradingLUT = ColorGradingPass::Instance()->RenderLUT(renderContext);
|
||||||
GPUTexture* tempBuffer = renderContext.Buffers->RT2_FloatRGB;
|
auto tempBuffer = RenderTargetPool::Get(tempDesc);
|
||||||
|
RENDER_TARGET_POOL_SET_NAME(tempBuffer, "TempBuffer");
|
||||||
EyeAdaptationPass::Instance()->Render(renderContext, lightBuffer);
|
EyeAdaptationPass::Instance()->Render(renderContext, lightBuffer);
|
||||||
PostProcessingPass::Instance()->Render(renderContext, lightBuffer, tempBuffer, colorGradingLUT);
|
PostProcessingPass::Instance()->Render(renderContext, lightBuffer, tempBuffer, colorGradingLUT);
|
||||||
RenderTargetPool::Release(colorGradingLUT);
|
RenderTargetPool::Release(colorGradingLUT);
|
||||||
@@ -480,6 +481,7 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont
|
|||||||
context->SetRenderTarget(task->GetOutputView());
|
context->SetRenderTarget(task->GetOutputView());
|
||||||
context->SetViewportAndScissors(task->GetOutputViewport());
|
context->SetViewportAndScissors(task->GetOutputViewport());
|
||||||
context->Draw(tempBuffer);
|
context->Draw(tempBuffer);
|
||||||
|
RenderTargetPool::Release(tempBuffer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,8 +521,8 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run forward pass
|
// Run forward pass
|
||||||
GPUTexture* frameBuffer = renderContext.Buffers->RT1_FloatRGB;
|
auto frameBuffer = RenderTargetPool::Get(tempDesc);
|
||||||
GPUTexture* tempBuffer = renderContext.Buffers->RT2_FloatRGB;
|
RENDER_TARGET_POOL_SET_NAME(frameBuffer, "FrameBuffer");
|
||||||
ForwardPass::Instance()->Render(renderContext, lightBuffer, frameBuffer);
|
ForwardPass::Instance()->Render(renderContext, lightBuffer, frameBuffer);
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
@@ -535,10 +537,13 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont
|
|||||||
context->SetRenderTarget(task->GetOutputView());
|
context->SetRenderTarget(task->GetOutputView());
|
||||||
context->SetViewportAndScissors(task->GetOutputViewport());
|
context->SetViewportAndScissors(task->GetOutputViewport());
|
||||||
context->Draw(frameBuffer);
|
context->Draw(frameBuffer);
|
||||||
|
RenderTargetPool::Release(frameBuffer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Material and Custom PostFx
|
// Material and Custom PostFx
|
||||||
|
auto tempBuffer = RenderTargetPool::Get(tempDesc);
|
||||||
|
RENDER_TARGET_POOL_SET_NAME(tempBuffer, "TempBuffer");
|
||||||
renderContext.List->RunMaterialPostFxPass(context, renderContext, MaterialPostFxLocation::BeforePostProcessingPass, frameBuffer, tempBuffer);
|
renderContext.List->RunMaterialPostFxPass(context, renderContext, MaterialPostFxLocation::BeforePostProcessingPass, frameBuffer, tempBuffer);
|
||||||
renderContext.List->RunCustomPostFxPass(context, renderContext, PostProcessEffectLocation::BeforePostProcessingPass, frameBuffer, tempBuffer);
|
renderContext.List->RunCustomPostFxPass(context, renderContext, PostProcessEffectLocation::BeforePostProcessingPass, frameBuffer, tempBuffer);
|
||||||
|
|
||||||
@@ -588,6 +593,8 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont
|
|||||||
context->SetRenderTarget(task->GetOutputView());
|
context->SetRenderTarget(task->GetOutputView());
|
||||||
context->SetViewportAndScissors(task->GetOutputViewport());
|
context->SetViewportAndScissors(task->GetOutputViewport());
|
||||||
MotionBlurPass::Instance()->RenderDebug(renderContext, frameBuffer->View());
|
MotionBlurPass::Instance()->RenderDebug(renderContext, frameBuffer->View());
|
||||||
|
RenderTargetPool::Release(tempBuffer);
|
||||||
|
RenderTargetPool::Release(frameBuffer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -623,4 +630,7 @@ void RenderInner(SceneRenderTask* task, RenderContext& renderContext, RenderCont
|
|||||||
MultiScaler::Instance()->Upscale(context, task->GetOutputViewport(), frameBuffer, task->GetOutputView());
|
MultiScaler::Instance()->Upscale(context, task->GetOutputViewport(), frameBuffer, task->GetOutputView());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RenderTargetPool::Release(tempBuffer);
|
||||||
|
RenderTargetPool::Release(frameBuffer);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user