Graphics: Add data-driven pipeline passes
Fix compilation
This commit is contained in:
committed by
Jérôme Leclercq
parent
4995364418
commit
8fb6ea728d
@@ -9,25 +9,80 @@
|
||||
|
||||
#include <NazaraUtils/Prerequisites.hpp>
|
||||
#include <Nazara/Graphics/Config.hpp>
|
||||
#include <Nazara/Graphics/Enums.hpp>
|
||||
#include <Nazara/Math/Frustum.hpp>
|
||||
#include <Nazara/Math/Rect.hpp>
|
||||
#include <NazaraUtils/Bitset.hpp>
|
||||
#include <limits>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
class AbstractViewer;
|
||||
class ElementRendererRegistry;
|
||||
class FrameGraph;
|
||||
class FramePass;
|
||||
class FramePipeline;
|
||||
class InstancedRenderable;
|
||||
class MaterialInstance;
|
||||
class RenderFrame;
|
||||
class SkeletonInstance;
|
||||
class WorldInstance;
|
||||
|
||||
class NAZARA_GRAPHICS_API FramePipelinePass
|
||||
{
|
||||
public:
|
||||
FramePipelinePass() = default;
|
||||
struct FrameData;
|
||||
struct PassData;
|
||||
struct PassInputOuputs;
|
||||
struct VisibleRenderable;
|
||||
|
||||
inline FramePipelinePass(FramePipelineNotificationFlags notificationFlags);
|
||||
FramePipelinePass(const FramePipelinePass&) = delete;
|
||||
FramePipelinePass(FramePipelinePass&&) = delete;
|
||||
virtual ~FramePipelinePass();
|
||||
|
||||
virtual void InvalidateElements();
|
||||
|
||||
virtual void Prepare(FrameData& frameData) = 0;
|
||||
|
||||
virtual void RegisterMaterialInstance(const MaterialInstance& materialInstance);
|
||||
|
||||
virtual FramePass& RegisterToFrameGraph(FrameGraph& frameGraph, const PassInputOuputs& inputOuputs) = 0;
|
||||
|
||||
inline bool ShouldNotify(FramePipelineNotification notification) const;
|
||||
|
||||
virtual void UnregisterMaterialInstance(const MaterialInstance& materialInstance);
|
||||
|
||||
FramePipelinePass& operator=(const FramePipelinePass&) = delete;
|
||||
FramePipelinePass& operator=(FramePipelinePass&&) = delete;
|
||||
|
||||
struct FrameData
|
||||
{
|
||||
const Bitset<UInt64>* visibleLights;
|
||||
const Frustumf& frustum;
|
||||
RenderFrame& renderFrame;
|
||||
const std::vector<VisibleRenderable>& visibleRenderables;
|
||||
std::size_t visibilityHash;
|
||||
};
|
||||
|
||||
struct PassData
|
||||
{
|
||||
AbstractViewer* viewer;
|
||||
ElementRendererRegistry& elementRegistry;
|
||||
FramePipeline& pipeline;
|
||||
};
|
||||
|
||||
struct PassInputOuputs
|
||||
{
|
||||
// TODO: Add Nz::View / Nz::Span
|
||||
const std::size_t* inputAttachments;
|
||||
const std::size_t* outputAttachments;
|
||||
std::size_t depthStencilInput = InvalidAttachmentIndex;
|
||||
std::size_t depthStencilOutput = InvalidAttachmentIndex;
|
||||
std::size_t inputCount = 0;
|
||||
std::size_t outputCount = 0;
|
||||
};
|
||||
|
||||
struct VisibleRenderable
|
||||
{
|
||||
const InstancedRenderable* instancedRenderable;
|
||||
@@ -35,6 +90,11 @@ namespace Nz
|
||||
const WorldInstance* worldInstance;
|
||||
Recti scissorBox;
|
||||
};
|
||||
|
||||
static constexpr std::size_t InvalidAttachmentIndex = std::numeric_limits<std::size_t>::max();
|
||||
|
||||
private:
|
||||
FramePipelineNotificationFlags m_notificationFlags;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user