diff --git a/examples/DeferredShading/main.cpp b/examples/DeferredShading/main.cpp index 5612d48ca..7622aa88a 100644 --- a/examples/DeferredShading/main.cpp +++ b/examples/DeferredShading/main.cpp @@ -1523,7 +1523,7 @@ int main() bakedGraph.Execute(frame); - const Nz::RenderTarget* windowRT = &windowSwapchain.GetSwapchain(); + const Nz::RenderTarget* windowRT = &windowSwapchain; frame.Execute([&](Nz::CommandBufferBuilder& builder) { Nz::Recti windowRenderRect(0, 0, window.GetSize().x, window.GetSize().y); diff --git a/examples/PhysicallyBasedRendering/main.cpp b/examples/PhysicallyBasedRendering/main.cpp index 4d349a570..9e607a133 100644 --- a/examples/PhysicallyBasedRendering/main.cpp +++ b/examples/PhysicallyBasedRendering/main.cpp @@ -70,7 +70,7 @@ int main() Nz::Vector2ui windowSize = window.GetSize(); - Nz::Camera camera(&windowSwapchain.GetSwapchain()); + Nz::Camera camera(&windowSwapchain); //camera.UpdateClearColor(Nz::Color::Gray); Nz::ViewerInstance& viewerInstance = camera.GetViewerInstance(); diff --git a/examples/Physics2DDemo/main.cpp b/examples/Physics2DDemo/main.cpp index fbcfa74d7..230b681cb 100644 --- a/examples/Physics2DDemo/main.cpp +++ b/examples/Physics2DDemo/main.cpp @@ -53,7 +53,7 @@ int main() entt::handle viewer = world.CreateEntity(); { viewer.emplace(); - auto& cameraComponent = viewer.emplace(&windowSwapchain.GetSwapchain(), Nz::ProjectionType::Orthographic); + auto& cameraComponent = viewer.emplace(&windowSwapchain, Nz::ProjectionType::Orthographic); cameraComponent.UpdateRenderMask(1); cameraComponent.UpdateClearColor(Nz::Color(0.5f, 0.5f, 0.5f)); } diff --git a/examples/PhysicsDemo/main.cpp b/examples/PhysicsDemo/main.cpp index 3b7d2c53c..75a25e7e4 100644 --- a/examples/PhysicsDemo/main.cpp +++ b/examples/PhysicsDemo/main.cpp @@ -104,7 +104,7 @@ int main() entt::handle viewer = world.CreateEntity(); { viewer.emplace(); - auto& cameraComponent = viewer.emplace(&windowSwapchain.GetSwapchain()); + auto& cameraComponent = viewer.emplace(&windowSwapchain); cameraComponent.UpdateRenderMask(1); cameraComponent.UpdateClearColor(Nz::Color(0.5f, 0.5f, 0.5f)); } diff --git a/examples/Showcase/main.cpp b/examples/Showcase/main.cpp index 07025f99e..8c2180cb6 100644 --- a/examples/Showcase/main.cpp +++ b/examples/Showcase/main.cpp @@ -73,7 +73,7 @@ int main() cameraNode.SetPosition(Nz::Vector3f::Up() * 2.f + Nz::Vector3f::Backward()); //cameraNode.SetParent(playerRotNode); - auto& cameraComponent = playerCamera.emplace(&windowSwapchain.GetSwapchain()); + auto& cameraComponent = playerCamera.emplace(&windowSwapchain); cameraComponent.UpdateZNear(0.2f); cameraComponent.UpdateZFar(10000.f); cameraComponent.UpdateRenderMask(1); diff --git a/examples/Tut01/main.cpp b/examples/Tut01/main.cpp index c9b572ecb..9bce72436 100644 --- a/examples/Tut01/main.cpp +++ b/examples/Tut01/main.cpp @@ -24,7 +24,7 @@ int main() { cameraEntity.emplace(); - auto& cameraComponent = cameraEntity.emplace(&windowSwapchain.GetSwapchain(), Nz::ProjectionType::Orthographic); + auto& cameraComponent = cameraEntity.emplace(&windowSwapchain, Nz::ProjectionType::Orthographic); cameraComponent.UpdateClearColor(Nz::Color(0.46f, 0.48f, 0.84f, 1.f)); } diff --git a/examples/Tut02/main.cpp b/examples/Tut02/main.cpp index 91f9e167d..ed5864b5e 100644 --- a/examples/Tut02/main.cpp +++ b/examples/Tut02/main.cpp @@ -24,7 +24,7 @@ int main() { cameraEntity.emplace(); - auto& cameraComponent = cameraEntity.emplace(&windowSwapchain.GetSwapchain(), Nz::ProjectionType::Orthographic); + auto& cameraComponent = cameraEntity.emplace(&windowSwapchain, Nz::ProjectionType::Orthographic); cameraComponent.UpdateClearColor(Nz::Color(0.46f, 0.48f, 0.84f, 1.f)); } diff --git a/examples/WidgetDemo/main.cpp b/examples/WidgetDemo/main.cpp index f382c1f98..f4d63a200 100644 --- a/examples/WidgetDemo/main.cpp +++ b/examples/WidgetDemo/main.cpp @@ -114,7 +114,7 @@ int main() { viewer2D.emplace(); - auto& cameraComponent = viewer2D.emplace(&windowSwapchain.GetSwapchain(), Nz::ProjectionType::Orthographic); + auto& cameraComponent = viewer2D.emplace(&windowSwapchain, Nz::ProjectionType::Orthographic); cameraComponent.UpdateClearColor(Nz::Color(0.46f, 0.48f, 0.84f, 1.f)); } diff --git a/include/Nazara/Renderer/WindowSwapchain.hpp b/include/Nazara/Renderer/WindowSwapchain.hpp index 320f61a9d..d99a08ac5 100644 --- a/include/Nazara/Renderer/WindowSwapchain.hpp +++ b/include/Nazara/Renderer/WindowSwapchain.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -18,13 +19,13 @@ namespace Nz class RenderDevice; class Window; - class NAZARA_RENDERER_API WindowSwapchain + class NAZARA_RENDERER_API WindowSwapchain : public RenderTarget { public: WindowSwapchain(std::shared_ptr renderDevice, Window& window, SwapchainParameters parameters = SwapchainParameters()); WindowSwapchain(const WindowSwapchain&) = delete; - inline WindowSwapchain(WindowSwapchain&& windowSwapchain) noexcept; - ~WindowSwapchain() = default; + WindowSwapchain(WindowSwapchain&&) = delete; + inline ~WindowSwapchain(); inline RenderFrame AcquireFrame(); @@ -32,11 +33,15 @@ namespace Nz inline void EnableRenderOnlyIfFocused(bool enable = true); + const Framebuffer& GetFramebuffer(std::size_t i) const override; + std::size_t GetFramebufferCount() const override; + const RenderPass& GetRenderPass() const override; + const Vector2ui& GetSize() const override; inline Swapchain& GetSwapchain(); inline const Swapchain& GetSwapchain() const; - WindowSwapchain& operator=(const WindowSwapchain&) = default; - inline WindowSwapchain& operator=(WindowSwapchain&& windowSwapchain) noexcept; + WindowSwapchain& operator=(const WindowSwapchain&) = delete; + WindowSwapchain& operator=(WindowSwapchain&& windowSwapchain) = delete; private: void ConnectSignals(); diff --git a/include/Nazara/Renderer/WindowSwapchain.inl b/include/Nazara/Renderer/WindowSwapchain.inl index 1565d69d0..371ce38e8 100644 --- a/include/Nazara/Renderer/WindowSwapchain.inl +++ b/include/Nazara/Renderer/WindowSwapchain.inl @@ -8,15 +8,9 @@ namespace Nz { - inline WindowSwapchain::WindowSwapchain(WindowSwapchain&& windowSwapchain) noexcept : - m_renderDevice(std::move(windowSwapchain.m_renderDevice)), - m_swapchain(std::move(windowSwapchain.m_swapchain)), - m_window(std::move(windowSwapchain.m_window)), - m_renderOnlyIfFocused(windowSwapchain.m_renderOnlyIfFocused), - m_hasFocus(windowSwapchain.m_hasFocus), - m_isMinimized(windowSwapchain.m_isMinimized) + inline WindowSwapchain::~WindowSwapchain() { - ConnectSignals(); + OnRenderTargetRelease(this); } inline RenderFrame WindowSwapchain::AcquireFrame() @@ -47,22 +41,6 @@ namespace Nz return *m_swapchain; } - inline WindowSwapchain& WindowSwapchain::operator=(WindowSwapchain&& windowSwapchain) noexcept - { - windowSwapchain.DisconnectSignals(); - - m_renderDevice = std::move(windowSwapchain.m_renderDevice); - m_swapchain = std::move(windowSwapchain.m_swapchain); - m_window = std::move(windowSwapchain.m_window); - m_renderOnlyIfFocused = windowSwapchain.m_renderOnlyIfFocused; - m_hasFocus = windowSwapchain.m_hasFocus; - m_isMinimized = windowSwapchain.m_isMinimized; - - ConnectSignals(); - - return *this; - } - void WindowSwapchain::DisconnectSignals() { m_onGainedFocus.Disconnect(); diff --git a/src/Nazara/Platform/AppWindowingComponent.cpp b/src/Nazara/Platform/AppWindowingComponent.cpp index 80b898160..fabaa580f 100644 --- a/src/Nazara/Platform/AppWindowingComponent.cpp +++ b/src/Nazara/Platform/AppWindowingComponent.cpp @@ -8,7 +8,7 @@ namespace Nz { - void AppWindowingComponent::Update(Time elapsedTime) + void AppWindowingComponent::Update(Time /*elapsedTime*/) { Window::ProcessEvents(); diff --git a/src/Nazara/Renderer/WindowSwapchain.cpp b/src/Nazara/Renderer/WindowSwapchain.cpp index 5da0aacc0..b2b0c4a61 100644 --- a/src/Nazara/Renderer/WindowSwapchain.cpp +++ b/src/Nazara/Renderer/WindowSwapchain.cpp @@ -28,6 +28,26 @@ namespace Nz ConnectSignals(); } + const Framebuffer& WindowSwapchain::GetFramebuffer(std::size_t i) const + { + return m_swapchain->GetFramebuffer(i); + } + + std::size_t WindowSwapchain::GetFramebufferCount() const + { + return m_swapchain->GetFramebufferCount(); + } + + const RenderPass& WindowSwapchain::GetRenderPass() const + { + return m_swapchain->GetRenderPass(); + } + + const Vector2ui& WindowSwapchain::GetSize() const + { + return m_swapchain->GetSize(); + } + void WindowSwapchain::ConnectSignals() { WindowEventHandler& windowEvents = m_window->GetEventHandler(); @@ -62,6 +82,7 @@ namespace Nz m_onResized.Connect(windowEvents.OnResized, [this](const WindowEventHandler* /*eventHandler*/, const WindowEvent::SizeEvent& event) { m_swapchain->NotifyResize({ event.width, event.height }); + OnRenderTargetSizeChange(this, m_swapchain->GetSize()); }); m_onRestored.Connect(windowEvents.OnRestored, [this](const WindowEventHandler* /*eventHandler*/) diff --git a/tests/ComputeTest/main.cpp b/tests/ComputeTest/main.cpp index cb777ee93..e599d4aa0 100644 --- a/tests/ComputeTest/main.cpp +++ b/tests/ComputeTest/main.cpp @@ -166,7 +166,7 @@ int main() } } - const Nz::RenderTarget* windowRT = &windowSwapchain.GetSwapchain(); + const Nz::RenderTarget* windowRT = &windowSwapchain; frame.Execute([&](Nz::CommandBufferBuilder& builder) { builder.BeginDebugRegion("Compute part", Nz::Color::Blue()); diff --git a/tests/GraphicsTest/main.cpp b/tests/GraphicsTest/main.cpp index 422eb8d9f..0dbb8580d 100644 --- a/tests/GraphicsTest/main.cpp +++ b/tests/GraphicsTest/main.cpp @@ -80,7 +80,7 @@ int main() Nz::Vector2ui windowSize = window.GetSize(); - Nz::Camera camera(&windowSwapchain.GetSwapchain()); + Nz::Camera camera(&windowSwapchain); camera.UpdateClearColor(Nz::Color::Gray()); Nz::ViewerInstance& viewerInstance = camera.GetViewerInstance();