Renderer/ShaderAst: Add Constant overloads

This commit is contained in:
Lynix 2017-01-06 01:16:03 +01:00
parent 021ac3d971
commit a5a228e0c7
3 changed files with 50 additions and 3 deletions

View File

@ -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;
};
}

View File

@ -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;
}
}
}

View File

@ -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)