diff --git a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.Textures.cpp b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.Textures.cpp
index ad601589e..ed79b5edc 100644
--- a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.Textures.cpp
+++ b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.Textures.cpp
@@ -446,16 +446,16 @@ void MaterialGenerator::ProcessGroupTextures(Box* box, Node* node, Value& value)
switch (box->ID)
{
case 2:
- value = Value(VariantType::Float, value.Value + _subs[0]);
+ value = value.GetX();
break;
case 3:
- value = Value(VariantType::Float, value.Value + _subs[1]);
+ value = value.GetY();
break;
case 4:
- value = Value(VariantType::Float, value.Value + _subs[2]);
+ value = value.GetZ();
break;
case 5:
- value = Value(VariantType::Float, value.Value + _subs[3]);
+ value = value.GetW();
break;
}
break;
diff --git a/Source/Engine/Visject/ShaderGraphValue.cpp b/Source/Engine/Visject/ShaderGraphValue.cpp
index 6564cde2b..bb330e718 100644
--- a/Source/Engine/Visject/ShaderGraphValue.cpp
+++ b/Source/Engine/Visject/ShaderGraphValue.cpp
@@ -271,6 +271,48 @@ ShaderGraphValue ShaderGraphValue::InitForOne(VariantType::Types type)
return ShaderGraphValue(type, String(v));
}
+ShaderGraphValue ShaderGraphValue::GetY() const
+{
+ switch (Type)
+ {
+ case VariantType::Float2:
+ case VariantType::Float3:
+ case VariantType::Float4:
+ case VariantType::Double2:
+ case VariantType::Double3:
+ case VariantType::Double4:
+ return ShaderGraphValue(VariantType::Types::Float, Value + _subs[1]);
+ default:
+ return Zero;
+ }
+}
+
+ShaderGraphValue ShaderGraphValue::GetZ() const
+{
+ switch (Type)
+ {
+ case VariantType::Float3:
+ case VariantType::Float4:
+ case VariantType::Double3:
+ case VariantType::Double4:
+ return ShaderGraphValue(VariantType::Types::Float, Value + _subs[2]);
+ default:
+ return Zero;
+ }
+}
+
+ShaderGraphValue ShaderGraphValue::GetW() const
+{
+ switch (Type)
+ {
+ case VariantType::Float4:
+ case VariantType::Double4:
+ return ShaderGraphValue(VariantType::Types::Float, Value + _subs[3]);
+ default:
+ return One;
+ }
+}
+
ShaderGraphValue ShaderGraphValue::Cast(const ShaderGraphValue& v, VariantType::Types to)
{
// If they are the same types or input value is empty, then just return value
diff --git a/Source/Engine/Visject/ShaderGraphValue.h b/Source/Engine/Visject/ShaderGraphValue.h
index 439b59077..214012bd8 100644
--- a/Source/Engine/Visject/ShaderGraphValue.h
+++ b/Source/Engine/Visject/ShaderGraphValue.h
@@ -318,28 +318,19 @@ public:
/// Gets the Y component of the value. Valid only for vector types.
///
/// The Y component.
- ShaderGraphValue GetY() const
- {
- return ShaderGraphValue(VariantType::Types::Float, Value + _subs[1]);
- }
+ ShaderGraphValue GetY() const;
///
/// Gets the Z component of the value. Valid only for vector types.
///
/// The Z component.
- ShaderGraphValue GetZ() const
- {
- return ShaderGraphValue(VariantType::Types::Float, Value + _subs[2]);
- }
+ ShaderGraphValue GetZ() const;
///
/// Gets the W component of the value. Valid only for vector types.
///
/// The W component.
- ShaderGraphValue GetW() const
- {
- return ShaderGraphValue(VariantType::Types::Float, Value + _subs[3]);
- }
+ ShaderGraphValue GetW() const;
public:
///