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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
inline void OpenGLRenderImage::Reset(UInt32 imageIndex)
|
||||
{
|
||||
m_imageIndex = imageIndex;
|
||||
}
|
||||
}
|
||||
|
||||
#include <Nazara/OpenGLRenderer/DebugOff.hpp>
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -16,11 +16,6 @@ namespace Nz
|
||||
return m_imageAvailableSemaphore;
|
||||
}
|
||||
|
||||
inline UInt32 VulkanRenderImage::GetImageIndex()
|
||||
{
|
||||
return m_imageIndex;
|
||||
}
|
||||
|
||||
inline Vk::Semaphore& VulkanRenderImage::GetRenderFinishedSemaphore()
|
||||
{
|
||||
return m_renderFinishedSemaphore;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user