Improve 47b8c9978f to handle non-vec4 cases

#2000
This commit is contained in:
Wojtek Figat
2023-11-28 14:55:26 +01:00
parent 47b8c9978f
commit cf8b7a20c2
3 changed files with 49 additions and 16 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -318,28 +318,19 @@ public:
/// Gets the Y component of the value. Valid only for vector types.
/// </summary>
/// <returns>The Y component.</returns>
ShaderGraphValue GetY() const
{
return ShaderGraphValue(VariantType::Types::Float, Value + _subs[1]);
}
ShaderGraphValue GetY() const;
/// <summary>
/// Gets the Z component of the value. Valid only for vector types.
/// </summary>
/// <returns>The Z component.</returns>
ShaderGraphValue GetZ() const
{
return ShaderGraphValue(VariantType::Types::Float, Value + _subs[2]);
}
ShaderGraphValue GetZ() const;
/// <summary>
/// Gets the W component of the value. Valid only for vector types.
/// </summary>
/// <returns>The W component.</returns>
ShaderGraphValue GetW() const
{
return ShaderGraphValue(VariantType::Types::Float, Value + _subs[3]);
}
ShaderGraphValue GetW() const;
public:
/// <summary>