diff --git a/src/ShaderNode/DataModels/Cast.inl b/src/ShaderNode/DataModels/Cast.inl index cd96d6ccc..0bad72055 100644 --- a/src/ShaderNode/DataModels/Cast.inl +++ b/src/ShaderNode/DataModels/Cast.inl @@ -141,7 +141,7 @@ template void CastVec::setInData(std::shared_ptr value, int index) { assert(index == 0); - if (value) + if (value && value->type().id == VecData::Type().id) { assert(dynamic_cast(value.get()) != nullptr); m_input = std::static_pointer_cast(value); diff --git a/src/ShaderNode/DataModels/Mat4BinOp.inl b/src/ShaderNode/DataModels/Mat4BinOp.inl index 05cdb0479..eb57e74c2 100644 --- a/src/ShaderNode/DataModels/Mat4BinOp.inl +++ b/src/ShaderNode/DataModels/Mat4BinOp.inl @@ -50,10 +50,9 @@ void Mat4BinOp::setInData(std::shared_ptr value, int i assert(index == 0 || index == 1); std::shared_ptr castedValue; - if (value) + if (value && value->type().id == Matrix4Data::Type().id) { assert(dynamic_cast(value.get()) != nullptr); - castedValue = std::static_pointer_cast(value); } diff --git a/src/ShaderNode/DataModels/Mat4VecMul.cpp b/src/ShaderNode/DataModels/Mat4VecMul.cpp index 983545973..af43e4f1d 100644 --- a/src/ShaderNode/DataModels/Mat4VecMul.cpp +++ b/src/ShaderNode/DataModels/Mat4VecMul.cpp @@ -77,7 +77,7 @@ void Mat4VecMul::setInData(std::shared_ptr value, int index) { case 0: { - if (value) + if (value && value->type().id == Matrix4Data::Type().id) { assert(dynamic_cast(value.get()) != nullptr); m_lhs = std::static_pointer_cast(value); @@ -90,7 +90,7 @@ void Mat4VecMul::setInData(std::shared_ptr value, int index) case 1: { - if (value) + if (value && value->type().id == VecData::Type().id) { assert(dynamic_cast(value.get()) != nullptr); m_rhs = std::static_pointer_cast(value); diff --git a/src/ShaderNode/DataModels/OutputValue.cpp b/src/ShaderNode/DataModels/OutputValue.cpp index 63a481588..9a2cb7030 100644 --- a/src/ShaderNode/DataModels/OutputValue.cpp +++ b/src/ShaderNode/DataModels/OutputValue.cpp @@ -126,6 +126,9 @@ QtNodes::NodeValidationState OutputValue::validationState() const case PrimitiveType::Float3: case PrimitiveType::Float4: { + if (m_input->type().id != VecData::Type().id) + return QtNodes::NodeValidationState::Error; + assert(dynamic_cast(m_input.get()) != nullptr); const VecData& vec = static_cast(*m_input); if (GetComponentCount(outputEntry.type) != vec.componentCount) @@ -156,6 +159,9 @@ QString OutputValue::validationMessage() const case PrimitiveType::Float3: case PrimitiveType::Float4: { + if (m_input->type().id != VecData::Type().id) + return "Expected vector"; + assert(dynamic_cast(m_input.get()) != nullptr); const VecData& vec = static_cast(*m_input); @@ -179,6 +185,9 @@ bool OutputValue::ComputePreview(QPixmap& pixmap) { case PrimitiveType::Bool: { + if (m_input->type().id != BoolData::Type().id) + return false; + assert(dynamic_cast(m_input.get()) != nullptr); const BoolData& data = static_cast(*m_input); @@ -188,6 +197,9 @@ bool OutputValue::ComputePreview(QPixmap& pixmap) case PrimitiveType::Float1: { + if (m_input->type().id != FloatData::Type().id) + return false; + assert(dynamic_cast(m_input.get()) != nullptr); const FloatData& data = static_cast(*m_input); @@ -208,6 +220,9 @@ bool OutputValue::ComputePreview(QPixmap& pixmap) case PrimitiveType::Float3: case PrimitiveType::Float4: { + if (m_input->type().id != VecData::Type().id) + return false; + assert(dynamic_cast(m_input.get()) != nullptr); const VecData& data = static_cast(*m_input); diff --git a/src/ShaderNode/DataModels/PositionOutputValue.cpp b/src/ShaderNode/DataModels/PositionOutputValue.cpp index c3d252f54..6f2ab9d3a 100644 --- a/src/ShaderNode/DataModels/PositionOutputValue.cpp +++ b/src/ShaderNode/DataModels/PositionOutputValue.cpp @@ -52,7 +52,7 @@ std::shared_ptr PositionOutputValue::outData(QtNodes::PortInd void PositionOutputValue::setInData(std::shared_ptr value, int index) { assert(index == 0); - if (value) + if (value && value->type().id == VecData::Type().id) { assert(dynamic_cast(value.get()) != nullptr); m_input = std::static_pointer_cast(value); diff --git a/src/ShaderNode/DataModels/SampleTexture.cpp b/src/ShaderNode/DataModels/SampleTexture.cpp index c784b83af..f0eccc770 100644 --- a/src/ShaderNode/DataModels/SampleTexture.cpp +++ b/src/ShaderNode/DataModels/SampleTexture.cpp @@ -154,10 +154,9 @@ void SampleTexture::setInData(std::shared_ptr value, int inde { case 0: { - if (value) + if (value && value->type().id == Texture2Data::Type().id) { assert(dynamic_cast(value.get()) != nullptr); - m_texture = std::static_pointer_cast(value); } else @@ -168,10 +167,9 @@ void SampleTexture::setInData(std::shared_ptr value, int inde case 1: { - if (value) + if (value && value->type().id == VecData::Type().id) { assert(dynamic_cast(value.get()) != nullptr); - m_uv = std::static_pointer_cast(value); } else diff --git a/src/ShaderNode/DataModels/VecBinOp.inl b/src/ShaderNode/DataModels/VecBinOp.inl index d16347799..a8b9d6d2d 100644 --- a/src/ShaderNode/DataModels/VecBinOp.inl +++ b/src/ShaderNode/DataModels/VecBinOp.inl @@ -50,12 +50,8 @@ void VecBinOp::setInData(std::shared_ptr value, int in assert(index == 0 || index == 1); std::shared_ptr castedValue; - if (value) - { - assert(dynamic_cast(value.get()) != nullptr); - + if (value && value->type().id == VecData::Type().id) castedValue = std::static_pointer_cast(value); - } if (index == 0) m_lhs = std::move(castedValue); diff --git a/src/ShaderNode/DataModels/VecDot.cpp b/src/ShaderNode/DataModels/VecDot.cpp index b083623d0..516e1b19b 100644 --- a/src/ShaderNode/DataModels/VecDot.cpp +++ b/src/ShaderNode/DataModels/VecDot.cpp @@ -71,10 +71,9 @@ void VecDot::setInData(std::shared_ptr value, int index) assert(index == 0 || index == 1); std::shared_ptr castedValue; - if (value) + if (value && value->type().id == VecData::Type().id) { assert(dynamic_cast(value.get()) != nullptr); - castedValue = std::static_pointer_cast(value); } diff --git a/src/ShaderNode/DataModels/VecFloatMul.cpp b/src/ShaderNode/DataModels/VecFloatMul.cpp index 9dd3b02c3..06ee951c6 100644 --- a/src/ShaderNode/DataModels/VecFloatMul.cpp +++ b/src/ShaderNode/DataModels/VecFloatMul.cpp @@ -77,10 +77,9 @@ void VecFloatMul::setInData(std::shared_ptr value, int index) { case 0: { - if (value) + if (value && value->type().id == FloatData::Type().id) { assert(dynamic_cast(value.get()) != nullptr); - m_lhs = std::static_pointer_cast(value); } else @@ -91,10 +90,9 @@ void VecFloatMul::setInData(std::shared_ptr value, int index) case 1: { - if (value) + if (value && value->type().id == VecData::Type().id) { assert(dynamic_cast(value.get()) != nullptr); - m_rhs = std::static_pointer_cast(value); } else