#pragma once #ifndef NAZARA_SHADERNODES_CAST_HPP #define NAZARA_SHADERNODES_CAST_HPP #include #include #include #include #include #include template class CastVec : public ShaderNode { public: CastVec(ShaderGraph& graph); ~CastVec() = default; void BuildNodeEdition(QFormLayout* layout) override; Nz::ShaderAst::ExpressionPtr GetExpression(Nz::ShaderAst::ExpressionPtr* expressions, std::size_t count) const override; QString caption() const override; QString name() const override; QtNodes::NodeDataType dataType(QtNodes::PortType portType, QtNodes::PortIndex portIndex) const override; unsigned int nPorts(QtNodes::PortType portType) const override; std::shared_ptr outData(QtNodes::PortIndex port) override; void setInData(std::shared_ptr value, int index) override; private: static constexpr std::size_t FromComponents = From::ComponentCount; static constexpr std::size_t ToComponents = To::ComponentCount; static constexpr std::size_t ComponentDiff = (ToComponents >= FromComponents) ? ToComponents - FromComponents : 0; bool ComputePreview(QPixmap& pixmap) override; void UpdateOutput(); VecType m_overflowComponents; std::shared_ptr m_input; std::shared_ptr m_output; }; using CastVec2ToVec3 = CastVec; using CastVec2ToVec4 = CastVec; using CastVec3ToVec2 = CastVec; using CastVec3ToVec4 = CastVec; using CastVec4ToVec2 = CastVec; using CastVec4ToVec3 = CastVec; #include #endif