// Copyright (C) 2024 Jérôme "SirLynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - Graphics module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_GRAPHICS_DEPTHPIPELINEPASS_HPP #define NAZARA_GRAPHICS_DEPTHPIPELINEPASS_HPP #include #include #include #include #include #include #include #include #include #include #include #include namespace Nz { class AbstractViewer; class ElementRendererRegistry; class FrameGraph; class FramePass; class FramePipeline; class NAZARA_GRAPHICS_API DepthPipelinePass : public FramePipelinePass { public: inline DepthPipelinePass(PassData& passData, std::string passName, const ParameterList& parameters); inline DepthPipelinePass(PassData& passData, std::string passName, std::size_t materialPassIndex); DepthPipelinePass(const DepthPipelinePass&) = delete; DepthPipelinePass(DepthPipelinePass&&) = delete; ~DepthPipelinePass() = default; inline void InvalidateCommandBuffers(); void InvalidateElements() override; void Prepare(FrameData& frameData) override; void RegisterMaterialInstance(const MaterialInstance& materialInstance) override; FramePass& RegisterToFrameGraph(FrameGraph& frameGraph, const PassInputOuputs& inputOuputs) override; void UnregisterMaterialInstance(const MaterialInstance& materialInstance) override; DepthPipelinePass& operator=(const DepthPipelinePass&) = delete; DepthPipelinePass& operator=(DepthPipelinePass&&) = delete; static std::size_t GetMaterialPassIndex(const ParameterList& parameters); private: struct MaterialPassEntry { std::size_t usedCount = 1; NazaraSlot(MaterialInstance, OnMaterialInstancePipelineInvalidated, onMaterialInstancePipelineInvalidated); NazaraSlot(MaterialInstance, OnMaterialInstanceShaderBindingInvalidated, onMaterialInstanceShaderBindingInvalidated); }; std::size_t m_passIndex; std::size_t m_lastVisibilityHash; std::string m_passName; std::vector> m_elementRendererData; std::vector m_renderElements; std::unordered_map m_materialInstances; RenderQueue m_renderQueue; RenderQueueRegistry m_renderQueueRegistry; AbstractViewer* m_viewer; ElementRendererRegistry& m_elementRegistry; FramePipeline& m_pipeline; bool m_rebuildCommandBuffer; bool m_rebuildElements; }; } #include #endif // NAZARA_GRAPHICS_DEPTHPIPELINEPASS_HPP