diff --git a/source/renderer/PostprocManager.h b/source/renderer/PostprocManager.h index cb2d3c2b2b..cc8efd8702 100644 --- a/source/renderer/PostprocManager.h +++ b/source/renderer/PostprocManager.h @@ -88,6 +88,8 @@ public: void ResolveMultisampleFramebuffer( Renderer::Backend::IDeviceCommandContext* deviceCommandContext); + float GetScale() const { return m_Scale; } + private: void CreateMultisampleBuffer(); void DestroyMultisampleBuffer(); diff --git a/source/renderer/TerrainRenderer.cpp b/source/renderer/TerrainRenderer.cpp index 5d918128f2..f2715c59b8 100644 --- a/source/renderer/TerrainRenderer.cpp +++ b/source/renderer/TerrainRenderer.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2023 Wildfire Games. +/* Copyright (C) 2024 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -43,6 +43,7 @@ #include "renderer/backend/PipelineState.h" #include "renderer/DecalRData.h" #include "renderer/PatchRData.h" +#include "renderer/PostprocManager.h" #include "renderer/Renderer.h" #include "renderer/RenderingOptions.h" #include "renderer/SceneRenderer.h" @@ -606,10 +607,11 @@ bool TerrainRenderer::RenderFancyWater( lightEnv.m_FogFactor, lightEnv.m_FogMax); deviceCommandContext->SetUniform( fancyWaterShader->GetBindingSlot(str_time), static_cast(time)); + const float scale{g_Renderer.GetPostprocManager().IsEnabled() + ? g_Renderer.GetPostprocManager().GetScale() : 1.0f}; deviceCommandContext->SetUniform( fancyWaterShader->GetBindingSlot(str_screenSize), - static_cast(g_Renderer.GetWidth()), - static_cast(g_Renderer.GetHeight())); + g_Renderer.GetWidth() * scale, g_Renderer.GetHeight() * scale); if (waterManager.m_WaterType == L"clap") { diff --git a/source/renderer/WaterManager.cpp b/source/renderer/WaterManager.cpp index d770de131a..28d0363b79 100644 --- a/source/renderer/WaterManager.cpp +++ b/source/renderer/WaterManager.cpp @@ -30,6 +30,7 @@ #include "ps/Game.h" #include "ps/World.h" #include "renderer/backend/IDevice.h" +#include "renderer/PostprocManager.h" #include "renderer/Renderer.h" #include "renderer/RenderingOptions.h" #include "renderer/SceneRenderer.h" @@ -320,8 +321,10 @@ void WaterManager::RecreateOrLoadTexturesIfNeeded() } } - const uint32_t newWidth = static_cast(g_Renderer.GetWidth()); - const uint32_t newHeight = static_cast(g_Renderer.GetHeight()); + const float scale{g_Renderer.GetPostprocManager().IsEnabled() + ? g_Renderer.GetPostprocManager().GetScale() : 1.0f}; + const uint32_t newWidth{static_cast(g_Renderer.GetWidth() * scale)}; + const uint32_t newHeight{static_cast(g_Renderer.GetHeight() * scale)}; if (m_FancyTexture && (m_FancyTexture->GetWidth() != newWidth || m_FancyTexture->GetHeight() != newHeight)) { m_FancyEffectsFramebuffer.reset(); @@ -339,14 +342,14 @@ void WaterManager::RecreateOrLoadTexturesIfNeeded() m_FancyTexture = m_Device->CreateTexture2D("WaterFancyTexture", Renderer::Backend::ITexture::Usage::SAMPLED | Renderer::Backend::ITexture::Usage::COLOR_ATTACHMENT, - Renderer::Backend::Format::R8G8B8A8_UNORM, g_Renderer.GetWidth(), g_Renderer.GetHeight(), + Renderer::Backend::Format::R8G8B8A8_UNORM, newWidth, newHeight, Renderer::Backend::Sampler::MakeDefaultSampler( Renderer::Backend::Sampler::Filter::LINEAR, Renderer::Backend::Sampler::AddressMode::REPEAT)); m_FancyTextureDepth = m_Device->CreateTexture2D("WaterFancyDepthTexture", Renderer::Backend::ITexture::Usage::DEPTH_STENCIL_ATTACHMENT, - depthFormat, g_Renderer.GetWidth(), g_Renderer.GetHeight(), + depthFormat, newWidth, newHeight, Renderer::Backend::Sampler::MakeDefaultSampler( Renderer::Backend::Sampler::Filter::LINEAR, Renderer::Backend::Sampler::AddressMode::REPEAT));