MaterialX 1.39.1
Loading...
Searching...
No Matches
HwTransformNode.h
1//
2// Copyright Contributors to the MaterialX Project
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#ifndef MATERIALX_HWTRANSFORMNODE_H
7#define MATERIALX_HWTRANSFORMNODE_H
8
10
11MATERIALX_NAMESPACE_BEGIN
12
14class MX_GENSHADER_API HwTransformNode : public ShaderNodeImpl
15{
16 public:
17 void createVariables(const ShaderNode& node, GenContext& context, Shader& shader) const override;
18 void emitFunctionCall(const ShaderNode& node, GenContext& context, ShaderStage& stage) const override;
19
20 protected:
21 virtual const string& getMatrix(const string& fromSpace, const string& toSpace) const;
22 virtual const string& getModelToWorldMatrix() const = 0;
23 virtual const string& getWorldToModelMatrix() const = 0;
24 virtual string getHomogeneousCoordinate() const = 0;
25 virtual bool shouldNormalize() const { return false; }
26
27 virtual string getFromSpace(const ShaderNode&) const;
28 virtual string getToSpace(const ShaderNode&) const;
29
30 static const string FROM_SPACE;
31 static const string TO_SPACE;
32 static const string MODEL;
33 static const string OBJECT;
34 static const string WORLD;
35};
36
37class MX_GENSHADER_API HwTransformVectorNode : public HwTransformNode
38{
39 public:
40 static ShaderNodeImplPtr create();
41
42 protected:
43 const string& getModelToWorldMatrix() const override { return HW::T_WORLD_MATRIX; }
44 const string& getWorldToModelMatrix() const override { return HW::T_WORLD_INVERSE_MATRIX; }
45 string getHomogeneousCoordinate() const override { return "0.0"; }
46};
47
48class MX_GENSHADER_API HwTransformPointNode : public HwTransformVectorNode
49{
50 public:
51 static ShaderNodeImplPtr create();
52
53 protected:
54 string getHomogeneousCoordinate() const override { return "1.0"; }
55};
56
57class MX_GENSHADER_API HwTransformNormalNode : public HwTransformNode
58{
59 public:
60 static ShaderNodeImplPtr create();
61
62 protected:
63 const string& getModelToWorldMatrix() const override { return HW::T_WORLD_INVERSE_TRANSPOSE_MATRIX; }
64 const string& getWorldToModelMatrix() const override { return HW::T_WORLD_TRANSPOSE_MATRIX; }
65 string getHomogeneousCoordinate() const override { return "0.0"; }
66 bool shouldNormalize() const override { return true; }
67};
68
69MATERIALX_NAMESPACE_END
70
71#endif
Hardware shader generator base class.
shared_ptr< ShaderNodeImpl > ShaderNodeImplPtr
Shared pointer to a ShaderNodeImpl.
Definition: Library.h:40
A context class for shader generation.
Definition: GenContext.h:31
Generic transformation node for hardware languages.
Definition: HwTransformNode.h:15
void emitFunctionCall(const ShaderNode &node, GenContext &context, ShaderStage &stage) const override
Emit the function call or inline source code for given node instance in the given context.
void createVariables(const ShaderNode &node, GenContext &context, Shader &shader) const override
Create shader variables needed for the implementation of this node (e.g.
Definition: HwTransformNode.h:58
Definition: HwTransformNode.h:49
Definition: HwTransformNode.h:38
Class containing all data needed during shader generation.
Definition: Shader.h:33
Class representing a node in the shader generation DAG.
Definition: ShaderNode.h:320
Class handling the shader generation implementation for a node.
Definition: ShaderNodeImpl.h:32
A shader stage, containing the state and resulting source code for the stage.
Definition: ShaderStage.h:139