HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
materialNetworkInterface.h
Go to the documentation of this file.
1 //
2 // Copyright 2021 Pixar
3 //
4 // Licensed under the terms set forth in the LICENSE.txt file available at
5 // https://openusd.org/license.
6 //
7 #ifndef PXR_IMAGING_HD_MATERIAL_NETWORK_INTERFACE_H
8 #define PXR_IMAGING_HD_MATERIAL_NETWORK_INTERFACE_H
9 
10 #include "pxr/pxr.h"
11 #include "pxr/usd/sdf/path.h"
12 #include "pxr/base/vt/value.h"
14 #include "pxr/base/tf/token.h"
15 
17 
18 /// \class HdMaterialNetworkInterface
19 ///
20 /// Abstract interface for querying and mutating a material network.
21 ///
22 /// This is useful for implementing matfilt functions which can be reused
23 /// by future scene index implementations.
24 ///
25 /// NOTE: Subclasses make no guarantee of thread-safety even for the const
26 /// accessors as they might make use of internal caching for optimization.
27 /// Should you want to read from a material from multiple threads, create
28 /// a thread-specific interface instance. The non-const methods should
29 /// never be considered thread-safe from multiple interface instances
30 /// backed from the same concrete data.
32 {
33 public:
34  virtual ~HdMaterialNetworkInterface() = default;
35 
36  virtual SdfPath GetMaterialPrimPath() const = 0;
37 
38  /// Material config is a collection of data related to the entire material,
39  /// e.g. material definition version, etc.
40  ///
41  /// Similarly to GetNodeTypeInfoXXX() below, only getters are provided, as
42  /// we don't intend to mutate this config data.
43  virtual TfTokenVector GetMaterialConfigKeys() const = 0;
44  virtual VtValue GetMaterialConfigValue(const TfToken& key) const = 0;
45 
46  /// Returns the nearest enclosing model asset name, as described by
47  /// the model schema, or empty string if none is available.
48  virtual std::string GetModelAssetName() const = 0;
49 
50  virtual TfTokenVector GetNodeNames() const = 0;
51  virtual TfToken GetNodeType(const TfToken &nodeName) const = 0;
52 
53  /// Node type info is a collection of data related to the node type, often
54  /// used to determine the node type.
55  ///
56  virtual TfTokenVector
57  GetNodeTypeInfoKeys(const TfToken& nodeName) const = 0;
58  virtual VtValue
59  GetNodeTypeInfoValue(const TfToken& nodeName, const TfToken& key) const = 0;
60 
62  const TfToken &nodeName) const = 0;
63 
65  const TfToken &nodeName,
66  const TfToken &paramName) const = 0;
67 
69  {
73  };
74 
76  const TfToken &nodeName,
77  const TfToken &paramName) const = 0;
78 
80  const TfToken &nodeName) const = 0;
81 
83  {
86  };
88 
90  const TfToken &nodeName,
91  const TfToken &inputName) const = 0;
92 
93  virtual void DeleteNode(const TfToken &nodeName) = 0;
94 
95  virtual void SetNodeType(
96  const TfToken &nodeName,
97  const TfToken &nodeType) = 0;
98 
99  virtual void SetNodeTypeInfoValue(
100  const TfToken &nodeName,
101  const TfToken &key,
102  const VtValue &value
103  ) = 0;
104 
105  virtual void SetNodeParameterValue(
106  const TfToken &nodeName,
107  const TfToken &paramName,
108  const VtValue &value) = 0;
109 
110  virtual void SetNodeParameterData(
111  const TfToken &nodeName,
112  const TfToken &paramName,
113  const NodeParamData &paramData) = 0;
114 
115  virtual void DeleteNodeParameter(
116  const TfToken &nodeName,
117  const TfToken &paramName) = 0;
118 
119  virtual void SetNodeInputConnection(
120  const TfToken &nodeName,
121  const TfToken &inputName,
122  const InputConnectionVector &connections) = 0;
123 
124  virtual void DeleteNodeInputConnection(
125  const TfToken &nodeName,
126  const TfToken &inputName) = 0;
127 
128  /// ------------------------------------------------------------------------
129  /// Terminal query & mutation
130  virtual TfTokenVector GetTerminalNames() const = 0;
131 
132  using InputConnectionResult = std::pair<bool, InputConnection>;
134  const TfToken &terminalName) const = 0;
135 
136  virtual void DeleteTerminal(
137  const TfToken &terminalName) = 0;
138 
139  virtual void SetTerminalConnection(
140  const TfToken &terminalName,
141  const InputConnection &connection) = 0;
142 };
143 
144 
146 
147 #endif // PXR_IMAGING_HD_MATERIAL_NETWORK_INTERFACE_H
virtual std::string GetModelAssetName() const =0
virtual NodeParamData GetNodeParameterData(const TfToken &nodeName, const TfToken &paramName) const =0
virtual InputConnectionVector GetNodeInputConnection(const TfToken &nodeName, const TfToken &inputName) const =0
virtual TfTokenVector GetTerminalNames() const =0
virtual VtValue GetMaterialConfigValue(const TfToken &key) const =0
GLsizei const GLfloat * value
Definition: glcorearb.h:824
virtual TfTokenVector GetNodeTypeInfoKeys(const TfToken &nodeName) const =0
virtual void DeleteNodeInputConnection(const TfToken &nodeName, const TfToken &inputName)=0
virtual void SetNodeParameterValue(const TfToken &nodeName, const TfToken &paramName, const VtValue &value)=0
virtual void SetNodeType(const TfToken &nodeName, const TfToken &nodeType)=0
virtual void SetTerminalConnection(const TfToken &terminalName, const InputConnection &connection)=0
virtual VtValue GetNodeTypeInfoValue(const TfToken &nodeName, const TfToken &key) const =0
Definition: token.h:70
virtual TfTokenVector GetMaterialConfigKeys() const =0
virtual ~HdMaterialNetworkInterface()=default
virtual SdfPath GetMaterialPrimPath() const =0
virtual TfTokenVector GetNodeNames() const =0
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:440
Definition: path.h:273
virtual void SetNodeInputConnection(const TfToken &nodeName, const TfToken &inputName, const InputConnectionVector &connections)=0
virtual void SetNodeParameterData(const TfToken &nodeName, const TfToken &paramName, const NodeParamData &paramData)=0
virtual TfToken GetNodeType(const TfToken &nodeName) const =0
virtual void DeleteNode(const TfToken &nodeName)=0
virtual void DeleteNodeParameter(const TfToken &nodeName, const TfToken &paramName)=0
virtual TfTokenVector GetAuthoredNodeParameterNames(const TfToken &nodeName) const =0
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition: path.h:1425
virtual TfTokenVector GetNodeInputConnectionNames(const TfToken &nodeName) const =0
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
virtual VtValue GetNodeParameterValue(const TfToken &nodeName, const TfToken &paramName) const =0
virtual void DeleteTerminal(const TfToken &terminalName)=0
virtual InputConnectionResult GetTerminalConnection(const TfToken &terminalName) const =0
std::pair< bool, InputConnection > InputConnectionResult
Definition: value.h:146
virtual void SetNodeTypeInfoValue(const TfToken &nodeName, const TfToken &key, const VtValue &value)=0