Fixes shore waves rendering after 29368cf776
.
Tested By: phosit Differential Revision: https://code.wildfiregames.com/D4865 This was SVN commit r27375.
This commit is contained in:
parent
1e2f23750b
commit
38a6726a07
@ -190,7 +190,7 @@ Renderer::Backend::IVertexInputLayout* CPatchRData::GetWaterSurfaceVertexInputLa
|
||||
Renderer::Backend::IVertexInputLayout* CPatchRData::GetWaterShoreVertexInputLayout()
|
||||
{
|
||||
const uint32_t stride = sizeof(SWaterVertex);
|
||||
const std::array<Renderer::Backend::SVertexAttributeFormat, 2> attributes{ {
|
||||
const std::array<Renderer::Backend::SVertexAttributeFormat, 2> attributes{{
|
||||
{Renderer::Backend::VertexAttributeStream::POSITION,
|
||||
Renderer::Backend::Format::R32G32B32_SFLOAT,
|
||||
offsetof(SWaterVertex, m_Position), stride,
|
||||
|
@ -743,8 +743,13 @@ void TerrainRenderer::RenderWaterFoamOccluders(
|
||||
|
||||
GPU_SCOPED_LABEL(deviceCommandContext, "Render water foam occluders");
|
||||
|
||||
// Render normals and foam to a framebuffer if we're using fancy effects.
|
||||
deviceCommandContext->BeginFramebufferPass(waterManager.m_FancyEffectsFramebuffer.get());
|
||||
Renderer::Backend::IFramebuffer* framebuffer =
|
||||
waterManager.m_FancyEffectsOccludersFramebuffer.get();
|
||||
deviceCommandContext->BeginFramebufferPass(framebuffer);
|
||||
Renderer::Backend::IDeviceCommandContext::Rect viewportRect{};
|
||||
viewportRect.width = framebuffer->GetWidth();
|
||||
viewportRect.height = framebuffer->GetHeight();
|
||||
deviceCommandContext->SetViewports(1, &viewportRect);
|
||||
|
||||
// Overwrite waves that would be behind the ground.
|
||||
deviceCommandContext->SetGraphicsPipelineState(
|
||||
|
@ -119,6 +119,7 @@ WaterManager::~WaterManager()
|
||||
m_WindStrength.reset();
|
||||
|
||||
m_FancyEffectsFramebuffer.reset();
|
||||
m_FancyEffectsOccludersFramebuffer.reset();
|
||||
m_RefractionFramebuffer.reset();
|
||||
m_ReflectionFramebuffer.reset();
|
||||
|
||||
@ -323,6 +324,7 @@ void WaterManager::RecreateOrLoadTexturesIfNeeded()
|
||||
if (m_FancyTexture && (m_FancyTexture->GetWidth() != newWidth || m_FancyTexture->GetHeight() != newHeight))
|
||||
{
|
||||
m_FancyEffectsFramebuffer.reset();
|
||||
m_FancyEffectsOccludersFramebuffer.reset();
|
||||
m_FancyTexture.reset();
|
||||
m_FancyTextureDepth.reset();
|
||||
}
|
||||
@ -357,11 +359,26 @@ void WaterManager::RecreateOrLoadTexturesIfNeeded()
|
||||
Renderer::Backend::SDepthStencilAttachment depthStencilAttachment{};
|
||||
depthStencilAttachment.texture = m_FancyTextureDepth.get();
|
||||
depthStencilAttachment.loadOp = Renderer::Backend::AttachmentLoadOp::CLEAR;
|
||||
depthStencilAttachment.storeOp = Renderer::Backend::AttachmentStoreOp::DONT_CARE;
|
||||
// We need to store depth for later rendering occluders.
|
||||
depthStencilAttachment.storeOp = Renderer::Backend::AttachmentStoreOp::STORE;
|
||||
|
||||
m_FancyEffectsFramebuffer = backendDevice->CreateFramebuffer("FancyEffectsFramebuffer",
|
||||
&colorAttachment, &depthStencilAttachment);
|
||||
if (!m_FancyEffectsFramebuffer)
|
||||
|
||||
Renderer::Backend::SColorAttachment occludersColorAttachment{};
|
||||
occludersColorAttachment.texture = m_FancyTexture.get();
|
||||
occludersColorAttachment.loadOp = Renderer::Backend::AttachmentLoadOp::LOAD;
|
||||
occludersColorAttachment.storeOp = Renderer::Backend::AttachmentStoreOp::STORE;
|
||||
occludersColorAttachment.clearColor = CColor{0.0f, 0.0f, 0.0f, 0.0f};
|
||||
|
||||
Renderer::Backend::SDepthStencilAttachment occludersDepthStencilAttachment{};
|
||||
occludersDepthStencilAttachment.texture = m_FancyTextureDepth.get();
|
||||
occludersDepthStencilAttachment.loadOp = Renderer::Backend::AttachmentLoadOp::LOAD;
|
||||
occludersDepthStencilAttachment.storeOp = Renderer::Backend::AttachmentStoreOp::DONT_CARE;
|
||||
|
||||
m_FancyEffectsOccludersFramebuffer = backendDevice->CreateFramebuffer("FancyEffectsOccludersFramebuffer",
|
||||
&occludersColorAttachment, &occludersDepthStencilAttachment);
|
||||
if (!m_FancyEffectsFramebuffer || !m_FancyEffectsOccludersFramebuffer)
|
||||
{
|
||||
g_RenderingOptions.SetWaterRefraction(false);
|
||||
UpdateQuality();
|
||||
@ -873,7 +890,13 @@ void WaterManager::RenderWaves(
|
||||
|
||||
GPU_SCOPED_LABEL(deviceCommandContext, "Render Waves");
|
||||
|
||||
deviceCommandContext->BeginFramebufferPass(m_FancyEffectsFramebuffer.get());
|
||||
Renderer::Backend::IFramebuffer* framebuffer =
|
||||
m_FancyEffectsFramebuffer.get();
|
||||
deviceCommandContext->BeginFramebufferPass(framebuffer);
|
||||
Renderer::Backend::IDeviceCommandContext::Rect viewportRect{};
|
||||
viewportRect.width = framebuffer->GetWidth();
|
||||
viewportRect.height = framebuffer->GetHeight();
|
||||
deviceCommandContext->SetViewports(1, &viewportRect);
|
||||
|
||||
CShaderTechniquePtr tech = g_Renderer.GetShaderManager().LoadEffect(str_water_waves);
|
||||
deviceCommandContext->SetGraphicsPipelineState(
|
||||
|
@ -112,6 +112,7 @@ public:
|
||||
std::unique_ptr<Renderer::Backend::IFramebuffer> m_RefractionFramebuffer;
|
||||
std::unique_ptr<Renderer::Backend::IFramebuffer> m_ReflectionFramebuffer;
|
||||
std::unique_ptr<Renderer::Backend::IFramebuffer> m_FancyEffectsFramebuffer;
|
||||
std::unique_ptr<Renderer::Backend::IFramebuffer> m_FancyEffectsOccludersFramebuffer;
|
||||
|
||||
// Model-view-projection matrices for reflected & refracted cameras
|
||||
// (used to let the vertex shader do projective texturing)
|
||||
|
Loading…
Reference in New Issue
Block a user