Graphics: Replace RenderFrame by RenderResources

This changes makes the whole rendering independent from the RenderFrame acquired from the Swapchain.
This may allow to do offscreen rendering (= without swapchain), or multi-window rendering in the future
This commit is contained in:
Lynix
2023-11-21 23:33:18 +01:00
parent d7d5c09428
commit 1e81b38c0f
66 changed files with 213 additions and 196 deletions

View File

@@ -22,7 +22,7 @@
namespace Nz
{
class RenderFrame;
class RenderResources;
class NAZARA_GRAPHICS_API BakedFrameGraph
{
@@ -34,12 +34,12 @@ namespace Nz
BakedFrameGraph(BakedFrameGraph&&) noexcept = default;
~BakedFrameGraph() = default;
void Execute(RenderFrame& renderFrame);
void Execute(RenderResources& renderResources);
const std::shared_ptr<Texture>& GetAttachmentTexture(std::size_t attachmentIndex) const;
const std::shared_ptr<RenderPass>& GetRenderPass(std::size_t passIndex) const;
bool Resize(RenderFrame& renderFrame, std::span<Vector2ui> viewerTargetSizes);
bool Resize(RenderResources& renderResources, std::span<Vector2ui> viewerTargetSizes);
BakedFrameGraph& operator=(const BakedFrameGraph&) = delete;
BakedFrameGraph& operator=(BakedFrameGraph&&) noexcept = default;

View File

@@ -37,7 +37,7 @@ namespace Nz
inline bool IsShadowStabilization() const;
void PrepareRendering(RenderFrame& renderFrame, const AbstractViewer* viewer) override;
void PrepareRendering(RenderResources& renderResources, const AbstractViewer* viewer) override;
void RegisterMaterialInstance(const MaterialInstance& matInstance) override;
void RegisterPassInputs(FramePass& pass, const AbstractViewer* viewer) override;

View File

@@ -24,7 +24,7 @@ namespace Nz
{
class CommandBufferBuilder;
class RenderElement;
class RenderFrame;
class RenderResources;
class Texture;
class ViewerInstance;
struct ElementRendererData;
@@ -40,10 +40,10 @@ namespace Nz
virtual RenderElementPoolBase& GetPool() = 0;
virtual std::unique_ptr<ElementRendererData> InstanciateData() = 0;
virtual void Prepare(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, RenderFrame& currentFrame, std::size_t elementCount, const Pointer<const RenderElement>* elements, SparsePtr<const RenderStates> renderStates);
virtual void PrepareEnd(RenderFrame& currentFrame, ElementRendererData& rendererData);
virtual void Prepare(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, RenderResources& currentFrame, std::size_t elementCount, const Pointer<const RenderElement>* elements, SparsePtr<const RenderStates> renderStates);
virtual void PrepareEnd(RenderResources& currentFrame, ElementRendererData& rendererData);
virtual void Render(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, CommandBufferBuilder& commandBuffer, std::size_t elementCount, const Pointer<const RenderElement>* elements) = 0;
virtual void Reset(ElementRendererData& rendererData, RenderFrame& currentFrame);
virtual void Reset(ElementRendererData& rendererData, RenderResources& renderResources);
struct RenderStates
{

View File

@@ -62,7 +62,7 @@ namespace Nz
const LightShadowData* RetrieveLightShadowData(std::size_t lightIndex) const override;
const Texture* RetrieveLightShadowmap(std::size_t lightIndex, const AbstractViewer* viewer) const override;
void Render(RenderFrame& renderFrame) override;
void Render(RenderResources& renderResources) override;
void UnregisterLight(std::size_t lightIndex) override;
void UnregisterRenderable(std::size_t renderableIndex) override;
@@ -176,7 +176,6 @@ namespace Nz
MemoryPool<SkeletonInstanceData> m_skeletonInstances;
MemoryPool<ViewerData> m_viewerPool;
MemoryPool<WorldInstanceData> m_worldInstances;
RenderFrame* m_currentRenderFrame;
UInt8 m_generationCounter;
bool m_rebuildFrameGraph;
};

View File

@@ -55,12 +55,12 @@ namespace Nz
ForwardPipelinePass& operator=(ForwardPipelinePass&&) = delete;
private:
void OnTransfer(RenderFrame& renderFrame, CommandBufferBuilder& builder) override;
void OnTransfer(RenderResources& renderResources, CommandBufferBuilder& builder) override;
void PrepareDirectionalLights(void* lightMemory);
void PreparePointLights(void* lightMemory);
void PrepareSpotLights(void* lightMemory);
void PrepareLights(RenderFrame& renderFrame, const Frustumf& frustum, const Bitset<UInt64>& visibleLights);
void PrepareLights(RenderResources& renderResources, const Frustumf& frustum, const Bitset<UInt64>& visibleLights);
struct MaterialPassEntry
{

View File

@@ -10,7 +10,6 @@
#include <NazaraUtils/Prerequisites.hpp>
#include <Nazara/Core/Color.hpp>
#include <Nazara/Graphics/Config.hpp>
#include <Nazara/Graphics/FramePassAttachment.hpp>
#include <Nazara/Math/Rect.hpp>
#include <Nazara/Renderer/Enums.hpp>
#include <functional>
@@ -23,7 +22,7 @@ namespace Nz
class BakedFrameGraph;
class CommandBufferBuilder;
class FrameGraph;
class RenderFrame;
class RenderResources;
enum class FramePassExecution
{
@@ -35,8 +34,8 @@ namespace Nz
struct FramePassEnvironment
{
BakedFrameGraph& frameGraph;
RenderResources& renderResources;
Recti renderRect;
RenderFrame& renderFrame;
};
class NAZARA_GRAPHICS_API FramePass

View File

@@ -25,7 +25,7 @@ namespace Nz
class LightShadowData;
class MaterialInstance;
class PipelineViewer;
class RenderFrame;
class RenderResources;
class NAZARA_GRAPHICS_API FramePipeline
{
@@ -54,7 +54,7 @@ namespace Nz
virtual const LightShadowData* RetrieveLightShadowData(std::size_t lightIndex) const = 0;
virtual const Texture* RetrieveLightShadowmap(std::size_t lightIndex, const AbstractViewer* viewer) const = 0;
virtual void Render(RenderFrame& renderFrame) = 0;
virtual void Render(RenderResources& renderResources) = 0;
virtual void UnregisterLight(std::size_t lightIndex) = 0;
virtual void UnregisterRenderable(std::size_t renderableIndex) = 0;
@@ -71,7 +71,7 @@ namespace Nz
FramePipeline& operator=(const FramePipeline&) = delete;
FramePipeline& operator=(FramePipeline&&) = delete;
NazaraSignal(OnTransfer, FramePipeline* /*pipeline*/, RenderFrame& /*renderFrame*/, CommandBufferBuilder& /*builder*/);
NazaraSignal(OnTransfer, FramePipeline* /*pipeline*/, RenderResources& /*renderResources*/, CommandBufferBuilder& /*builder*/);
static constexpr std::size_t NoSkeletonInstance = std::numeric_limits<std::size_t>::max();

View File

@@ -24,7 +24,7 @@ namespace Nz
class FramePipeline;
class InstancedRenderable;
class MaterialInstance;
class RenderFrame;
class RenderResources;
class SkeletonInstance;
class WorldInstance;
@@ -60,7 +60,7 @@ namespace Nz
{
const Bitset<UInt64>* visibleLights;
const Frustumf& frustum;
RenderFrame& renderFrame;
RenderResources& renderResources;
const std::vector<VisibleRenderable>& visibleRenderables;
std::size_t visibilityHash;
};

View File

@@ -17,7 +17,7 @@ namespace Nz
class FrameGraph;
class FramePass;
class MaterialInstance;
class RenderFrame;
class RenderResources;
class Texture;
class NAZARA_GRAPHICS_API LightShadowData
@@ -30,7 +30,7 @@ namespace Nz
inline bool IsPerViewer() const;
virtual void PrepareRendering(RenderFrame& renderFrame, [[maybe_unused]] const AbstractViewer* viewer) = 0;
virtual void PrepareRendering(RenderResources& renderResources, [[maybe_unused]] const AbstractViewer* viewer) = 0;
virtual void RegisterMaterialInstance(const MaterialInstance& matInstance) = 0;
virtual void RegisterPassInputs(FramePass& pass, const AbstractViewer* viewer) = 0;

View File

@@ -82,7 +82,7 @@ namespace Nz
bool HasPass(std::string_view passName) const;
inline bool HasPass(std::size_t passIndex) const;
void OnTransfer(RenderFrame& renderFrame, CommandBufferBuilder& builder) override;
void OnTransfer(RenderResources& renderResources, CommandBufferBuilder& builder) override;
inline void SetTextureProperty(std::string_view propertyName, std::shared_ptr<Texture> texture);
inline void SetTextureProperty(std::string_view propertyName, std::shared_ptr<Texture> texture, const TextureSamplerInfo& samplerInfo);

View File

@@ -28,7 +28,7 @@ namespace Nz
PointLightShadowData(PointLightShadowData&&) = delete;
~PointLightShadowData() = default;
void PrepareRendering(RenderFrame& renderFrame, const AbstractViewer* viewer) override;
void PrepareRendering(RenderResources& renderResources, const AbstractViewer* viewer) override;
void RegisterMaterialInstance(const MaterialInstance& matInstance) override;
void RegisterPassInputs(FramePass& pass, const AbstractViewer* viewer) override;

View File

@@ -18,9 +18,9 @@ namespace Nz
class CommandBufferBuilder;
class Framebuffer;
class FrameGraph;
class RenderFrame;
class RenderPass;
class Texture;
class RenderResources;
class NAZARA_GRAPHICS_API RenderTarget
{
@@ -29,7 +29,7 @@ namespace Nz
virtual ~RenderTarget();
virtual void OnBuildGraph(FrameGraph& frameGraph, std::size_t attachmentIndex) const = 0;
virtual void OnRenderEnd(RenderFrame& renderFrame, const BakedFrameGraph& frameGraph, std::size_t finalAttachment) const = 0;
virtual void OnRenderEnd(RenderResources& resources, const BakedFrameGraph& frameGraph, std::size_t finalAttachment) const = 0;
virtual const Vector2ui& GetSize() const = 0;

View File

@@ -25,7 +25,7 @@ namespace Nz
~RenderTexture() = default;
void OnBuildGraph(FrameGraph& graph, std::size_t attachmentIndex) const override;
void OnRenderEnd(RenderFrame& renderFrame, const BakedFrameGraph& frameGraph, std::size_t finalAttachment) const override;
void OnRenderEnd(RenderResources& resources, const BakedFrameGraph& frameGraph, std::size_t finalAttachment) const override;
const Vector2ui& GetSize() const override;

View File

@@ -27,7 +27,7 @@ namespace Nz
~RenderTextureBlit() = default;
void OnBuildGraph(FrameGraph& graph, std::size_t attachmentIndex) const override;
void OnRenderEnd(RenderFrame& renderFrame, const BakedFrameGraph& frameGraph, std::size_t finalAttachment) const override;
void OnRenderEnd(RenderResources& resources, const BakedFrameGraph& frameGraph, std::size_t finalAttachment) const override;
const Vector2ui& GetSize() const override;

View File

@@ -26,7 +26,7 @@ namespace Nz
~RenderWindow() = default;
void OnBuildGraph(FrameGraph& graph, std::size_t attachmentIndex) const override;
void OnRenderEnd(RenderFrame& renderFrame, const BakedFrameGraph& frameGraph, std::size_t attachmentId) const override;
void OnRenderEnd(RenderResources& renderResources, const BakedFrameGraph& frameGraph, std::size_t attachmentId) const override;
const Vector2ui& GetSize() const override;

View File

@@ -36,7 +36,7 @@ namespace Nz
inline const std::shared_ptr<RenderBuffer>& GetSkeletalBuffer() const;
inline const std::shared_ptr<const Skeleton>& GetSkeleton() const;
void OnTransfer(RenderFrame& renderFrame, CommandBufferBuilder& builder) override;
void OnTransfer(RenderResources& renderResources, CommandBufferBuilder& builder) override;
SkeletonInstance& operator=(const SkeletonInstance&) = delete;
SkeletonInstance& operator=(SkeletonInstance&& skeletonInstance) noexcept;

View File

@@ -28,7 +28,7 @@ namespace Nz
inline const ViewerInstance& GetViewerInstance() const;
void PrepareRendering(RenderFrame& renderFrame, [[maybe_unused]] const AbstractViewer* viewer) override;
void PrepareRendering(RenderResources& renderResources, [[maybe_unused]] const AbstractViewer* viewer) override;
void RegisterMaterialInstance(const MaterialInstance& matInstance) override;
void RegisterPassInputs(FramePass& pass, const AbstractViewer* viewer) override;

View File

@@ -59,10 +59,10 @@ namespace Nz
RenderElementPool<RenderSpriteChain>& GetPool() override;
std::unique_ptr<ElementRendererData> InstanciateData() override;
void Prepare(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, RenderFrame& currentFrame, std::size_t elementCount, const Pointer<const RenderElement>* elements, SparsePtr<const RenderStates> renderStates) override;
void PrepareEnd(RenderFrame& currentFrame, ElementRendererData& rendererData) override;
void Prepare(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, RenderResources& currentFrame, std::size_t elementCount, const Pointer<const RenderElement>* elements, SparsePtr<const RenderStates> renderStates) override;
void PrepareEnd(RenderResources& renderResources, ElementRendererData& rendererData) override;
void Render(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, CommandBufferBuilder& commandBuffer, std::size_t elementCount, const Pointer<const RenderElement>* elements) override;
void Reset(ElementRendererData& rendererData, RenderFrame& currentFrame) override;
void Reset(ElementRendererData& rendererData, RenderResources& currentFrame) override;
private:
void Flush();

View File

@@ -27,9 +27,9 @@ namespace Nz
RenderElementPool<RenderSubmesh>& GetPool() override;
std::unique_ptr<ElementRendererData> InstanciateData() override;
void Prepare(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, RenderFrame& currentFrame, std::size_t elementCount, const Pointer<const RenderElement>* elements, SparsePtr<const RenderStates> renderStates) override;
void Prepare(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, RenderResources& renderResources, std::size_t elementCount, const Pointer<const RenderElement>* elements, SparsePtr<const RenderStates> renderStates) override;
void Render(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, CommandBufferBuilder& commandBuffer, std::size_t elementCount, const Pointer<const RenderElement>* elements) override;
void Reset(ElementRendererData& rendererData, RenderFrame& currentFrame) override;
void Reset(ElementRendererData& rendererData, RenderResources& renderResources) override;
private:
std::vector<ShaderBinding::Binding> m_bindingCache;

View File

@@ -14,7 +14,7 @@
namespace Nz
{
class CommandBufferBuilder;
class RenderFrame;
class RenderResources;
class NAZARA_GRAPHICS_API TransferInterface
{
@@ -24,7 +24,7 @@ namespace Nz
TransferInterface(TransferInterface&&) = default;
virtual ~TransferInterface();
virtual void OnTransfer(RenderFrame& renderFrame, CommandBufferBuilder& builder) = 0;
virtual void OnTransfer(RenderResources& renderResources, CommandBufferBuilder& builder) = 0;
TransferInterface& operator=(const TransferInterface&) = default;
TransferInterface& operator=(TransferInterface&&) = default;

View File

@@ -42,7 +42,7 @@ namespace Nz
inline std::shared_ptr<RenderBuffer>& GetViewerBuffer();
inline const std::shared_ptr<RenderBuffer>& GetViewerBuffer() const;
void OnTransfer(RenderFrame& renderFrame, CommandBufferBuilder& builder) override;
void OnTransfer(RenderResources& renderResources, CommandBufferBuilder& builder) override;
inline void UpdateEyePosition(const Vector3f& eyePosition);
inline void UpdateNearFarPlanes(float nearPlane, float farPlane);

View File

@@ -36,7 +36,7 @@ namespace Nz
inline const Matrix4f& GetInvWorldMatrix() const;
inline const Matrix4f& GetWorldMatrix() const;
void OnTransfer(RenderFrame& renderFrame, CommandBufferBuilder& builder) override;
void OnTransfer(RenderResources& renderFrame, CommandBufferBuilder& builder) override;
inline void UpdateWorldMatrix(const Matrix4f& worldMatrix);
inline void UpdateWorldMatrix(const Matrix4f& worldMatrix, const Matrix4f& invWorldMatrix);

View File

@@ -24,15 +24,19 @@ namespace Nz
void Execute(const FunctionRef<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags) override;
UInt32 GetImageIndex() const override;
OpenGLUploadPool& GetUploadPool() override;
void Present() override;
inline void Reset(UInt32 imageIndex);
void SubmitCommandBuffer(CommandBuffer* commandBuffer, QueueTypeFlags queueTypeFlags) override;
private:
OpenGLSwapchain& m_owner;
OpenGLUploadPool m_uploadPool;
UInt32 m_imageIndex;
};
}

View File

@@ -6,6 +6,10 @@
namespace Nz
{
inline void OpenGLRenderImage::Reset(UInt32 imageIndex)
{
m_imageIndex = imageIndex;
}
}
#include <Nazara/OpenGLRenderer/DebugOff.hpp>

View File

@@ -33,7 +33,7 @@ namespace Nz
inline GL::Context& GetContext();
inline OpenGLDevice& GetDevice();
const OpenGLFramebuffer& GetFramebuffer(std::size_t i) const override;
const OpenGLFramebuffer& GetFramebuffer(std::size_t imageIndex) const override;
std::size_t GetFramebufferCount() const override;
PresentMode GetPresentMode() const override;
const OpenGLRenderPass& GetRenderPass() const override;
@@ -46,17 +46,17 @@ namespace Nz
void SetPresentMode(PresentMode presentMode) override;
TransientResources& Transient() override;
RenderResources& GetTransientResources() override;
private:
std::optional<OpenGLRenderPass> m_renderPass;
std::size_t m_currentFrame;
std::shared_ptr<GL::Context> m_context;
std::vector<std::unique_ptr<OpenGLRenderImage>> m_renderImage;
OpenGLDevice& m_device;
OpenGLWindowFramebuffer m_framebuffer;
PresentMode m_presentMode;
PresentModeFlags m_supportedPresentModes;
UInt32 m_currentImageIndex;
Vector2ui m_size;
bool m_sizeInvalidated;
};

View File

@@ -50,6 +50,7 @@
#include <Nazara/Renderer/RenderPassCache.hpp>
#include <Nazara/Renderer/RenderPipeline.hpp>
#include <Nazara/Renderer/RenderPipelineLayout.hpp>
#include <Nazara/Renderer/RenderResources.hpp>
#include <Nazara/Renderer/RenderStates.hpp>
#include <Nazara/Renderer/ShaderBinding.hpp>
#include <Nazara/Renderer/ShaderModule.hpp>
@@ -57,7 +58,6 @@
#include <Nazara/Renderer/SwapchainParameters.hpp>
#include <Nazara/Renderer/Texture.hpp>
#include <Nazara/Renderer/TextureSampler.hpp>
#include <Nazara/Renderer/TransientResources.hpp>
#include <Nazara/Renderer/UploadPool.hpp>
#include <Nazara/Renderer/WindowSwapchain.hpp>

View File

@@ -23,10 +23,10 @@ namespace Nz
{
class CommandBufferBuilder;
class RenderBuffer;
class RenderFrame;
class RenderDevice;
class RenderPipeline;
class RenderPipelineLayout;
class RenderResources;
class ShaderBinding;
class Skeleton;
@@ -48,9 +48,9 @@ namespace Nz
inline void DrawPoint(const Vector3f& point, const Color& color, float boxSize = 0.01f);
void DrawSkeleton(const Skeleton& skeleton, const Color& color);
void Prepare(RenderFrame& renderFrame);
void Prepare(RenderResources& renderFrame);
void Reset(RenderFrame& renderFrame);
void Reset(RenderResources& renderFrame);
void SetViewerData(const Matrix4f& viewProjMatrix);

View File

@@ -26,16 +26,17 @@ namespace Nz
{
public:
inline explicit RenderFrame();
inline explicit RenderFrame(RenderImage* renderImage, bool framebufferInvalidation, const Vector2ui& size, std::size_t framebufferIndex);
inline explicit RenderFrame(RenderImage* renderImage, bool framebufferInvalidation, const Vector2ui& size);
RenderFrame(const RenderFrame&) = delete;
RenderFrame(RenderFrame&&) = delete;
~RenderFrame() = default;
inline void Execute(const FunctionRef<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags);
inline std::size_t GetFramebufferIndex() const;
inline std::size_t GetImageIndex() const;
const Vector2ui& GetSize() const;
inline RenderDevice& GetRenderDevice();
inline RenderResources& GetTransientResources();
inline UploadPool& GetUploadPool();
inline bool IsFramebufferInvalidated() const;
@@ -48,12 +49,12 @@ namespace Nz
void SubmitCommandBuffer(CommandBuffer* commandBuffer, QueueTypeFlags queueTypeFlags) ;
inline explicit operator bool();
inline operator RenderResources&();
RenderFrame& operator=(const RenderFrame&) = delete;
RenderFrame& operator=(RenderFrame&&) = delete;
private:
std::size_t m_framebufferIndex;
RenderImage* m_image;
Vector2ui m_size;
bool m_framebufferInvalidation;

View File

@@ -7,12 +7,11 @@
namespace Nz
{
inline RenderFrame::RenderFrame() :
RenderFrame(nullptr, false, Vector2ui::Zero(), 0)
RenderFrame(nullptr, false, Vector2ui::Zero())
{
}
inline RenderFrame::RenderFrame(RenderImage* renderImage, bool framebufferInvalidation, const Vector2ui& size, std::size_t framebufferIndex) :
m_framebufferIndex(framebufferIndex),
inline RenderFrame::RenderFrame(RenderImage* renderImage, bool framebufferInvalidation, const Vector2ui& size) :
m_image(renderImage),
m_size(size),
m_framebufferInvalidation(framebufferInvalidation)
@@ -27,9 +26,9 @@ namespace Nz
return m_image->Execute(callback, queueTypeFlags);
}
inline std::size_t RenderFrame::GetFramebufferIndex() const
inline std::size_t RenderFrame::GetImageIndex() const
{
return m_framebufferIndex;
return m_image->GetImageIndex();
}
inline const Vector2ui& RenderFrame::GetSize() const
@@ -42,6 +41,11 @@ namespace Nz
return m_image->GetRenderDevice();
}
inline RenderResources& RenderFrame::GetTransientResources()
{
return *m_image;
}
inline UploadPool& RenderFrame::GetUploadPool()
{
if NAZARA_UNLIKELY(!m_image)
@@ -90,11 +94,15 @@ namespace Nz
m_image->SubmitCommandBuffer(commandBuffer, queueTypeFlags);
}
inline RenderFrame::operator bool()
{
return m_image != nullptr;
}
inline RenderFrame::operator RenderResources&()
{
return GetTransientResources();
}
}
#include <Nazara/Renderer/DebugOff.hpp>

View File

@@ -8,14 +8,14 @@
#define NAZARA_RENDERER_RENDERIMAGE_HPP
#include <NazaraUtils/Prerequisites.hpp>
#include <Nazara/Renderer/TransientResources.hpp>
#include <Nazara/Renderer/RenderResources.hpp>
namespace Nz
{
class NAZARA_RENDERER_API RenderImage : public TransientResources
class NAZARA_RENDERER_API RenderImage : public RenderResources
{
public:
using TransientResources::TransientResources;
using RenderResources::RenderResources;
virtual void Present() = 0;
};

View File

@@ -4,8 +4,8 @@
#pragma once
#ifndef NAZARA_RENDERER_TRANSIENTRESOURCES_HPP
#define NAZARA_RENDERER_TRANSIENTRESOURCES_HPP
#ifndef NAZARA_RENDERER_RENDERRESOURCES_HPP
#define NAZARA_RENDERER_RENDERRESOURCES_HPP
#include <NazaraUtils/Prerequisites.hpp>
#include <Nazara/Renderer/Config.hpp>
@@ -22,18 +22,19 @@ namespace Nz
class RenderDevice;
class UploadPool;
class NAZARA_RENDERER_API TransientResources
class NAZARA_RENDERER_API RenderResources
{
public:
class Releasable;
template<typename T> class ReleasableLambda;
virtual ~TransientResources();
virtual ~RenderResources();
virtual void Execute(const FunctionRef<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags) = 0;
inline void FlushReleaseQueue();
virtual UInt32 GetImageIndex() const = 0;
inline RenderDevice& GetRenderDevice();
virtual UploadPool& GetUploadPool() = 0;
@@ -44,9 +45,9 @@ namespace Nz
virtual void SubmitCommandBuffer(CommandBuffer* commandBuffer, QueueTypeFlags queueTypeFlags) = 0;
protected:
inline TransientResources(RenderDevice& renderDvice);
TransientResources(const TransientResources&) = delete;
TransientResources(TransientResources&&) = delete;
inline RenderResources(RenderDevice& renderDvice);
RenderResources(const RenderResources&) = delete;
RenderResources(RenderResources&&) = delete;
private:
static constexpr std::size_t BlockSize = 4 * 1024 * 1024;
@@ -58,7 +59,7 @@ namespace Nz
RenderDevice& m_renderDevice;
};
class NAZARA_RENDERER_API TransientResources::Releasable
class NAZARA_RENDERER_API RenderResources::Releasable
{
public:
virtual ~Releasable();
@@ -67,7 +68,7 @@ namespace Nz
};
template<typename T>
class TransientResources::ReleasableLambda : public Releasable
class RenderResources::ReleasableLambda : public Releasable
{
public:
template<typename U> ReleasableLambda(U&& lambda);
@@ -85,6 +86,6 @@ namespace Nz
};
}
#include <Nazara/Renderer/TransientResources.inl>
#include <Nazara/Renderer/RenderResources.inl>
#endif // NAZARA_RENDERER_TRANSIENTRESOURCES_HPP
#endif // NAZARA_RENDERER_RENDERRESOURCES_HPP

View File

@@ -8,12 +8,12 @@
namespace Nz
{
inline TransientResources::TransientResources(RenderDevice& renderDevice) :
inline RenderResources::RenderResources(RenderDevice& renderDevice) :
m_renderDevice(renderDevice)
{
}
inline void TransientResources::FlushReleaseQueue()
inline void RenderResources::FlushReleaseQueue()
{
for (Releasable* releasable : m_releaseQueue)
{
@@ -26,13 +26,13 @@ namespace Nz
memoryblock.clear();
}
inline RenderDevice& TransientResources::GetRenderDevice()
inline RenderDevice& RenderResources::GetRenderDevice()
{
return m_renderDevice;
}
template<typename T>
void TransientResources::PushForRelease(T&& value)
void RenderResources::PushForRelease(T&& value)
{
static_assert(std::is_rvalue_reference_v<decltype(value)>);
@@ -40,7 +40,7 @@ namespace Nz
}
template<typename F>
void TransientResources::PushReleaseCallback(F&& callback)
void RenderResources::PushReleaseCallback(F&& callback)
{
using ReleaseFunctor = ReleasableLambda<std::remove_cv_t<std::remove_reference_t<F>>>;
@@ -95,13 +95,13 @@ namespace Nz
template<typename T>
template<typename U>
TransientResources::ReleasableLambda<T>::ReleasableLambda(U&& lambda) :
RenderResources::ReleasableLambda<T>::ReleasableLambda(U&& lambda) :
m_lambda(std::forward<U>(lambda))
{
}
template<typename T>
void TransientResources::ReleasableLambda<T>::Release()
void RenderResources::ReleasableLambda<T>::Release()
{
m_lambda();
}

View File

@@ -20,7 +20,7 @@ namespace Nz
class CommandPool;
class Framebuffer;
class RenderDevice;
class TransientResources;
class RenderResources;
class NAZARA_RENDERER_API Swapchain
{
@@ -38,13 +38,12 @@ namespace Nz
virtual const RenderPass& GetRenderPass() const = 0;
virtual const Vector2ui& GetSize() const = 0;
virtual PresentModeFlags GetSupportedPresentModes() const = 0;
virtual RenderResources& GetTransientResources() = 0;
virtual void NotifyResize(const Vector2ui& newSize) = 0;
virtual void SetPresentMode(PresentMode presentMode) = 0;
virtual TransientResources& Transient() = 0;
NazaraSignal(OnSwapchainResize, Swapchain* /*swapchain*/, const Vector2ui& /*newSize*/);
protected:

View File

@@ -39,8 +39,7 @@ namespace Nz
const Vector2ui& GetSize() const;
inline Swapchain* GetSwapchain();
inline const Swapchain* GetSwapchain() const;
inline TransientResources& Transient();
inline RenderResources& GetTransientResources();
WindowSwapchain& operator=(const WindowSwapchain&) = delete;
WindowSwapchain& operator=(WindowSwapchain&& windowSwapchain) = delete;

View File

@@ -53,9 +53,9 @@ namespace Nz
return m_swapchain.get();
}
inline TransientResources& WindowSwapchain::Transient()
inline RenderResources& WindowSwapchain::GetTransientResources()
{
return m_swapchain->Transient();
return m_swapchain->GetTransientResources();
}
void WindowSwapchain::DisconnectSignals()

View File

@@ -31,7 +31,7 @@ namespace Nz
inline Vk::Fence& GetInFlightFence();
inline Vk::Semaphore& GetImageAvailableSemaphore();
inline UInt32 GetImageIndex();
UInt32 GetImageIndex() const override;
inline Vk::Semaphore& GetRenderFinishedSemaphore();
VulkanUploadPool& GetUploadPool() override;

View File

@@ -16,11 +16,6 @@ namespace Nz
return m_imageAvailableSemaphore;
}
inline UInt32 VulkanRenderImage::GetImageIndex()
{
return m_imageIndex;
}
inline Vk::Semaphore& VulkanRenderImage::GetRenderFinishedSemaphore()
{
return m_renderFinishedSemaphore;

View File

@@ -57,6 +57,7 @@ namespace Nz
PresentMode GetPresentMode() const override;
PresentModeFlags GetSupportedPresentModes() const override;
inline const Vk::Swapchain& GetSwapchain() const;
RenderResources& GetTransientResources() override;
void NotifyResize(const Vector2ui& newSize) override;
@@ -64,8 +65,6 @@ namespace Nz
void SetPresentMode(PresentMode presentMode) override;
TransientResources& Transient() override;
VulkanSwapchain& operator=(const VulkanSwapchain&) = delete;
VulkanSwapchain& operator=(VulkanSwapchain&&) = delete;