From a8b6d9cb422be02c7ca9d637bb6d29538df6b055 Mon Sep 17 00:00:00 2001 From: SirLynix Date: Sun, 1 Jan 2023 19:48:51 +0100 Subject: [PATCH] Renderer/RenderFrame: Use FunctionRef instead of std::function to avoid allocations --- include/Nazara/OpenGLRenderer/OpenGLRenderImage.hpp | 2 +- include/Nazara/Renderer/RenderFrame.hpp | 3 ++- include/Nazara/Renderer/RenderImage.hpp | 3 ++- include/Nazara/VulkanRenderer/VulkanRenderImage.hpp | 2 +- src/Nazara/OpenGLRenderer/OpenGLRenderImage.cpp | 2 +- src/Nazara/Renderer/RenderFrame.cpp | 2 +- src/Nazara/VulkanRenderer/VulkanRenderImage.cpp | 2 +- 7 files changed, 9 insertions(+), 7 deletions(-) diff --git a/include/Nazara/OpenGLRenderer/OpenGLRenderImage.hpp b/include/Nazara/OpenGLRenderer/OpenGLRenderImage.hpp index 1225ae214..29758f9ee 100644 --- a/include/Nazara/OpenGLRenderer/OpenGLRenderImage.hpp +++ b/include/Nazara/OpenGLRenderer/OpenGLRenderImage.hpp @@ -22,7 +22,7 @@ namespace Nz public: OpenGLRenderImage(OpenGLRenderWindow& owner); - void Execute(const std::function& callback, QueueTypeFlags queueTypeFlags) override; + void Execute(const FunctionRef& callback, QueueTypeFlags queueTypeFlags) override; OpenGLUploadPool& GetUploadPool() override; diff --git a/include/Nazara/Renderer/RenderFrame.hpp b/include/Nazara/Renderer/RenderFrame.hpp index e708344d6..4385fd51e 100644 --- a/include/Nazara/Renderer/RenderFrame.hpp +++ b/include/Nazara/Renderer/RenderFrame.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include namespace Nz @@ -29,7 +30,7 @@ namespace Nz RenderFrame(RenderFrame&&) = delete; ~RenderFrame() = default; - void Execute(const std::function& callback, QueueTypeFlags queueTypeFlags); + void Execute(const FunctionRef& callback, QueueTypeFlags queueTypeFlags); inline std::size_t GetFramebufferIndex() const; const Vector2ui& GetSize() const; diff --git a/include/Nazara/Renderer/RenderImage.hpp b/include/Nazara/Renderer/RenderImage.hpp index 2e62bb004..e3e460b9f 100644 --- a/include/Nazara/Renderer/RenderImage.hpp +++ b/include/Nazara/Renderer/RenderImage.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -27,7 +28,7 @@ namespace Nz virtual ~RenderImage(); - virtual void Execute(const std::function& callback, QueueTypeFlags queueTypeFlags) = 0; + virtual void Execute(const FunctionRef& callback, QueueTypeFlags queueTypeFlags) = 0; inline void FlushReleaseQueue(); diff --git a/include/Nazara/VulkanRenderer/VulkanRenderImage.hpp b/include/Nazara/VulkanRenderer/VulkanRenderImage.hpp index 82cb4fe12..0aff4cb6c 100644 --- a/include/Nazara/VulkanRenderer/VulkanRenderImage.hpp +++ b/include/Nazara/VulkanRenderer/VulkanRenderImage.hpp @@ -28,7 +28,7 @@ namespace Nz VulkanRenderImage(VulkanRenderImage&&) = delete; ~VulkanRenderImage(); - void Execute(const std::function& callback, QueueTypeFlags queueTypeFlags) override; + void Execute(const FunctionRef& callback, QueueTypeFlags queueTypeFlags) override; inline Vk::Fence& GetInFlightFence(); inline Vk::Semaphore& GetImageAvailableSemaphore(); diff --git a/src/Nazara/OpenGLRenderer/OpenGLRenderImage.cpp b/src/Nazara/OpenGLRenderer/OpenGLRenderImage.cpp index f8a8bc97d..24a3e7e92 100644 --- a/src/Nazara/OpenGLRenderer/OpenGLRenderImage.cpp +++ b/src/Nazara/OpenGLRenderer/OpenGLRenderImage.cpp @@ -17,7 +17,7 @@ namespace Nz { } - void OpenGLRenderImage::Execute(const std::function& callback, QueueTypeFlags /*queueTypeFlags*/) + void OpenGLRenderImage::Execute(const FunctionRef& callback, QueueTypeFlags /*queueTypeFlags*/) { OpenGLCommandBuffer commandBuffer; //< TODO: Use a pool and remove default constructor OpenGLCommandBufferBuilder builder(commandBuffer); diff --git a/src/Nazara/Renderer/RenderFrame.cpp b/src/Nazara/Renderer/RenderFrame.cpp index 18305a234..9bbc9399d 100644 --- a/src/Nazara/Renderer/RenderFrame.cpp +++ b/src/Nazara/Renderer/RenderFrame.cpp @@ -9,7 +9,7 @@ namespace Nz { - void RenderFrame::Execute(const std::function& callback, QueueTypeFlags queueTypeFlags) + void RenderFrame::Execute(const FunctionRef& callback, QueueTypeFlags queueTypeFlags) { if (!m_image) throw std::runtime_error("frame is either invalid or has already been presented"); diff --git a/src/Nazara/VulkanRenderer/VulkanRenderImage.cpp b/src/Nazara/VulkanRenderer/VulkanRenderImage.cpp index 4cec6e550..0c87a8464 100644 --- a/src/Nazara/VulkanRenderer/VulkanRenderImage.cpp +++ b/src/Nazara/VulkanRenderer/VulkanRenderImage.cpp @@ -34,7 +34,7 @@ namespace Nz m_inFlightCommandBuffers.clear(); } - void VulkanRenderImage::Execute(const std::function& callback, QueueTypeFlags queueTypeFlags) + void VulkanRenderImage::Execute(const FunctionRef& callback, QueueTypeFlags queueTypeFlags) { Vk::CommandBuffer* commandBuffer; if (m_currentCommandBuffer >= m_inFlightCommandBuffers.size())