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);
|
||||
|
||||
Reference in New Issue
Block a user