diff --git a/source/MaterialXGenShader/Nodes/HwTransformNode.cpp b/source/MaterialXGenShader/Nodes/HwTransformNode.cpp index 3695935bc7..8d7b979d75 100644 --- a/source/MaterialXGenShader/Nodes/HwTransformNode.cpp +++ b/source/MaterialXGenShader/Nodes/HwTransformNode.cpp @@ -79,27 +79,22 @@ string HwTransformNode::getToSpace(const ShaderNode& node) const return input ? input->getValueString() : EMPTY_STRING; } -ShaderNodeImplPtr HwTransformVectorNode::create() -{ - return std::make_shared(); -} - -const string& HwTransformVectorNode::getMatrix(const string& fromSpace, const string& toSpace) const +const string& HwTransformNode::getMatrix(const string& fromSpace, const string& toSpace) const { if ((fromSpace == MODEL || fromSpace == OBJECT) && toSpace == WORLD) { - return HW::T_WORLD_MATRIX; + return getModelToWorldMatrix(); } else if (fromSpace == WORLD && (toSpace == MODEL || toSpace == OBJECT)) { - return HW::T_WORLD_INVERSE_MATRIX; + return getWorldToModelMatrix(); } return EMPTY_STRING; } -string HwTransformVectorNode::getHomogeneousCoordinate() const +ShaderNodeImplPtr HwTransformVectorNode::create() { - return "0.0"; + return std::make_shared(); } ShaderNodeImplPtr HwTransformPointNode::create() @@ -107,32 +102,9 @@ ShaderNodeImplPtr HwTransformPointNode::create() return std::make_shared(); } -string HwTransformPointNode::getHomogeneousCoordinate() const -{ - return "1.0"; -} - ShaderNodeImplPtr HwTransformNormalNode::create() { return std::make_shared(); } -const string& HwTransformNormalNode::getMatrix(const string& fromSpace, const string& toSpace) const -{ - if ((fromSpace == MODEL || fromSpace == OBJECT) && toSpace == WORLD) - { - return HW::T_WORLD_INVERSE_TRANSPOSE_MATRIX; - } - else if (fromSpace == WORLD && (toSpace == MODEL || toSpace == OBJECT)) - { - return HW::T_WORLD_TRANSPOSE_MATRIX; - } - return EMPTY_STRING; -} - -string HwTransformNormalNode::getHomogeneousCoordinate() const -{ - return "0.0"; -} - MATERIALX_NAMESPACE_END diff --git a/source/MaterialXGenShader/Nodes/HwTransformNode.h b/source/MaterialXGenShader/Nodes/HwTransformNode.h index 42b549fe0e..c443d84368 100644 --- a/source/MaterialXGenShader/Nodes/HwTransformNode.h +++ b/source/MaterialXGenShader/Nodes/HwTransformNode.h @@ -6,7 +6,7 @@ #ifndef MATERIALX_HWTRANSFORMNODE_H #define MATERIALX_HWTRANSFORMNODE_H -#include +#include MATERIALX_NAMESPACE_BEGIN @@ -18,7 +18,9 @@ class MX_GENSHADER_API HwTransformNode : public ShaderNodeImpl void emitFunctionCall(const ShaderNode& node, GenContext& context, ShaderStage& stage) const override; protected: - virtual const string& getMatrix(const string& fromSpace, const string& toSpace) const = 0; + virtual const string& getMatrix(const string& fromSpace, const string& toSpace) const; + virtual const string& getModelToWorldMatrix() const = 0; + virtual const string& getWorldToModelMatrix() const = 0; virtual string getHomogeneousCoordinate() const = 0; virtual bool shouldNormalize() const { return false; } @@ -38,8 +40,9 @@ class MX_GENSHADER_API HwTransformVectorNode : public HwTransformNode static ShaderNodeImplPtr create(); protected: - const string& getMatrix(const string& fromSpace, const string& toSpace) const override; - string getHomogeneousCoordinate() const override; + const string& getModelToWorldMatrix() const override { return HW::T_WORLD_MATRIX; } + const string& getWorldToModelMatrix() const override { return HW::T_WORLD_INVERSE_MATRIX; } + string getHomogeneousCoordinate() const override { return "0.0"; } }; class MX_GENSHADER_API HwTransformPointNode : public HwTransformVectorNode @@ -48,7 +51,7 @@ class MX_GENSHADER_API HwTransformPointNode : public HwTransformVectorNode static ShaderNodeImplPtr create(); protected: - string getHomogeneousCoordinate() const override; + string getHomogeneousCoordinate() const override { return "1.0"; } }; class MX_GENSHADER_API HwTransformNormalNode : public HwTransformNode @@ -57,8 +60,9 @@ class MX_GENSHADER_API HwTransformNormalNode : public HwTransformNode static ShaderNodeImplPtr create(); protected: - const string& getMatrix(const string& fromSpace, const string& toSpace) const override; - string getHomogeneousCoordinate() const override; + const string& getModelToWorldMatrix() const override { return HW::T_WORLD_INVERSE_TRANSPOSE_MATRIX; } + const string& getWorldToModelMatrix() const override { return HW::T_WORLD_TRANSPOSE_MATRIX; } + string getHomogeneousCoordinate() const override { return "0.0"; } bool shouldNormalize() const override { return true; } };