// Copyright (C) 2022 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - Shader module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_SHADER_AST_INDEXREMAPPERVISITOR_HPP #define NAZARA_SHADER_AST_INDEXREMAPPERVISITOR_HPP #include #include #include #include namespace Nz::ShaderAst { class NAZARA_SHADER_API IndexRemapperVisitor : public AstCloner { public: struct Options; IndexRemapperVisitor() = default; IndexRemapperVisitor(const IndexRemapperVisitor&) = delete; IndexRemapperVisitor(IndexRemapperVisitor&&) = delete; ~IndexRemapperVisitor() = default; StatementPtr Clone(Statement& statement, const Options& options); IndexRemapperVisitor& operator=(const IndexRemapperVisitor&) = delete; IndexRemapperVisitor& operator=(IndexRemapperVisitor&&) = delete; struct Options { std::function aliasIndexGenerator; std::function constIndexGenerator; std::function funcIndexGenerator; std::function structIndexGenerator; //std::function typeIndexGenerator; std::function varIndexGenerator; bool forceIndexGeneration = false; }; private: StatementPtr Clone(DeclareAliasStatement& node) override; StatementPtr Clone(DeclareConstStatement& node) override; StatementPtr Clone(DeclareExternalStatement& node) override; StatementPtr Clone(DeclareFunctionStatement& node) override; StatementPtr Clone(DeclareStructStatement& node) override; StatementPtr Clone(DeclareVariableStatement& node) override; ExpressionPtr Clone(AliasValueExpression& node) override; ExpressionPtr Clone(ConstantExpression& node) override; ExpressionPtr Clone(FunctionExpression& node) override; ExpressionPtr Clone(StructTypeExpression& node) override; ExpressionPtr Clone(VariableValueExpression& node) override; void HandleType(ExpressionValue& exprType); ExpressionType RemapType(const ExpressionType& exprType); struct Context; Context* m_context; }; inline StatementPtr RemapIndices(Statement& statement, const IndexRemapperVisitor::Options& options); } #include #endif // NAZARA_SHADER_AST_INDEXREMAPPERVISITOR_HPP