Renderer/ShaderAst: Add Sample2D
This commit is contained in:
parent
c26f3b9b71
commit
e23eb74802
|
|
@ -40,6 +40,7 @@ namespace Nz
|
|||
void Write(const ShaderAst::ExpressionStatement& node) override;
|
||||
void Write(const ShaderAst::NamedVariable& node) override;
|
||||
void Write(const ShaderAst::NodePtr& node) override;
|
||||
void Write(const ShaderAst::Sample2D& node) override;
|
||||
void Write(const ShaderAst::StatementBlock& node) override;
|
||||
void Write(const ShaderAst::SwizzleOp& node) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -42,12 +42,13 @@ namespace Nz
|
|||
|
||||
enum class ExpressionType
|
||||
{
|
||||
Boolean, // bool
|
||||
Float1, // float
|
||||
Float2, // vec2
|
||||
Float3, // vec3
|
||||
Float4, // vec4
|
||||
Mat4x4, // mat4
|
||||
Boolean, // bool
|
||||
Float1, // float
|
||||
Float2, // vec2
|
||||
Float3, // vec3
|
||||
Float4, // vec4
|
||||
Mat4x4, // mat4
|
||||
Sampler2D, // sampler2D
|
||||
|
||||
Void // void
|
||||
};
|
||||
|
|
@ -284,6 +285,21 @@ namespace Nz
|
|||
std::size_t componentCount;
|
||||
ExpressionPtr expression;
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class NAZARA_RENDERER_API Sample2D : public Expression
|
||||
{
|
||||
public:
|
||||
inline Sample2D(ExpressionPtr samplerPtr, ExpressionPtr coordinatesPtr);
|
||||
|
||||
ExpressionType GetExpressionType() const override;
|
||||
void Register(ShaderWriter& visitor) override;
|
||||
void Visit(ShaderWriter& visitor) override;
|
||||
|
||||
ExpressionPtr sampler;
|
||||
ExpressionPtr coordinates;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
// This file is part of the "Nazara Engine - Renderer module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/Renderer/ShaderAst.hpp>
|
||||
#include <Nazara/Renderer/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
|
|
@ -225,6 +226,17 @@ namespace Nz
|
|||
|
||||
std::copy(swizzleComponents.begin(), swizzleComponents.end(), components.begin());
|
||||
}
|
||||
|
||||
inline Sample2D::Sample2D(ExpressionPtr samplerPtr, ExpressionPtr coordinatesPtr) :
|
||||
sampler(std::move(samplerPtr)),
|
||||
coordinates(std::move(coordinatesPtr))
|
||||
{
|
||||
if (sampler->GetExpressionType() != ExpressionType::Sampler2D)
|
||||
throw std::runtime_error("Sampler must be a Sampler2D");
|
||||
|
||||
if (coordinates->GetExpressionType() != ExpressionType::Float2)
|
||||
throw std::runtime_error("Coordinates must be a Float2");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ namespace Nz { namespace ShaderBuilder
|
|||
constexpr BinOpBuilder<ShaderAst::BinaryType::Multiply> Multiply;
|
||||
constexpr VarBuilder<ShaderAst::VariableType::Output> Output;
|
||||
constexpr VarBuilder<ShaderAst::VariableType::Parameter> Parameter;
|
||||
constexpr GenBuilder<ShaderAst::Sample2D> Sample2D;
|
||||
constexpr GenBuilder<ShaderAst::SwizzleOp> Swizzle;
|
||||
constexpr BinOpBuilder<ShaderAst::BinaryType::Substract> Substract;
|
||||
constexpr VarBuilder<ShaderAst::VariableType::Uniform> Uniform;
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ namespace Nz
|
|||
virtual void Write(const ShaderAst::ExpressionStatement& node) = 0;
|
||||
virtual void Write(const ShaderAst::NamedVariable& node) = 0;
|
||||
virtual void Write(const ShaderAst::NodePtr& node) = 0;
|
||||
virtual void Write(const ShaderAst::Sample2D& node) = 0;
|
||||
virtual void Write(const ShaderAst::StatementBlock& node) = 0;
|
||||
virtual void Write(const ShaderAst::SwizzleOp& node) = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -128,6 +128,15 @@ namespace Nz
|
|||
node->Visit(*this);
|
||||
}
|
||||
|
||||
void GlslWriter::Write(const ShaderAst::Sample2D& node)
|
||||
{
|
||||
Append("texture(");
|
||||
Write(node.sampler);
|
||||
Append(", ");
|
||||
Write(node.coordinates);
|
||||
Append(")");
|
||||
}
|
||||
|
||||
void GlslWriter::Write(const ShaderAst::AssignOp& node)
|
||||
{
|
||||
Write(node.variable);
|
||||
|
|
@ -338,6 +347,9 @@ namespace Nz
|
|||
case ShaderAst::ExpressionType::Mat4x4:
|
||||
Append("mat4");
|
||||
break;
|
||||
case ShaderAst::ExpressionType::Sampler2D:
|
||||
Append("sampler2D");
|
||||
break;
|
||||
case ShaderAst::ExpressionType::Void:
|
||||
Append("void");
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
#include <Nazara/Renderer/ShaderWriter.hpp>
|
||||
#include <Nazara/Renderer/Debug.hpp>
|
||||
|
||||
namespace Nz { namespace ShaderAst
|
||||
namespace Nz::ShaderAst
|
||||
{
|
||||
void ExpressionStatement::Register(ShaderWriter& visitor)
|
||||
{
|
||||
|
|
@ -192,5 +192,21 @@ namespace Nz { namespace ShaderAst
|
|||
{
|
||||
visitor.Write(*this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ExpressionType Sample2D::GetExpressionType() const
|
||||
{
|
||||
return ExpressionType::Float4;
|
||||
}
|
||||
|
||||
void Sample2D::Register(ShaderWriter& visitor)
|
||||
{
|
||||
sampler->Register(visitor);
|
||||
coordinates->Register(visitor);
|
||||
}
|
||||
|
||||
void Sample2D::Visit(ShaderWriter& visitor)
|
||||
{
|
||||
visitor.Write(*this);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue