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
|
class NAZARA_RENDERER_API Constant : public Expression
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
inline explicit Constant(bool value);
|
||||||
inline explicit Constant(float 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;
|
ExpressionType GetExpressionType() const override;
|
||||||
void Register(ShaderWriter& visitor) override;
|
void Register(ShaderWriter& visitor) override;
|
||||||
|
|
@ -239,10 +243,11 @@ namespace Nz
|
||||||
|
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
|
bool bool1;
|
||||||
float vec1;
|
float vec1;
|
||||||
Nz::Vector2f vec2;
|
Vector2f vec2;
|
||||||
Nz::Vector3f vec3;
|
Vector3f vec3;
|
||||||
Nz::Vector4f vec4;
|
Vector4f vec4;
|
||||||
} values;
|
} values;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -157,11 +157,35 @@ namespace Nz
|
||||||
throw std::runtime_error("Component count doesn't match required component count");
|
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) :
|
inline Constant::Constant(float value) :
|
||||||
exprType(ExpressionType::Float1)
|
exprType(ExpressionType::Float1)
|
||||||
{
|
{
|
||||||
values.vec1 = value;
|
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)
|
switch (node.exprType)
|
||||||
{
|
{
|
||||||
|
case ShaderAst::ExpressionType::Boolean:
|
||||||
|
Append((node.values.bool1) ? "true" : "false");
|
||||||
|
break;
|
||||||
|
|
||||||
case ShaderAst::ExpressionType::Float1:
|
case ShaderAst::ExpressionType::Float1:
|
||||||
Append(String::Format("%F", node.values.vec1));
|
Append(String::Format("%F", node.values.vec1));
|
||||||
break;
|
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)
|
void GlslWriter::Write(const ShaderAst::ExpressionStatement& node)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue