Renderer/ShaderAst: Add Constant overloads
This commit is contained in:
parent
021ac3d971
commit
a5a228e0c7
|
|
@ -229,7 +229,11 @@ namespace Nz
|
|||
class NAZARA_RENDERER_API Constant : public Expression
|
||||
{
|
||||
public:
|
||||
inline explicit Constant(bool value);
|
||||
inline explicit Constant(float value);
|
||||
inline explicit Constant(const Vector2f& value);
|
||||
inline explicit Constant(const Vector3f& value);
|
||||
inline explicit Constant(const Vector4f& value);
|
||||
|
||||
ExpressionType GetExpressionType() const override;
|
||||
void Register(ShaderWriter& visitor) override;
|
||||
|
|
@ -239,10 +243,11 @@ namespace Nz
|
|||
|
||||
union
|
||||
{
|
||||
bool bool1;
|
||||
float vec1;
|
||||
Nz::Vector2f vec2;
|
||||
Nz::Vector3f vec3;
|
||||
Nz::Vector4f vec4;
|
||||
Vector2f vec2;
|
||||
Vector3f vec3;
|
||||
Vector4f vec4;
|
||||
} values;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,11 +157,35 @@ namespace Nz
|
|||
throw std::runtime_error("Component count doesn't match required component count");
|
||||
}
|
||||
|
||||
inline Constant::Constant(bool value) :
|
||||
exprType(ExpressionType::Boolean)
|
||||
{
|
||||
values.bool1 = value;
|
||||
}
|
||||
|
||||
inline Constant::Constant(float value) :
|
||||
exprType(ExpressionType::Float1)
|
||||
{
|
||||
values.vec1 = value;
|
||||
}
|
||||
|
||||
inline Constant::Constant(const Vector2f& value) :
|
||||
exprType(ExpressionType::Float2)
|
||||
{
|
||||
values.vec2 = value;
|
||||
}
|
||||
|
||||
inline Constant::Constant(const Vector3f& value) :
|
||||
exprType(ExpressionType::Float3)
|
||||
{
|
||||
values.vec3 = value;
|
||||
}
|
||||
|
||||
inline Constant::Constant(const Vector4f& value) :
|
||||
exprType(ExpressionType::Float4)
|
||||
{
|
||||
values.vec4 = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -224,10 +224,28 @@ namespace Nz
|
|||
{
|
||||
switch (node.exprType)
|
||||
{
|
||||
case ShaderAst::ExpressionType::Boolean:
|
||||
Append((node.values.bool1) ? "true" : "false");
|
||||
break;
|
||||
|
||||
case ShaderAst::ExpressionType::Float1:
|
||||
Append(String::Format("%F", node.values.vec1));
|
||||
break;
|
||||
|
||||
case ShaderAst::ExpressionType::Float2:
|
||||
Append(String::Format("vec2(%F, %F)", node.values.vec2.x, node.values.vec2.y));
|
||||
break;
|
||||
|
||||
case ShaderAst::ExpressionType::Float3:
|
||||
Append(String::Format("vec3(%F, %F, %F)", node.values.vec3.x, node.values.vec3.y, node.values.vec3.z));
|
||||
break;
|
||||
|
||||
case ShaderAst::ExpressionType::Float4:
|
||||
Append(String::Format("vec4(%F, %F, %F, %F)", node.values.vec4.x, node.values.vec4.y, node.values.vec4.z, node.values.vec4.w));
|
||||
break;
|
||||
}
|
||||
|
||||
throw std::runtime_error("Unhandled expression type");
|
||||
}
|
||||
|
||||
void GlslWriter::Write(const ShaderAst::ExpressionStatement& node)
|
||||
|
|
|
|||
Loading…
Reference in New Issue