HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ShaderNode.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_SHADERNODE_H
7 #define MATERIALX_SHADERNODE_H
8 
9 /// @file
10 /// Classes for nodes created during shader generation
11 
13 
17 
18 #include <MaterialXCore/Node.h>
19 
21 
22 class ShaderNode;
23 class ShaderPort;
24 class ShaderInput;
25 class ShaderOutput;
26 class ShaderGraph;
27 
28 /// Shared pointer to a ShaderPort
29 using ShaderPortPtr = shared_ptr<class ShaderPort>;
30 /// Shared pointer to a ShaderInput
31 using ShaderInputPtr = shared_ptr<class ShaderInput>;
32 /// Shared pointer to a ShaderOutput
33 using ShaderOutputPtr = shared_ptr<class ShaderOutput>;
34 /// Shared pointer to a ShaderNode
35 using ShaderNodePtr = shared_ptr<class ShaderNode>;
36 /// A vector of ShaderInput pointers
37 using ShaderInputVec = vector<ShaderInput*>;
38 
39 /// Metadata to be exported to generated shader.
41 {
42  string name;
43  const TypeDesc* type;
45  ShaderMetadata(const string& n, const TypeDesc* t, ValuePtr v = nullptr) :
46  name(n),
47  type(t),
48  value(v)
49  {
50  }
51 };
52 using ShaderMetadataVec = vector<ShaderMetadata>;
53 using ShaderMetadataVecPtr = shared_ptr<ShaderMetadataVec>;
54 
55 /// @class ShaderMetadataRegistry
56 /// A registry for metadata that will be exported to the generated shader
57 /// if found on nodes and inputs during shader generation.
59 {
60  public:
61  static const string USER_DATA_NAME;
62 
63  /// Add a new metadata entry to the registry.
64  /// The entry contains the name and data type
65  /// for the metadata.
66  void addMetadata(const string& name, const TypeDesc* type, ValuePtr value = nullptr)
67  {
68  if (_entryIndex.count(name) == 0)
69  {
70  _entryIndex[name] = _entries.size();
71  _entries.emplace_back(name, type, value);
72  }
73  }
74 
75  /// Return the metadata registered for the given name, or nullptr
76  /// if no such entry is found.
77  const ShaderMetadata* findMetadata(const string& name) const
78  {
79  auto it = _entryIndex.find(name);
80  return it != _entryIndex.end() ? &_entries[it->second] : nullptr;
81  }
82 
83  /// Return the metadata registered for the given name, or nullptr
84  /// if no such entry is found.
86  {
87  auto it = _entryIndex.find(name);
88  return it != _entryIndex.end() ? &_entries[it->second] : nullptr;
89  }
90 
91  /// Return all entries in the registry.
93  {
94  return _entries;
95  }
96 
97  /// Clear all entries in the registry.
98  void clear()
99  {
100  _entryIndex.clear();
101  _entries.clear();
102  }
103 
104  protected:
105  vector<ShaderMetadata> _entries;
106  std::unordered_map<string, size_t> _entryIndex;
107 };
108 
109 using ShaderMetadataRegistryPtr = shared_ptr<ShaderMetadataRegistry>;
110 
111 /// Flags set on shader ports.
113 {
114  public:
115  static const uint32_t UNIFORM = 1u << 0;
116  static const uint32_t EMITTED = 1u << 1;
117  static const uint32_t BIND_INPUT = 1u << 2;
118 };
119 
120 /// @class ShaderPort
121 /// An input or output port on a ShaderNode
122 class MX_GENSHADER_API ShaderPort : public std::enable_shared_from_this<ShaderPort>
123 {
124  public:
125  /// Constructor.
126  ShaderPort(ShaderNode* node, const TypeDesc* type, const string& name, ValuePtr value = nullptr);
127 
128  /// Return a shared pointer instance of this object.
130  {
131  return shared_from_this();
132  }
133 
134  /// Return the node this port belongs to.
135  ShaderNode* getNode() { return _node; }
136 
137  /// Return the node this port belongs to.
138  const ShaderNode* getNode() const { return _node; }
139 
140  /// Set the data type for this port.
141  void setType(const TypeDesc* type) { _type = type; }
142 
143  /// Return the data type for this port.
144  const TypeDesc* getType() const { return _type; }
145 
146  /// Set the name of this port.
147  void setName(const string& name) { _name = name; }
148 
149  /// Return the name of this port.
150  const string& getName() const { return _name; }
151 
152  /// Return the name of this port.
153  string getFullName() const;
154 
155  /// Set the variable name of this port.
156  void setVariable(const string& name) { _variable = name; }
157 
158  /// Return the variable name of this port.
159  const string& getVariable() const { return _variable; }
160 
161  /// Set the variable semantic of this port.
162  void setSemantic(const string& semantic) { _semantic = semantic; }
163 
164  /// Return the variable semantic of this port.
165  const string& getSemantic() const { return _semantic; }
166 
167  /// Set a value on this port.
168  void setValue(ValuePtr value) { _value = value; }
169 
170  /// Return the value set on this port.
171  ValuePtr getValue() const { return _value; }
172 
173  /// Set a source color space for the value on this port.
174  void setColorSpace(const string& colorspace) { _colorspace = colorspace; }
175 
176  /// Return the source color space for the value on this port.
177  const string& getColorSpace() const { return _colorspace; }
178 
179  /// Set a unit type for the value on this port.
180  void setUnit(const string& unit) { _unit = unit; }
181 
182  /// Return the unit type for the value on this port.
183  const string& getUnit() const { return _unit; }
184 
185  /// Set geomprop name if the input has a default
186  /// geomprop to be assigned when it is unconnected.
187  void setGeomProp(const string& geomprop) { _geomprop = geomprop; }
188 
189  /// Get geomprop name.
190  const string& getGeomProp() const { return _geomprop; }
191 
192  /// Set the path to this port.
193  void setPath(const string& path) { _path = path; }
194 
195  /// Return the path to this port.
196  const string& getPath() const { return _path; }
197 
198  /// Set flags on this port.
199  void setFlags(uint32_t flags) { _flags = flags; }
200 
201  /// Return flags set on this port.
202  uint32_t getFlags() const { return _flags; }
203 
204  /// Set the on|off state of a given flag.
205  void setFlag(uint32_t flag, bool value)
206  {
207  _flags = value ? (_flags | flag) : (_flags & ~flag);
208  }
209 
210  /// Return the on|off state of a given flag.
211  bool getFlag(uint32_t flag) const
212  {
213  return ((_flags & flag) != 0);
214  }
215 
216  /// Set the uniform flag this port to true.
217  void setUniform() { _flags |= ShaderPortFlag::UNIFORM; }
218 
219  /// Return the uniform flag on this port.
220  bool isUniform() const { return (_flags & ShaderPortFlag::UNIFORM) != 0; }
221 
222  /// Set the emitted state on this port to true.
223  void setEmitted() { _flags |= ShaderPortFlag::EMITTED; }
224 
225  /// Return the emitted state of this port.
226  bool isEmitted() const { return (_flags & ShaderPortFlag::EMITTED) != 0; }
227 
228  /// Set the bind input state on this port to true.
230 
231  /// Return the emitted state of this port.
232  bool isBindInput() const { return (_flags & ShaderPortFlag::BIND_INPUT) != 0; }
233 
234  /// Set the metadata vector.
235  void setMetadata(ShaderMetadataVecPtr metadata) { _metadata = metadata; }
236 
237  /// Get the metadata vector.
238  ShaderMetadataVecPtr getMetadata() { return _metadata; }
239 
240  /// Get the metadata vector.
241  const ShaderMetadataVecPtr& getMetadata() const { return _metadata; }
242 
243  protected:
245  const TypeDesc* _type;
246  string _name;
247  string _path;
248  string _semantic;
249  string _variable;
251  string _unit;
252  string _colorspace;
253  string _geomprop;
255  uint32_t _flags;
256 };
257 
258 /// @class ShaderInput
259 /// An input on a ShaderNode
261 {
262  public:
263  ShaderInput(ShaderNode* node, const TypeDesc* type, const string& name);
264 
265  /// Return a connection to an upstream node output,
266  /// or nullptr if not connected.
267  ShaderOutput* getConnection() { return _connection; }
268 
269  /// Return a connection to an upstream node output,
270  /// or nullptr if not connected.
271  const ShaderOutput* getConnection() const { return _connection; }
272 
273  /// Make a connection from the given source output to this input.
274  void makeConnection(ShaderOutput* src);
275 
276  /// Break the connection to this input.
277  void breakConnection();
278 
279  /// Set optional channels value
280  void setChannels(const string& channels) { _channels = channels; }
281 
282  /// Get optional channels value
283  const string& getChannels() const { return _channels; }
284 
285  /// Return the sibling node connected upstream,
286  /// or nullptr if there is no sibling upstream.
287  ShaderNode* getConnectedSibling() const;
288 
289  protected:
291  string _channels;
292  friend class ShaderOutput;
293 };
294 
295 /// @class ShaderOutput
296 /// An output on a ShaderNode
298 {
299  public:
300  ShaderOutput(ShaderNode* node, const TypeDesc* type, const string& name);
301 
302  /// Return a set of connections to downstream node inputs,
303  /// empty if not connected.
304  const ShaderInputVec& getConnections() const { return _connections; }
305 
306  /// Make a connection from this output to the given input
307  void makeConnection(ShaderInput* dst);
308 
309  /// Break a connection from this output to the given input
310  void breakConnection(ShaderInput* dst);
311 
312  /// Break all connections from this output
313  void breakConnections();
314 
315  protected:
317  friend class ShaderInput;
318 };
319 
320 /// @class ShaderNode
321 /// Class representing a node in the shader generation DAG
323 {
324  public:
325  virtual ~ShaderNode() { }
326 
327  /// Flags for classifying nodes into different categories.
329  {
330  public:
331  // Node classes
332  static const uint32_t TEXTURE = 1 << 0; /// Any node that outputs floats, colors, vectors, etc.
333  static const uint32_t CLOSURE = 1 << 1; /// Any node that represents light integration
334  static const uint32_t SHADER = 1 << 2; /// Any node that outputs a shader
335  static const uint32_t MATERIAL = 1 << 3; /// Any node that outputs a material
336  // Specific texture node types
337  static const uint32_t FILETEXTURE = 1 << 4; /// A file texture node
338  static const uint32_t CONDITIONAL = 1 << 5; /// A conditional node
339  static const uint32_t CONSTANT = 1 << 6; /// A constant node
340  // Specific closure types
341  static const uint32_t BSDF = 1 << 7; /// A BSDF node
342  static const uint32_t BSDF_R = 1 << 8; /// A reflection BSDF node
343  static const uint32_t BSDF_T = 1 << 9; /// A transmission BSDF node
344  static const uint32_t EDF = 1 << 10; /// A EDF node
345  static const uint32_t VDF = 1 << 11; /// A VDF node
346  static const uint32_t LAYER = 1 << 12; /// A node for vertical layering of other closure nodes
347  static const uint32_t THINFILM = 1 << 13; /// A node for adding thin-film over microfacet BSDF nodes
348  // Specific shader types
349  static const uint32_t SURFACE = 1 << 14; /// A surface shader node
350  static const uint32_t VOLUME = 1 << 15; /// A volume shader node
351  static const uint32_t LIGHT = 1 << 16; /// A light shader node
352  static const uint32_t UNLIT = 1 << 17; /// An unlit surface shader node
353  // Types based on nodegroup
354  static const uint32_t SAMPLE2D = 1 << 18; /// Can be sampled in 2D (uv space)
355  static const uint32_t SAMPLE3D = 1 << 19; /// Can be sampled in 3D (position)
356  static const uint32_t GEOMETRIC = 1 << 20; /// Geometric input
357  static const uint32_t DOT = 1 << 21; /// A dot node
358  };
359 
360  static const ShaderNodePtr NONE;
361 
362  static const string CONSTANT;
363  static const string DOT;
364  static const string IMAGE;
365  static const string SURFACESHADER;
366  static const string SCATTER_MODE;
367  static const string BSDF_R;
368  static const string BSDF_T;
369  static const string TRANSFORM_POINT;
370  static const string TRANSFORM_VECTOR;
371  static const string TRANSFORM_NORMAL;
372  static const string TEXTURE2D_GROUPNAME;
373  static const string TEXTURE3D_GROUPNAME;
374  static const string PROCEDURAL2D_GROUPNAME;
375  static const string PROCEDURAL3D_GROUPNAME;
376  static const string GEOMETRIC_GROUPNAME;
377 
378  public:
379  /// Constructor.
380  ShaderNode(const ShaderGraph* parent, const string& name);
381 
382  /// Create a new node from a nodedef.
383  static ShaderNodePtr create(const ShaderGraph* parent, const string& name, const NodeDef& nodeDef,
384  GenContext& context);
385 
386  /// Create a new node from a node implementation.
387  static ShaderNodePtr create(const ShaderGraph* parent, const string& name, ShaderNodeImplPtr impl,
388  unsigned int classification = Classification::TEXTURE);
389 
390  /// Return true if this node is a graph.
391  virtual bool isAGraph() const { return false; }
392 
393  /// Return the parent graph that owns this node.
394  /// If this node is a root graph it has no parent
395  /// and nullptr will be returned.
396  const ShaderGraph* getParent() const
397  {
398  return _parent;
399  }
400 
401  /// Set classification bits for this node,
402  /// replacing any previous set bits.
403  void setClassification(uint32_t c)
404  {
405  _classification = c;
406  }
407 
408  /// Get classification bits set for this node.
409  uint32_t getClassification() const
410  {
411  return _classification;
412  }
413 
414  /// Add classification bits to this node.
415  void addClassification(uint32_t c)
416  {
417  _classification |= c;
418  }
419 
420  /// Return true if this node matches the given classification.
421  bool hasClassification(uint32_t c) const
422  {
423  return (_classification & c) == c;
424  }
425 
426  /// Return the name of this node.
427  const string& getName() const
428  {
429  return _name;
430  }
431 
432  /// Return the implementation used for this node.
434  {
435  return *_impl;
436  }
437 
438  /// Initialize this shader node with all required data
439  /// from the given node and nodedef.
440  void initialize(const Node& node, const NodeDef& nodeDef, GenContext& context);
441 
442  /// Add inputs/outputs
443  ShaderInput* addInput(const string& name, const TypeDesc* type);
444  ShaderOutput* addOutput(const string& name, const TypeDesc* type);
445 
446  /// Get number of inputs/outputs
447  size_t numInputs() const { return _inputOrder.size(); }
448  size_t numOutputs() const { return _outputOrder.size(); }
449 
450  /// Get inputs/outputs by index
451  ShaderInput* getInput(size_t index) { return _inputOrder[index]; }
452  ShaderOutput* getOutput(size_t index = 0) { return _outputOrder[index]; }
453  const ShaderInput* getInput(size_t index) const { return _inputOrder[index]; }
454  const ShaderOutput* getOutput(size_t index = 0) const { return _outputOrder[index]; }
455 
456  /// Get inputs/outputs by name
457  ShaderInput* getInput(const string& name);
458  ShaderOutput* getOutput(const string& name);
459  const ShaderInput* getInput(const string& name) const;
460  const ShaderOutput* getOutput(const string& name) const;
461 
462  /// Get vector of inputs/outputs
463  const vector<ShaderInput*>& getInputs() const { return _inputOrder; }
464  const vector<ShaderOutput*>& getOutputs() const { return _outputOrder; }
465 
466  /// Set the metadata vector.
467  void setMetadata(ShaderMetadataVecPtr metadata) { _metadata = metadata; }
468 
469  /// Get the metadata vector.
470  ShaderMetadataVecPtr getMetadata() { return _metadata; }
471 
472  /// Get the metadata vector.
473  const ShaderMetadataVecPtr& getMetadata() const { return _metadata; }
474 
475  /// Returns true if an input is editable by users.
476  /// Editable inputs are allowed to be published as shader uniforms
477  /// and hence must be presentable in a user interface.
478  bool isEditable(const ShaderInput& input) const
479  {
480  return (!_impl || _impl->isEditable(input));
481  }
482 
483  /// Returns true if a graph input is accessible by users.
484  /// Editable inputs are allowed to be published as shader uniforms
485  /// and hence must be presentable in a user interface.
486  bool isEditable(const ShaderGraphInputSocket& input) const
487  {
488  return (!_impl || _impl->isEditable(input));
489  }
490 
491  protected:
492  /// Create metadata from the nodedef according to registered metadata.
493  void createMetadata(const NodeDef& nodeDef, GenContext& context);
494 
496  string _name;
497  uint32_t _classification;
498 
499  std::unordered_map<string, ShaderInputPtr> _inputMap;
500  vector<ShaderInput*> _inputOrder;
501 
502  std::unordered_map<string, ShaderOutputPtr> _outputMap;
503  vector<ShaderOutput*> _outputOrder;
504 
507 
508  friend class ShaderGraph;
509 };
510 
512 
513 #endif
ShaderOutput * _connection
Definition: ShaderNode.h:290
const ShaderGraph * _parent
Definition: ShaderNode.h:495
Flags for classifying nodes into different categories.
Definition: ShaderNode.h:328
shared_ptr< class ShaderInput > ShaderInputPtr
Shared pointer to a ShaderInput.
Definition: ShaderNode.h:31
const ShaderOutput * getConnection() const
Definition: ShaderNode.h:271
const string & getColorSpace() const
Return the source color space for the value on this port.
Definition: ShaderNode.h:177
ShaderPortPtr getSelf()
Return a shared pointer instance of this object.
Definition: ShaderNode.h:129
short * getInput(int size) override
static const string TRANSFORM_POINT
Definition: ShaderNode.h:369
GLbitfield flags
Definition: glcorearb.h:1596
const ShaderNodeImpl & getImplementation() const
Return the implementation used for this node.
Definition: ShaderNode.h:433
static const string USER_DATA_NAME
Definition: ShaderNode.h:61
void addClassification(uint32_t c)
Add classification bits to this node.
Definition: ShaderNode.h:415
const string & getName() const
Return the name of this port.
Definition: ShaderNode.h:150
vector< ShaderInput * > _inputOrder
Definition: ShaderNode.h:500
static const string TRANSFORM_NORMAL
Definition: ShaderNode.h:371
shared_ptr< ShaderNodeImpl > ShaderNodeImplPtr
Shared pointer to a ShaderNodeImpl.
Definition: Library.h:40
std::unordered_map< string, size_t > _entryIndex
Definition: ShaderNode.h:106
ValuePtr _value
Definition: ShaderNode.h:250
string _path
Definition: ShaderNode.h:247
void setColorSpace(const string &colorspace)
Set a source color space for the value on this port.
Definition: ShaderNode.h:174
#define MATERIALX_NAMESPACE_BEGIN
Definition: Generated.h:25
const ShaderMetadata * findMetadata(const string &name) const
Definition: ShaderNode.h:77
std::unordered_map< string, ShaderInputPtr > _inputMap
Definition: ShaderNode.h:499
ShaderMetadataVecPtr _metadata
Definition: ShaderNode.h:506
ShaderOutput * getOutput(size_t index=0)
Definition: ShaderNode.h:452
Definition: Node.h:52
string _name
Definition: ShaderNode.h:496
const GLdouble * v
Definition: glcorearb.h:837
const ShaderMetadataVec & getAllMetadata() const
Return all entries in the registry.
Definition: ShaderNode.h:92
const ShaderInput * getInput(size_t index) const
Definition: ShaderNode.h:453
const ShaderOutput * getOutput(size_t index=0) const
Definition: ShaderNode.h:454
GLsizei const GLfloat * value
Definition: glcorearb.h:824
ShaderInput * getInput(size_t index)
Get inputs/outputs by index.
Definition: ShaderNode.h:451
void setBindInput()
Set the bind input state on this port to true.
Definition: ShaderNode.h:229
GLsizei const GLchar *const * path
Definition: glcorearb.h:3341
static const string IMAGE
Definition: ShaderNode.h:364
const ShaderGraph * getParent() const
Definition: ShaderNode.h:396
vector< ShaderOutput * > _outputOrder
Definition: ShaderNode.h:503
MX_GENSHADER_API const TypeDesc * BSDF
bool hasClassification(uint32_t c) const
Return true if this node matches the given classification.
Definition: ShaderNode.h:421
virtual bool isAGraph() const
Return true if this node is a graph.
Definition: ShaderNode.h:391
size_t numOutputs() const
Definition: ShaderNode.h:448
void setMetadata(ShaderMetadataVecPtr metadata)
Set the metadata vector.
Definition: ShaderNode.h:467
void setUniform()
Set the uniform flag this port to true.
Definition: ShaderNode.h:217
static const string PROCEDURAL3D_GROUPNAME
Definition: ShaderNode.h:375
Metadata to be exported to generated shader.
Definition: ShaderNode.h:40
void setFlag(uint32_t flag, bool value)
Set the on|off state of a given flag.
Definition: ShaderNode.h:205
#define MX_GENSHADER_API
Definition: Export.h:18
const TypeDesc * _type
Definition: ShaderNode.h:245
MX_GENSHADER_API const TypeDesc * MATERIAL
string _variable
Definition: ShaderNode.h:249
const string & getVariable() const
Return the variable name of this port.
Definition: ShaderNode.h:159
bool getFlag(uint32_t flag) const
Return the on|off state of a given flag.
Definition: ShaderNode.h:211
static const string TRANSFORM_VECTOR
Definition: ShaderNode.h:370
bool isEditable(const ShaderGraphInputSocket &input) const
Definition: ShaderNode.h:486
ShaderNode * _node
Definition: ShaderNode.h:244
bool isUniform() const
Return the uniform flag on this port.
Definition: ShaderNode.h:220
ShaderMetadataVecPtr getMetadata()
Get the metadata vector.
Definition: ShaderNode.h:470
const string & getPath() const
Return the path to this port.
Definition: ShaderNode.h:196
vector< ShaderInput * > ShaderInputVec
A vector of ShaderInput pointers.
Definition: ShaderNode.h:37
string _name
Definition: ShaderNode.h:246
ShaderMetadata(const string &n, const TypeDesc *t, ValuePtr v=nullptr)
Definition: ShaderNode.h:45
void setName(const string &name)
Set the name of this port.
Definition: ShaderNode.h:147
void setType(const TypeDesc *type)
Set the data type for this port.
Definition: ShaderNode.h:141
const vector< ShaderInput * > & getInputs() const
Get vector of inputs/outputs.
Definition: ShaderNode.h:463
GLdouble n
Definition: glcorearb.h:2008
vector< ShaderMetadata > ShaderMetadataVec
Definition: ShaderNode.h:52
static const uint32_t BIND_INPUT
Definition: ShaderNode.h:117
static const uint32_t UNIFORM
Definition: ShaderNode.h:115
const ShaderMetadataVecPtr & getMetadata() const
Get the metadata vector.
Definition: ShaderNode.h:241
void addMetadata(const string &name, const TypeDesc *type, ValuePtr value=nullptr)
Definition: ShaderNode.h:66
const TypeDesc * type
Definition: ShaderNode.h:43
ShaderNodeImplPtr _impl
Definition: ShaderNode.h:505
ShaderMetadata * findMetadata(const string &name)
Definition: ShaderNode.h:85
shared_ptr< class ShaderNode > ShaderNodePtr
Shared pointer to a ShaderNode.
Definition: ShaderNode.h:35
static const string DOT
Definition: ShaderNode.h:363
const ShaderInputVec & getConnections() const
Definition: ShaderNode.h:304
void setGeomProp(const string &geomprop)
Definition: ShaderNode.h:187
static const string TEXTURE2D_GROUPNAME
Definition: ShaderNode.h:372
MX_GENSHADER_API const TypeDesc * VDF
static const string PROCEDURAL2D_GROUPNAME
Definition: ShaderNode.h:374
static const string BSDF_R
Definition: ShaderNode.h:367
void setEmitted()
Set the emitted state on this port to true.
Definition: ShaderNode.h:223
const string & getChannels() const
Get optional channels value.
Definition: ShaderNode.h:283
void setPath(const string &path)
Set the path to this port.
Definition: ShaderNode.h:193
static const uint32_t EMITTED
Definition: ShaderNode.h:116
void setMetadata(ShaderMetadataVecPtr metadata)
Set the metadata vector.
Definition: ShaderNode.h:235
png_const_structrp png_const_inforp int * unit
Definition: png.h:2161
const string & getSemantic() const
Return the variable semantic of this port.
Definition: ShaderNode.h:165
GLuint const GLchar * name
Definition: glcorearb.h:786
OPENVDB_API void initialize()
Global registration of native Grid, Transform, Metadata and Point attribute types. Also initializes blosc (if enabled).
Definition: logging.h:294
static const string BSDF_T
Definition: ShaderNode.h:368
void setFlags(uint32_t flags)
Set flags on this port.
Definition: ShaderNode.h:199
uint32_t _classification
Definition: ShaderNode.h:497
ShaderInputVec _connections
Definition: ShaderNode.h:316
shared_ptr< ShaderMetadataRegistry > ShaderMetadataRegistryPtr
Definition: ShaderNode.h:109
ValuePtr value
Definition: ShaderNode.h:44
shared_ptr< ShaderMetadataVec > ShaderMetadataVecPtr
Definition: ShaderNode.h:53
GLdouble t
Definition: glad.h:2397
Flags set on shader ports.
Definition: ShaderNode.h:112
void clear()
Clear all entries in the registry.
Definition: ShaderNode.h:98
static const string SURFACESHADER
Definition: ShaderNode.h:365
GLenum GLenum dst
Definition: glcorearb.h:1793
string _semantic
Definition: ShaderNode.h:248
shared_ptr< class ShaderOutput > ShaderOutputPtr
Shared pointer to a ShaderOutput.
Definition: ShaderNode.h:33
const vector< ShaderOutput * > & getOutputs() const
Definition: ShaderNode.h:464
vector< ShaderMetadata > _entries
Definition: ShaderNode.h:105
const ShaderNode * getNode() const
Return the node this port belongs to.
Definition: ShaderNode.h:138
ShaderNode * getNode()
Return the node this port belongs to.
Definition: ShaderNode.h:135
uint32_t _flags
Definition: ShaderNode.h:255
void setVariable(const string &name)
Set the variable name of this port.
Definition: ShaderNode.h:156
string _colorspace
Definition: ShaderNode.h:252
GLuint index
Definition: glcorearb.h:786
std::unordered_map< string, ShaderOutputPtr > _outputMap
Definition: ShaderNode.h:502
static const string TEXTURE3D_GROUPNAME
Definition: ShaderNode.h:373
string _unit
Definition: ShaderNode.h:251
ShaderMetadataVecPtr getMetadata()
Get the metadata vector.
Definition: ShaderNode.h:238
shared_ptr< class ShaderPort > ShaderPortPtr
Shared pointer to a ShaderPort.
Definition: ShaderNode.h:29
static const string SCATTER_MODE
Definition: ShaderNode.h:366
virtual ~ShaderNode()
Definition: ShaderNode.h:325
MX_GENSHADER_API const TypeDesc * EDF
static const string CONSTANT
Definition: ShaderNode.h:362
const string & getGeomProp() const
Get geomprop name.
Definition: ShaderNode.h:190
ShaderMetadataVecPtr _metadata
Definition: ShaderNode.h:254
ValuePtr getValue() const
Return the value set on this port.
Definition: ShaderNode.h:171
const ShaderMetadataVecPtr & getMetadata() const
Get the metadata vector.
Definition: ShaderNode.h:473
Definition: core.h:1131
#define MATERIALX_NAMESPACE_END
Definition: Generated.h:26
void setChannels(const string &channels)
Set optional channels value.
Definition: ShaderNode.h:280
uint32_t getFlags() const
Return flags set on this port.
Definition: ShaderNode.h:202
size_t numInputs() const
Get number of inputs/outputs.
Definition: ShaderNode.h:447
bool isEmitted() const
Return the emitted state of this port.
Definition: ShaderNode.h:226
const TypeDesc * getType() const
Return the data type for this port.
Definition: ShaderNode.h:144
void setSemantic(const string &semantic)
Set the variable semantic of this port.
Definition: ShaderNode.h:162
string _geomprop
Definition: ShaderNode.h:253
bool isEditable(const ShaderInput &input) const
Definition: ShaderNode.h:478
shared_ptr< Value > ValuePtr
A shared pointer to a Value.
Definition: Value.h:29
type
Definition: core.h:1059
static const ShaderNodePtr NONE
Definition: ShaderNode.h:360
void setClassification(uint32_t c)
Definition: ShaderNode.h:403
uint32_t getClassification() const
Get classification bits set for this node.
Definition: ShaderNode.h:409
void setValue(ValuePtr value)
Set a value on this port.
Definition: ShaderNode.h:168
string _channels
Definition: ShaderNode.h:291
const string & getName() const
Return the name of this node.
Definition: ShaderNode.h:427
const string & getUnit() const
Return the unit type for the value on this port.
Definition: ShaderNode.h:183
void setUnit(const string &unit)
Set a unit type for the value on this port.
Definition: ShaderNode.h:180
static const string GEOMETRIC_GROUPNAME
Definition: ShaderNode.h:376
ImageBuf OIIO_API channels(const ImageBuf &src, int nchannels, cspan< int > channelorder, cspan< float > channelvalues={}, cspan< std::string > newchannelnames={}, bool shuffle_channel_names=false, int nthreads=0)
GLenum src
Definition: glcorearb.h:1793
bool isBindInput() const
Return the emitted state of this port.
Definition: ShaderNode.h:232
ShaderOutput * getConnection()
Definition: ShaderNode.h:267