Renderer/ShaderAst: Add Swizzle
This commit is contained in:
@@ -54,6 +54,14 @@ namespace Nz
|
||||
Void // void
|
||||
};
|
||||
|
||||
enum class SwizzleComponent
|
||||
{
|
||||
First,
|
||||
Second,
|
||||
Third,
|
||||
Fourth
|
||||
};
|
||||
|
||||
enum class VariableType
|
||||
{
|
||||
Builtin,
|
||||
@@ -139,6 +147,19 @@ namespace Nz
|
||||
VariableType kind;
|
||||
};
|
||||
|
||||
|
||||
class NAZARA_RENDERER_API BuiltinVariable : public Variable
|
||||
{
|
||||
public:
|
||||
inline BuiltinVariable(BuiltinEntry variable, ExpressionType varType);
|
||||
|
||||
void Register(ShaderWriter& visitor) override;
|
||||
void Visit(ShaderWriter& visitor) override;
|
||||
|
||||
BuiltinEntry var;
|
||||
};
|
||||
|
||||
|
||||
class NamedVariable;
|
||||
|
||||
using NamedVariablePtr = std::shared_ptr<NamedVariable>;
|
||||
@@ -154,17 +175,6 @@ namespace Nz
|
||||
Nz::String name;
|
||||
};
|
||||
|
||||
class NAZARA_RENDERER_API BuiltinVariable : public Variable
|
||||
{
|
||||
public:
|
||||
inline BuiltinVariable(BuiltinEntry variable, ExpressionType varType);
|
||||
|
||||
void Register(ShaderWriter& visitor) override;
|
||||
void Visit(ShaderWriter& visitor) override;
|
||||
|
||||
BuiltinEntry var;
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class NAZARA_RENDERER_API AssignOp : public Expression
|
||||
@@ -250,6 +260,20 @@ namespace Nz
|
||||
Vector4f vec4;
|
||||
} values;
|
||||
};
|
||||
|
||||
class NAZARA_RENDERER_API SwizzleOp : public Expression
|
||||
{
|
||||
public:
|
||||
inline SwizzleOp(ExpressionPtr expressionPtr, std::initializer_list<SwizzleComponent> swizzleComponents);
|
||||
|
||||
ExpressionType GetExpressionType() const override;
|
||||
void Register(ShaderWriter& visitor) override;
|
||||
void Visit(ShaderWriter& visitor) override;
|
||||
|
||||
std::array<SwizzleComponent, 4> components;
|
||||
std::size_t componentCount;
|
||||
ExpressionPtr expression;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user