diff --git a/include/Nazara/Shader/Ast/AstExportVisitor.hpp b/include/Nazara/Shader/Ast/AstExportVisitor.hpp new file mode 100644 index 000000000..49db1d5e8 --- /dev/null +++ b/include/Nazara/Shader/Ast/AstExportVisitor.hpp @@ -0,0 +1,46 @@ +// 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_ASTEXPORTVISITOR_HPP +#define NAZARA_SHADER_AST_ASTEXPORTVISITOR_HPP + +#include +#include +#include +#include + +namespace Nz::ShaderAst +{ + class NAZARA_SHADER_API AstExportVisitor : public AstRecursiveVisitor + { + public: + struct Callbacks; + + AstExportVisitor() = default; + AstExportVisitor(const AstExportVisitor&) = delete; + AstExportVisitor(AstExportVisitor&&) = delete; + ~AstExportVisitor() = default; + + void Visit(Statement& statement, const Callbacks& callbacks); + + AstExportVisitor& operator=(const AstExportVisitor&) = delete; + AstExportVisitor& operator=(AstExportVisitor&&) = delete; + + struct Callbacks + { + std::function onExportedStruct; + }; + + private: + void Visit(DeclareStructStatement& node) override; + + const Callbacks* m_callbacks; + }; +} + +#include + +#endif // NAZARA_SHADER_AST_ASTEXPORTVISITOR_HPP diff --git a/include/Nazara/Shader/Ast/AstExportVisitor.inl b/include/Nazara/Shader/Ast/AstExportVisitor.inl new file mode 100644 index 000000000..84c3f06b6 --- /dev/null +++ b/include/Nazara/Shader/Ast/AstExportVisitor.inl @@ -0,0 +1,12 @@ +// 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 + +#include +#include + +namespace Nz::ShaderAst +{ +} + +#include diff --git a/src/Nazara/Shader/Ast/AstExportVisitor.cpp b/src/Nazara/Shader/Ast/AstExportVisitor.cpp new file mode 100644 index 000000000..3d79f5f35 --- /dev/null +++ b/src/Nazara/Shader/Ast/AstExportVisitor.cpp @@ -0,0 +1,25 @@ +// 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 + +#include +#include +#include + +namespace Nz::ShaderAst +{ + void AstExportVisitor::Visit(Statement& statement, const Callbacks& callbacks) + { + m_callbacks = &callbacks; + statement.Visit(*this); + } + + void AstExportVisitor::Visit(DeclareStructStatement& node) + { + if (!node.isExported.HasValue() || !node.isExported.GetResultingValue()) + return; + + if (m_callbacks->onExportedStruct) + m_callbacks->onExportedStruct(node); + } +}