Skip to content

Commit

Permalink
Simplify transform node logic.
Browse files Browse the repository at this point in the history
  • Loading branch information
madmann91 committed Oct 13, 2023
1 parent 0087e55 commit 6b197a6
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 40 deletions.
38 changes: 5 additions & 33 deletions source/MaterialXGenShader/Nodes/HwTransformNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,60 +79,32 @@ string HwTransformNode::getToSpace(const ShaderNode& node) const
return input ? input->getValueString() : EMPTY_STRING;
}

ShaderNodeImplPtr HwTransformVectorNode::create()
{
return std::make_shared<HwTransformVectorNode>();
}

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<HwTransformVectorNode>();
}

ShaderNodeImplPtr HwTransformPointNode::create()
{
return std::make_shared<HwTransformPointNode>();
}

string HwTransformPointNode::getHomogeneousCoordinate() const
{
return "1.0";
}

ShaderNodeImplPtr HwTransformNormalNode::create()
{
return std::make_shared<HwTransformNormalNode>();
}

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
18 changes: 11 additions & 7 deletions source/MaterialXGenShader/Nodes/HwTransformNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#ifndef MATERIALX_HWTRANSFORMNODE_H
#define MATERIALX_HWTRANSFORMNODE_H

#include <MaterialXGenShader/ShaderGenerator.h>
#include <MaterialXGenShader/HwShaderGenerator.h>

MATERIALX_NAMESPACE_BEGIN

Expand All @@ -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; }

Expand All @@ -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
Expand All @@ -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
Expand All @@ -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; }
};

Expand Down

0 comments on commit 6b197a6

Please sign in to comment.