/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #pragma once #include #include #include #include #include #include namespace AZ::Render { //! Container for specialized editor state effect parent pass classes. using EditorStateList = AZStd::vector>; //! Mapping for mask draw tags to entities rendered to that mask. using EntityMaskMap = AZStd::unordered_map; //! System for constructing the passes for the editor state effects. class EditorStatePassSystem { public: //! Constructs the pass system with the specified editor state effect parent pass instances. EditorStatePassSystem(EditorStateList&& editorStates); //! Adds the editor state effect parent passes to the specified render pipeline. void AddPassesToRenderPipeline(RPI::RenderPipeline* renderPipeline); //! Returns the map of masks to the entities to be rendered to those masks. EntityMaskMap GetEntitiesForEditorStates() const; //! Configures the editor state pass instances for the specified render pipeline. void ConfigureStatePassesForPipeline(RPI::RenderPipeline* renderPipeline); //! Removes the editor state pass instances for the specified render pipeline. void RemoveStatePassesForPipeline(RPI::RenderPipeline* renderPipeline); //! Returns the set of all masks used by this pass system. const AZStd::unordered_set& GetMasks() const { return m_masks; } //! Performs any updates for the editor state effect parent pass instances for the given simulation tick. void Update(); //! Returns the pass template name of the main parent pass const char* GetParentPassTemplateName() const; private: //! Parent passes for each editor state (ordering in vector is ordering of rendering). EditorStateList m_editorStates; //! Set of all masks used by this pass system. AZStd::unordered_set m_masks; }; } // namespace AZ::Render