ShaderNode: Add PositionOutputValue
This commit is contained in:
parent
5a350ee76b
commit
471194ec16
|
|
@ -0,0 +1,84 @@
|
|||
#include <ShaderNode/DataModels/PositionOutputValue.hpp>
|
||||
#include <Nazara/Renderer/ShaderBuilder.hpp>
|
||||
#include <ShaderNode/ShaderGraph.hpp>
|
||||
#include <ShaderNode/DataTypes/BoolData.hpp>
|
||||
#include <ShaderNode/DataTypes/FloatData.hpp>
|
||||
#include <ShaderNode/DataTypes/Matrix4Data.hpp>
|
||||
#include <ShaderNode/DataTypes/VecData.hpp>
|
||||
#include <QtWidgets/QComboBox>
|
||||
#include <QtWidgets/QFormLayout>
|
||||
|
||||
PositionOutputValue::PositionOutputValue(ShaderGraph& graph) :
|
||||
ShaderNode(graph)
|
||||
{
|
||||
DisableCustomVariableName();
|
||||
}
|
||||
|
||||
Nz::ShaderNodes::ExpressionPtr PositionOutputValue::GetExpression(Nz::ShaderNodes::ExpressionPtr* expressions, std::size_t count) const
|
||||
{
|
||||
using namespace Nz::ShaderBuilder;
|
||||
using namespace Nz::ShaderNodes;
|
||||
|
||||
assert(count == 1);
|
||||
|
||||
auto output = Nz::ShaderBuilder::Identifier(Nz::ShaderBuilder::Builtin(BuiltinEntry::VertexPosition));
|
||||
return Nz::ShaderBuilder::Assign(std::move(output), *expressions);
|
||||
}
|
||||
|
||||
QtNodes::NodeDataType PositionOutputValue::dataType(QtNodes::PortType portType, QtNodes::PortIndex portIndex) const
|
||||
{
|
||||
assert(portType == QtNodes::PortType::In);
|
||||
assert(portIndex == 0);
|
||||
|
||||
return VecData::Type();
|
||||
}
|
||||
|
||||
unsigned int PositionOutputValue::nPorts(QtNodes::PortType portType) const
|
||||
{
|
||||
switch (portType)
|
||||
{
|
||||
case QtNodes::PortType::In: return 1;
|
||||
case QtNodes::PortType::Out: return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::shared_ptr<QtNodes::NodeData> PositionOutputValue::outData(QtNodes::PortIndex /*port*/)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
void PositionOutputValue::setInData(std::shared_ptr<QtNodes::NodeData> value, int index)
|
||||
{
|
||||
assert(index == 0);
|
||||
if (value)
|
||||
{
|
||||
assert(dynamic_cast<VecData*>(value.get()) != nullptr);
|
||||
m_input = std::static_pointer_cast<VecData>(value);
|
||||
}
|
||||
else
|
||||
m_input.reset();
|
||||
}
|
||||
|
||||
QtNodes::NodeValidationState PositionOutputValue::validationState() const
|
||||
{
|
||||
if (!m_input)
|
||||
return QtNodes::NodeValidationState::Error;
|
||||
|
||||
if (m_input->componentCount != 4)
|
||||
return QtNodes::NodeValidationState::Error;
|
||||
|
||||
return QtNodes::NodeValidationState::Valid;
|
||||
}
|
||||
|
||||
QString PositionOutputValue::validationMessage() const
|
||||
{
|
||||
if (!m_input)
|
||||
return "Missing input";
|
||||
|
||||
if (m_input->componentCount != 4)
|
||||
return QString("Expected vector with 4 components, got ") + QString::number(m_input->componentCount);
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
#pragma once
|
||||
|
||||
#ifndef NAZARA_SHADERNODES_POSITIONOUTPUTVALUE_HPP
|
||||
#define NAZARA_SHADERNODES_POSITIONOUTPUTVALUE_HPP
|
||||
|
||||
#include <ShaderNode/ShaderGraph.hpp>
|
||||
#include <ShaderNode/DataModels/ShaderNode.hpp>
|
||||
#include <ShaderNode/DataTypes/VecData.hpp>
|
||||
|
||||
class QFormLayout;
|
||||
|
||||
class PositionOutputValue : public ShaderNode
|
||||
{
|
||||
public:
|
||||
PositionOutputValue(ShaderGraph& graph);
|
||||
|
||||
Nz::ShaderNodes::ExpressionPtr GetExpression(Nz::ShaderNodes::ExpressionPtr* expressions, std::size_t count) const override;
|
||||
|
||||
QString caption() const override { return "PositionOutputValue"; }
|
||||
QString name() const override { return "PositionOutputValue"; }
|
||||
|
||||
QtNodes::NodeDataType dataType(QtNodes::PortType portType, QtNodes::PortIndex portIndex) const override;
|
||||
|
||||
unsigned int nPorts(QtNodes::PortType portType) const override;
|
||||
|
||||
std::shared_ptr<QtNodes::NodeData> outData(QtNodes::PortIndex port) override;
|
||||
|
||||
void setInData(std::shared_ptr<QtNodes::NodeData> value, int index) override;
|
||||
|
||||
QtNodes::NodeValidationState validationState() const override;
|
||||
QString validationMessage() const override;
|
||||
|
||||
private:
|
||||
std::shared_ptr<VecData> m_input;
|
||||
};
|
||||
|
||||
#include <ShaderNode/DataModels/OutputValue.inl>
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1 @@
|
|||
#include <ShaderNode/DataModels/OutputValue.hpp>
|
||||
|
|
@ -10,6 +10,7 @@
|
|||
#include <ShaderNode/DataModels/TextureValue.hpp>
|
||||
#include <ShaderNode/DataModels/Mat4BinOp.hpp>
|
||||
#include <ShaderNode/DataModels/Mat4VecMul.hpp>
|
||||
#include <ShaderNode/DataModels/PositionOutputValue.hpp>
|
||||
#include <ShaderNode/DataModels/VecBinOp.hpp>
|
||||
#include <ShaderNode/DataModels/VecDot.hpp>
|
||||
#include <ShaderNode/DataModels/VecFloatMul.hpp>
|
||||
|
|
@ -657,6 +658,7 @@ std::shared_ptr<QtNodes::DataModelRegistry> ShaderGraph::BuildRegistry()
|
|||
RegisterShaderNode<CastToVec4>(*this, registry, "Casts");
|
||||
RegisterShaderNode<FloatValue>(*this, registry, "Constants");
|
||||
RegisterShaderNode<InputValue>(*this, registry, "Inputs");
|
||||
RegisterShaderNode<PositionOutputValue>(*this, registry, "Outputs");
|
||||
RegisterShaderNode<OutputValue>(*this, registry, "Outputs");
|
||||
RegisterShaderNode<SampleTexture>(*this, registry, "Texture");
|
||||
RegisterShaderNode<TextureValue>(*this, registry, "Texture");
|
||||
|
|
|
|||
Loading…
Reference in New Issue