// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Renderer module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_SHADER_AST_HPP #define NAZARA_SHADER_AST_HPP #include #include #include #include #include namespace Nz { class NAZARA_RENDERER_API ShaderAst { public: struct Function; struct FunctionParameter; struct InputOutput; struct VariableBase; struct Uniform; ShaderAst() = default; ~ShaderAst() = default; void AddFunction(std::string name, ShaderNodes::StatementPtr statement, std::vector parameters = {}, ShaderNodes::ExpressionType returnType = ShaderNodes::ExpressionType::Void); void AddInput(std::string name, ShaderNodes::ExpressionType type, std::optional locationIndex); void AddOutput(std::string name, ShaderNodes::ExpressionType type, std::optional locationIndex); void AddUniform(std::string name, ShaderNodes::ExpressionType type, std::optional bindingIndex); inline const Function& GetFunction(std::size_t i) const; inline std::size_t GetFunctionCount() const; inline const std::vector& GetFunctions() const; inline const InputOutput& GetInput(std::size_t i) const; inline std::size_t GetInputCount() const; inline const std::vector& GetInputs() const; inline const InputOutput& GetOutput(std::size_t i) const; inline std::size_t GetOutputCount() const; inline const std::vector& GetOutputs() const; inline const Uniform& GetUniform(std::size_t i) const; inline std::size_t GetUniformCount() const; inline const std::vector& GetUniforms() const; struct VariableBase { std::string name; ShaderNodes::ExpressionType type; }; struct FunctionParameter : VariableBase { }; struct Function { std::string name; std::vector parameters; ShaderNodes::ExpressionType returnType; ShaderNodes::StatementPtr statement; }; struct InputOutput : VariableBase { std::optional locationIndex; }; struct Uniform : VariableBase { std::optional bindingIndex; }; private: std::vector m_functions; std::vector m_inputs; std::vector m_outputs; std::vector m_uniforms; }; } #include #endif // NAZARA_SHADER_AST_HPP