Renderer/ShaderAst: Add input and outputs variables

This commit is contained in:
Lynix
2017-01-05 15:17:34 +01:00
parent f7c4c86934
commit 3ed661f387
4 changed files with 58 additions and 32 deletions

View File

@@ -44,20 +44,24 @@ namespace Nz
private:
struct Function;
using VariableContainer = std::set<std::pair<ShaderAst::ExpressionType, String>>;
void Append(ShaderAst::Builtin builtin);
void Append(ShaderAst::ExpressionType type);
void Append(const String& txt);
void AppendCommentSection(const String& section);
void AppendFunction(Function& func);
void AppendLine(const Nz::String& txt = Nz::String());
void AppendLine(const String& txt = String());
void DeclareVariables(const VariableContainer& variables, const String& keyword = String(), const String& section = String());
void EnterScope();
void LeaveScope();
struct Function
{
std::set<std::pair<ShaderAst::ExpressionType, String>> variables;
VariableContainer variables;
std::vector<ShaderAst::NamedVariablePtr> parameters;
ShaderAst::ExpressionType retType;
ShaderAst::StatementPtr node;
@@ -66,7 +70,9 @@ namespace Nz
struct State
{
std::set<std::pair<ShaderAst::ExpressionType, String>> m_uniforms;
VariableContainer inputs;
VariableContainer outputs;
VariableContainer uniforms;
StringStream stream;
unsigned int indentLevel = 0;
};

View File

@@ -55,9 +55,11 @@ namespace Nz
enum class VariableType
{
Builtin,
Input,
Output,
Parameter,
Variable,
Uniform
Uniform,
Variable
};
//////////////////////////////////////////////////////////////////////////

View File

@@ -50,6 +50,8 @@ namespace Nz { namespace ShaderBuilder
constexpr GenBuilder<ShaderAst::Branch> Branch;
constexpr GenBuilder<ShaderAst::Constant> Constant;
constexpr GenBuilder<ShaderAst::ExpressionStatement> ExprStatement;
constexpr VarBuilder<ShaderAst::VariableType::Input> Input;
constexpr VarBuilder<ShaderAst::VariableType::Output> Output;
constexpr VarBuilder<ShaderAst::VariableType::Parameter> Parameter;
constexpr VarBuilder<ShaderAst::VariableType::Uniform> Uniform;
constexpr VarBuilder<ShaderAst::VariableType::Variable> Variable;