From cf8b7a20c24c797428fb74e654702e171a1e85cd Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 28 Nov 2023 14:55:26 +0100 Subject: [PATCH] Improve 47b8c9978fa16fa99ed8faa2f5cdc00b68d42f35 to handle non-vec4 cases #2000 --- .../MaterialGenerator.Textures.cpp | 8 ++-- Source/Engine/Visject/ShaderGraphValue.cpp | 42 +++++++++++++++++++ Source/Engine/Visject/ShaderGraphValue.h | 15 ++----- 3 files changed, 49 insertions(+), 16 deletions(-) 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: ///