From 120d8f5427f898b9a825e9e82303d4bb21f9a401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Fri, 27 Aug 2021 15:39:23 +0200 Subject: [PATCH] Renderer/RenderWindow: Remove Display and GetImpl methods --- examples/DeferredShading/main.cpp | 13 ++++------ examples/GraphicsTest/main.cpp | 8 ++---- examples/PhysicsDemo/main.cpp | 33 ++++++++---------------- examples/PlayMusic/main.cpp | 2 ++ examples/RenderTest/main.cpp | 10 +++---- include/Nazara/Renderer/RenderWindow.hpp | 6 ++--- include/Nazara/Renderer/RenderWindow.inl | 10 +++---- src/Nazara/Renderer/RenderWindow.cpp | 32 ++++++++++++++--------- 8 files changed, 52 insertions(+), 62 deletions(-) diff --git a/examples/DeferredShading/main.cpp b/examples/DeferredShading/main.cpp index 325266485..d45a8bbcf 100644 --- a/examples/DeferredShading/main.cpp +++ b/examples/DeferredShading/main.cpp @@ -236,8 +236,6 @@ int main() Nz::WorldInstance planeInstance; - Nz::RenderWindowImpl* windowImpl = window.GetImpl(); - Nz::RenderPipelineLayoutInfo lightingPipelineLayoutInfo; Nz::Graphics::FillViewerPipelineLayout(lightingPipelineLayoutInfo); @@ -330,8 +328,8 @@ int main() const std::shared_ptr& fullscreenVertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_UV); - unsigned int offscreenWidth = window.GetSize().x; - unsigned int offscreenHeight = window.GetSize().y; + unsigned int offscreenWidth = windowSize.x; + unsigned int offscreenHeight = windowSize.y; // Bloom data @@ -929,7 +927,7 @@ int main() viewerInstance.UpdateViewMatrix(Nz::Matrix4f::ViewMatrix(viewerPos, camQuat)); } - Nz::RenderFrame frame = windowImpl->Acquire(); + Nz::RenderFrame frame = window.AcquireFrame(); if (!frame) continue; @@ -1108,6 +1106,7 @@ int main() bakedGraph.Execute(frame); + const Nz::RenderTarget* windowRT = window.GetRenderTarget(); frame.Execute([&](Nz::CommandBufferBuilder& builder) { Nz::Recti windowRenderRect(0, 0, window.GetSize().x, window.GetSize().y); @@ -1116,7 +1115,7 @@ int main() builder.BeginDebugRegion("Main window rendering", Nz::Color::Green); { - builder.BeginRenderPass(windowImpl->GetFramebuffer(frame.GetFramebufferIndex()), windowImpl->GetRenderPass(), windowRenderRect); + builder.BeginRenderPass(windowRT->GetFramebuffer(frame.GetFramebufferIndex()), windowRT->GetRenderPass(), windowRenderRect); { builder.SetScissor(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) }); builder.SetViewport(Nz::Recti{ 0, 0, int(windowSize.x), int(windowSize.y) }); @@ -1133,8 +1132,6 @@ int main() frame.Present(); - window.Display(); - matUpdate = false; lightUpdate = false; diff --git a/examples/GraphicsTest/main.cpp b/examples/GraphicsTest/main.cpp index c8ce6c52f..476e16e8e 100644 --- a/examples/GraphicsTest/main.cpp +++ b/examples/GraphicsTest/main.cpp @@ -81,7 +81,7 @@ int main() Nz::Vector2ui windowSize = window.GetSize(); - Nz::Camera camera(window.GetImpl()); + Nz::Camera camera(window.GetRenderTarget()); Nz::ViewerInstance& viewerInstance = camera.GetViewerInstance(); viewerInstance.UpdateTargetSize(Nz::Vector2f(window.GetSize())); @@ -98,8 +98,6 @@ int main() framePipeline.RegisterInstancedDrawable(modelInstance, &model); framePipeline.RegisterInstancedDrawable(modelInstance2, &model); - Nz::RenderWindowImpl* windowImpl = window.GetImpl(); - Nz::Vector3f viewerPos = Nz::Vector3f::Zero(); Nz::EulerAnglesf camAngles(0.f, 0.f, 0.f); @@ -188,7 +186,7 @@ int main() viewerPos += Nz::Vector3f::Down() * cameraSpeed; } - Nz::RenderFrame frame = windowImpl->Acquire(); + Nz::RenderFrame frame = window.AcquireFrame(); if (!frame) continue; @@ -201,8 +199,6 @@ int main() frame.Present(); - window.Display(); - // On incrémente le compteur de FPS improvisé fps++; diff --git a/examples/PhysicsDemo/main.cpp b/examples/PhysicsDemo/main.cpp index 5bf63907a..e412cc721 100644 --- a/examples/PhysicsDemo/main.cpp +++ b/examples/PhysicsDemo/main.cpp @@ -37,12 +37,6 @@ int main() Nz::RenderWindow window; - Nz::MeshParams meshParams; - meshParams.center = true; - meshParams.storage = Nz::DataStorage::Software; - meshParams.matrix = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, 90.f, 0.f)) * Nz::Matrix4f::Scale(Nz::Vector3f(0.002f)); - meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_UV); - std::shared_ptr device = Nz::Graphics::Instance()->GetRenderDevice(); std::string windowTitle = "Graphics Test"; @@ -52,7 +46,11 @@ int main() return __LINE__; } - Nz::RenderWindowImpl* windowImpl = window.GetImpl(); + Nz::MeshParams meshParams; + meshParams.center = true; + meshParams.storage = Nz::DataStorage::Software; + meshParams.matrix = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, 90.f, 0.f)) * Nz::Matrix4f::Scale(Nz::Vector3f(0.002f)); + meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_UV); std::shared_ptr spaceshipMesh = Nz::Mesh::LoadFromFile(resourceDir / "Spaceship/spaceship.obj", meshParams); if (!spaceshipMesh) @@ -65,17 +63,6 @@ int main() std::shared_ptr gfxMesh = std::make_shared(*spaceshipMesh); // Texture - std::shared_ptr diffuseImage = Nz::Image::LoadFromFile(resourceDir / "Spaceship/Texture/diffuse.png"); - if (!diffuseImage || !diffuseImage->Convert(Nz::PixelFormat::RGBA8_SRGB)) - { - NazaraError("Failed to load image"); - return __LINE__; - } - - Nz::TextureParams texParams; - texParams.renderDevice = device; - texParams.loadFormat = Nz::PixelFormat::RGBA8_SRGB; - std::shared_ptr material = std::make_shared(); std::shared_ptr depthPass = std::make_shared(Nz::DepthMaterial::GetSettings()); @@ -94,6 +81,10 @@ int main() Nz::TextureSamplerInfo samplerInfo; samplerInfo.anisotropyLevel = 8; + Nz::TextureParams texParams; + texParams.renderDevice = device; + texParams.loadFormat = Nz::PixelFormat::RGBA8_SRGB; + Nz::BasicMaterial basicMat(*materialPass); basicMat.EnableAlphaTest(false); basicMat.SetAlphaMap(Nz::Texture::LoadFromFile(resourceDir / "alphatile.png", texParams)); @@ -121,7 +112,7 @@ int main() entt::entity viewer = registry.create(); registry.emplace(viewer); - registry.emplace(viewer, windowImpl); + registry.emplace(viewer, window.GetRenderTarget()); auto shipCollider = std::make_shared(vertices, vertexMapper.GetVertexCount(), 0.01f); @@ -337,7 +328,7 @@ int main() playerShipBody.AddForce(Nz::Vector3f::Down() * 3.f * mass, Nz::CoordSys::Local); } - Nz::RenderFrame frame = windowImpl->Acquire(); + Nz::RenderFrame frame = window.AcquireFrame(); if (!frame) continue; @@ -345,8 +336,6 @@ int main() frame.Present(); - window.Display(); - fps++; if (secondClock.GetMilliseconds() >= 1000) diff --git a/examples/PlayMusic/main.cpp b/examples/PlayMusic/main.cpp index 97c1048a7..8f7cd77ee 100644 --- a/examples/PlayMusic/main.cpp +++ b/examples/PlayMusic/main.cpp @@ -14,6 +14,8 @@ int main() { + std::cout << u8"Héhéhé" << std::endl; + return 0; std::filesystem::path resourceDir = "resources"; if (!std::filesystem::is_directory(resourceDir) && std::filesystem::is_directory(".." / resourceDir)) resourceDir = ".." / resourceDir; diff --git a/examples/RenderTest/main.cpp b/examples/RenderTest/main.cpp index 426b6453b..93ac746f2 100644 --- a/examples/RenderTest/main.cpp +++ b/examples/RenderTest/main.cpp @@ -221,8 +221,7 @@ int main() Nz::RenderDevice* renderDevice = window.GetRenderDevice().get(); - Nz::RenderWindowImpl* windowImpl = window.GetImpl(); - std::shared_ptr commandPool = windowImpl->CreateCommandPool(Nz::QueueType::Graphics); + std::shared_ptr commandPool = renderDevice->InstantiateCommandPool(Nz::QueueType::Graphics); Nz::RenderBuffer* renderBufferIB = static_cast(meshIB->GetBuffer()->GetImpl()); Nz::RenderBuffer* renderBufferVB = static_cast(meshVB->GetBuffer()->GetImpl()); @@ -329,7 +328,7 @@ int main() uboUpdate = true; } - Nz::RenderFrame frame = windowImpl->Acquire(); + Nz::RenderFrame frame = window.AcquireFrame(); if (!frame) continue; @@ -355,6 +354,7 @@ int main() uboUpdate = false; } + const Nz::RenderTarget* windowRT = window.GetRenderTarget(); frame.Execute([&](Nz::CommandBufferBuilder& builder) { Nz::Recti renderRect(0, 0, window.GetSize().x, window.GetSize().y); @@ -366,7 +366,7 @@ int main() builder.BeginDebugRegion("Main window rendering", Nz::Color::Green); { - builder.BeginRenderPass(windowImpl->GetFramebuffer(frame.GetFramebufferIndex()), windowImpl->GetRenderPass(), renderRect, { clearValues[0], clearValues[1] }); + builder.BeginRenderPass(windowRT->GetFramebuffer(frame.GetFramebufferIndex()), windowRT->GetRenderPass(), renderRect, { clearValues[0], clearValues[1] }); { builder.BindIndexBuffer(*indexBufferImpl); builder.BindPipeline(*pipeline); @@ -387,8 +387,6 @@ int main() frame.Present(); - window.Display(); - // On incrémente le compteur de FPS improvisé fps++; diff --git a/include/Nazara/Renderer/RenderWindow.hpp b/include/Nazara/Renderer/RenderWindow.hpp index c4534c2ea..d268b868d 100644 --- a/include/Nazara/Renderer/RenderWindow.hpp +++ b/include/Nazara/Renderer/RenderWindow.hpp @@ -29,15 +29,15 @@ namespace Nz inline RenderWindow(std::shared_ptr renderDevice, void* handle, const RenderWindowParameters& parameters = RenderWindowParameters()); inline ~RenderWindow(); + RenderFrame AcquireFrame(); + bool Create(std::shared_ptr renderDevice, VideoMode mode, const std::string& title, WindowStyleFlags style = WindowStyle_Default, const RenderWindowParameters& parameters = RenderWindowParameters()); bool Create(std::shared_ptr renderDevice, void* handle, const RenderWindowParameters ¶meters = RenderWindowParameters()); - void Display(); - void EnableVerticalSync(bool enabled); - inline RenderWindowImpl* GetImpl(); inline const std::shared_ptr& GetRenderDevice() const; + inline const RenderTarget* GetRenderTarget() const; inline RenderSurface* GetSurface(); inline bool IsValid() const; diff --git a/include/Nazara/Renderer/RenderWindow.inl b/include/Nazara/Renderer/RenderWindow.inl index c93291e46..74a564b0e 100644 --- a/include/Nazara/Renderer/RenderWindow.inl +++ b/include/Nazara/Renderer/RenderWindow.inl @@ -32,16 +32,16 @@ namespace Nz Destroy(); } - inline RenderWindowImpl* RenderWindow::GetImpl() - { - return m_impl.get(); - } - inline const std::shared_ptr& RenderWindow::GetRenderDevice() const { return m_renderDevice; } + inline const RenderTarget* RenderWindow::GetRenderTarget() const + { + return m_impl.get(); + } + inline RenderSurface* RenderWindow::GetSurface() { return m_surface.get(); diff --git a/src/Nazara/Renderer/RenderWindow.cpp b/src/Nazara/Renderer/RenderWindow.cpp index ea4412526..ffbd9074b 100644 --- a/src/Nazara/Renderer/RenderWindow.cpp +++ b/src/Nazara/Renderer/RenderWindow.cpp @@ -11,6 +11,26 @@ namespace Nz { + RenderFrame RenderWindow::AcquireFrame() + { + if (!m_impl) + { + NazaraError("window is not created"); + return RenderFrame{}; + } + + if (m_framerateLimit > 0) + { + int remainingTime = 1000 / static_cast(m_framerateLimit) - static_cast(m_clock.GetMilliseconds()); + if (remainingTime > 0) + std::this_thread::sleep_for(std::chrono::milliseconds(remainingTime)); + + m_clock.Restart(); + } + + return m_impl->Acquire(); + } + bool RenderWindow::Create(std::shared_ptr renderDevice, VideoMode mode, const std::string& title, WindowStyleFlags style, const RenderWindowParameters& parameters) { m_parameters = parameters; @@ -27,18 +47,6 @@ namespace Nz return Window::Create(handle); } - void RenderWindow::Display() - { - if (m_framerateLimit > 0) - { - int remainingTime = 1000 / static_cast(m_framerateLimit) - static_cast(m_clock.GetMilliseconds()); - if (remainingTime > 0) - std::this_thread::sleep_for(std::chrono::milliseconds(remainingTime)); - - m_clock.Restart(); - } - } - void RenderWindow::EnableVerticalSync(bool enabled) { ///TODO