diff --git a/include/Nazara/Platform/Window.hpp b/include/Nazara/Platform/Window.hpp index 79dc64c0e..db954ceb5 100644 --- a/include/Nazara/Platform/Window.hpp +++ b/include/Nazara/Platform/Window.hpp @@ -56,8 +56,8 @@ namespace Nz inline CursorController& GetCursorController(); inline WindowEventHandler& GetEventHandler(); WindowHandle GetHandle() const; - Vector2i GetPosition() const; - Vector2ui GetSize() const; + const Vector2i& GetPosition() const; + const Vector2ui& GetSize() const; WindowStyleFlags GetStyle() const; std::string GetTitle() const; diff --git a/include/Nazara/Platform/Window.inl b/include/Nazara/Platform/Window.inl index 97f8091ef..4cab6b9a8 100644 --- a/include/Nazara/Platform/Window.inl +++ b/include/Nazara/Platform/Window.inl @@ -51,6 +51,18 @@ namespace Nz return m_eventHandler; } + inline const Vector2i& Window::GetPosition() const + { + NazaraAssert(m_impl, "Window not created"); + return m_position; + } + + inline const Vector2ui& Window::GetSize() const + { + NazaraAssert(m_impl, "Window not created"); + return m_size; + } + inline bool Window::IsOpen(bool checkClosed) { if (!m_impl) diff --git a/src/Nazara/Renderer/WindowSwapchain.cpp b/src/Nazara/Renderer/WindowSwapchain.cpp index b2b0c4a61..f243c3e2e 100644 --- a/src/Nazara/Renderer/WindowSwapchain.cpp +++ b/src/Nazara/Renderer/WindowSwapchain.cpp @@ -19,8 +19,10 @@ namespace Nz if (m_window->IsValid()) { - m_swapchain = m_renderDevice->InstantiateSwapchain(window.GetHandle(), window.GetSize(), m_parameters); m_isMinimized = window.IsMinimized(); + + if (!m_isMinimized) + m_swapchain = m_renderDevice->InstantiateSwapchain(window.GetHandle(), window.GetSize(), m_parameters); } else m_isMinimized = true; //< consider it minimized so AcquireFrame returns no frame @@ -45,7 +47,7 @@ namespace Nz const Vector2ui& WindowSwapchain::GetSize() const { - return m_swapchain->GetSize(); + return (m_swapchain) ? m_swapchain->GetSize() : m_window->GetSize(); } void WindowSwapchain::ConnectSignals() @@ -53,9 +55,9 @@ namespace Nz WindowEventHandler& windowEvents = m_window->GetEventHandler(); m_onCreated.Connect(windowEvents.OnCreated, [this](const WindowEventHandler* /*eventHandler*/) { - // Recreate swapchain - m_swapchain = m_renderDevice->InstantiateSwapchain(m_window->GetHandle(), m_window->GetSize(), m_parameters); m_isMinimized = m_window->IsMinimized(); + if (!m_isMinimized) + m_swapchain = m_renderDevice->InstantiateSwapchain(m_window->GetHandle(), m_window->GetSize(), m_parameters); }); m_onDestruction.Connect(windowEvents.OnDestruction, [this](const WindowEventHandler* /*eventHandler*/) @@ -87,6 +89,9 @@ namespace Nz m_onRestored.Connect(windowEvents.OnRestored, [this](const WindowEventHandler* /*eventHandler*/) { + if (!m_swapchain) + m_swapchain = m_renderDevice->InstantiateSwapchain(m_window->GetHandle(), m_window->GetSize(), m_parameters); + m_isMinimized = false; }); }