MaterialX 1.38.10
Loading...
Searching...
No Matches
TypeDesc.h
Go to the documentation of this file.
1//
2// Copyright Contributors to the MaterialX Project
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#ifndef MATERIALX_TYPEDESC_H
7#define MATERIALX_TYPEDESC_H
8
11
13
14MATERIALX_NAMESPACE_BEGIN
15
16using ChannelMap = std::unordered_map<char, int>;
17
27class MX_GENSHADER_API TypeDesc
28{
29 public:
30 enum BaseType
31 {
32 BASETYPE_NONE,
33 BASETYPE_BOOLEAN,
34 BASETYPE_INTEGER,
35 BASETYPE_FLOAT,
36 BASETYPE_STRING,
37 BASETYPE_STRUCT,
38 BASETYPE_LAST
39 };
40
41 enum Semantic
42 {
43 SEMANTIC_NONE,
44 SEMANTIC_COLOR,
45 SEMANTIC_VECTOR,
46 SEMANTIC_MATRIX,
47 SEMANTIC_FILENAME,
48 SEMANTIC_CLOSURE,
49 SEMANTIC_SHADER,
50 SEMANTIC_MATERIAL,
51 SEMANTIC_ENUM,
52 SEMANTIC_LAST
53 };
54
57 static const TypeDesc* registerType(const string& name, unsigned char basetype, unsigned char semantic = SEMANTIC_NONE,
58 size_t size = 1, bool editable = true, const ChannelMap& channelMapping = ChannelMap());
59
61 bool operator==(const TypeDesc& rhs) const;
62
64 bool operator!=(const TypeDesc& rhs) const;
65
68 static const TypeDesc* get(const string& name);
69
71 const string& getName() const { return _name; }
72
74 unsigned char getBaseType() const { return _basetype; }
75
78 int getChannelIndex(char channel) const;
79
81 unsigned char getSemantic() const { return _semantic; }
82
87 size_t getSize() const { return _size; }
88
92 bool isEditable() const { return _editable; }
93
95 bool isScalar() const { return _size == 1; }
96
98 bool isAggregate() const { return _size > 1; }
99
101 bool isArray() const { return _size == 0; }
102
104 bool isFloat2() const { return _size == 2 && (_semantic == SEMANTIC_COLOR || _semantic == SEMANTIC_VECTOR); }
105
107 bool isFloat3() const { return _size == 3 && (_semantic == SEMANTIC_COLOR || _semantic == SEMANTIC_VECTOR); }
108
110 bool isFloat4() const { return _size == 4 && (_semantic == SEMANTIC_COLOR || _semantic == SEMANTIC_VECTOR); }
111
113 bool isClosure() const { return (_semantic == SEMANTIC_CLOSURE || _semantic == SEMANTIC_SHADER || _semantic == SEMANTIC_MATERIAL); }
114
115 private:
116 TypeDesc(const string& name, unsigned char basetype, unsigned char semantic, size_t size,
117 bool editable, const ChannelMap& channelMapping);
118
119 const string _name;
120 const unsigned char _basetype;
121 const unsigned char _semantic;
122 const size_t _size;
123 const bool _editable;
124 const ChannelMap _channelMapping;
125};
126
127namespace Type
128{
129
135extern MX_GENSHADER_API const TypeDesc* NONE;
136extern MX_GENSHADER_API const TypeDesc* BOOLEAN;
137extern MX_GENSHADER_API const TypeDesc* INTEGER;
138extern MX_GENSHADER_API const TypeDesc* INTEGERARRAY;
139extern MX_GENSHADER_API const TypeDesc* FLOAT;
140extern MX_GENSHADER_API const TypeDesc* FLOATARRAY;
141extern MX_GENSHADER_API const TypeDesc* VECTOR2;
142extern MX_GENSHADER_API const TypeDesc* VECTOR3;
143extern MX_GENSHADER_API const TypeDesc* VECTOR4;
144extern MX_GENSHADER_API const TypeDesc* COLOR3;
145extern MX_GENSHADER_API const TypeDesc* COLOR4;
146extern MX_GENSHADER_API const TypeDesc* MATRIX33;
147extern MX_GENSHADER_API const TypeDesc* MATRIX44;
148extern MX_GENSHADER_API const TypeDesc* STRING;
149extern MX_GENSHADER_API const TypeDesc* FILENAME;
150extern MX_GENSHADER_API const TypeDesc* BSDF;
151extern MX_GENSHADER_API const TypeDesc* EDF;
152extern MX_GENSHADER_API const TypeDesc* VDF;
153extern MX_GENSHADER_API const TypeDesc* SURFACESHADER;
154extern MX_GENSHADER_API const TypeDesc* VOLUMESHADER;
155extern MX_GENSHADER_API const TypeDesc* DISPLACEMENTSHADER;
156extern MX_GENSHADER_API const TypeDesc* LIGHTSHADER;
157extern MX_GENSHADER_API const TypeDesc* MATERIAL;
158
159} // namespace Type
160
161MATERIALX_NAMESPACE_END
162
163#endif
Macros for declaring imported and exported symbols.
A type descriptor for MaterialX data types.
Definition: TypeDesc.h:28
bool isEditable() const
Returns true if the type is editable by users.
Definition: TypeDesc.h:92
const string & getName() const
Return the name of the type.
Definition: TypeDesc.h:71
bool isClosure() const
Return true if the type represents a closure.
Definition: TypeDesc.h:113
bool isScalar() const
Return true if the type is a scalar type.
Definition: TypeDesc.h:95
size_t getSize() const
Return the number of elements the type is composed of.
Definition: TypeDesc.h:87
bool isFloat3() const
Return true if the type is an aggregate of 3 floats.
Definition: TypeDesc.h:107
unsigned char getSemantic() const
Return the semantic for the type.
Definition: TypeDesc.h:81
bool isAggregate() const
Return true if the type is an aggregate type.
Definition: TypeDesc.h:98
bool isFloat2() const
Return true if the type is an aggregate of 2 floats.
Definition: TypeDesc.h:104
bool isArray() const
Return true if the type is an array type.
Definition: TypeDesc.h:101
bool isFloat4() const
Return true if the type is an aggregate of 4 floats.
Definition: TypeDesc.h:110
unsigned char getBaseType() const
Return the basetype for the type.
Definition: TypeDesc.h:74