Renderer/RenderFrame: Use FunctionRef instead of std::function to avoid allocations
This commit is contained in:
parent
8555b3d6ef
commit
a8b6d9cb42
|
|
@ -22,7 +22,7 @@ namespace Nz
|
||||||
public:
|
public:
|
||||||
OpenGLRenderImage(OpenGLRenderWindow& owner);
|
OpenGLRenderImage(OpenGLRenderWindow& owner);
|
||||||
|
|
||||||
void Execute(const std::function<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags) override;
|
void Execute(const FunctionRef<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags) override;
|
||||||
|
|
||||||
OpenGLUploadPool& GetUploadPool() override;
|
OpenGLUploadPool& GetUploadPool() override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
#include <Nazara/Renderer/Config.hpp>
|
#include <Nazara/Renderer/Config.hpp>
|
||||||
#include <Nazara/Renderer/Enums.hpp>
|
#include <Nazara/Renderer/Enums.hpp>
|
||||||
#include <Nazara/Renderer/RenderImage.hpp>
|
#include <Nazara/Renderer/RenderImage.hpp>
|
||||||
|
#include <Nazara/Utils/FunctionRef.hpp>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
|
|
@ -29,7 +30,7 @@ namespace Nz
|
||||||
RenderFrame(RenderFrame&&) = delete;
|
RenderFrame(RenderFrame&&) = delete;
|
||||||
~RenderFrame() = default;
|
~RenderFrame() = default;
|
||||||
|
|
||||||
void Execute(const std::function<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags);
|
void Execute(const FunctionRef<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags);
|
||||||
|
|
||||||
inline std::size_t GetFramebufferIndex() const;
|
inline std::size_t GetFramebufferIndex() const;
|
||||||
const Vector2ui& GetSize() const;
|
const Vector2ui& GetSize() const;
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
#include <Nazara/Prerequisites.hpp>
|
#include <Nazara/Prerequisites.hpp>
|
||||||
#include <Nazara/Renderer/Config.hpp>
|
#include <Nazara/Renderer/Config.hpp>
|
||||||
#include <Nazara/Renderer/Enums.hpp>
|
#include <Nazara/Renderer/Enums.hpp>
|
||||||
|
#include <Nazara/Utils/FunctionRef.hpp>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
|
@ -27,7 +28,7 @@ namespace Nz
|
||||||
|
|
||||||
virtual ~RenderImage();
|
virtual ~RenderImage();
|
||||||
|
|
||||||
virtual void Execute(const std::function<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags) = 0;
|
virtual void Execute(const FunctionRef<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags) = 0;
|
||||||
|
|
||||||
inline void FlushReleaseQueue();
|
inline void FlushReleaseQueue();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ namespace Nz
|
||||||
VulkanRenderImage(VulkanRenderImage&&) = delete;
|
VulkanRenderImage(VulkanRenderImage&&) = delete;
|
||||||
~VulkanRenderImage();
|
~VulkanRenderImage();
|
||||||
|
|
||||||
void Execute(const std::function<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags) override;
|
void Execute(const FunctionRef<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags) override;
|
||||||
|
|
||||||
inline Vk::Fence& GetInFlightFence();
|
inline Vk::Fence& GetInFlightFence();
|
||||||
inline Vk::Semaphore& GetImageAvailableSemaphore();
|
inline Vk::Semaphore& GetImageAvailableSemaphore();
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ namespace Nz
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void OpenGLRenderImage::Execute(const std::function<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags /*queueTypeFlags*/)
|
void OpenGLRenderImage::Execute(const FunctionRef<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags /*queueTypeFlags*/)
|
||||||
{
|
{
|
||||||
OpenGLCommandBuffer commandBuffer; //< TODO: Use a pool and remove default constructor
|
OpenGLCommandBuffer commandBuffer; //< TODO: Use a pool and remove default constructor
|
||||||
OpenGLCommandBufferBuilder builder(commandBuffer);
|
OpenGLCommandBufferBuilder builder(commandBuffer);
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
void RenderFrame::Execute(const std::function<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags)
|
void RenderFrame::Execute(const FunctionRef<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags)
|
||||||
{
|
{
|
||||||
if (!m_image)
|
if (!m_image)
|
||||||
throw std::runtime_error("frame is either invalid or has already been presented");
|
throw std::runtime_error("frame is either invalid or has already been presented");
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ namespace Nz
|
||||||
m_inFlightCommandBuffers.clear();
|
m_inFlightCommandBuffers.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanRenderImage::Execute(const std::function<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags)
|
void VulkanRenderImage::Execute(const FunctionRef<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags)
|
||||||
{
|
{
|
||||||
Vk::CommandBuffer* commandBuffer;
|
Vk::CommandBuffer* commandBuffer;
|
||||||
if (m_currentCommandBuffer >= m_inFlightCommandBuffers.size())
|
if (m_currentCommandBuffer >= m_inFlightCommandBuffers.size())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue