Loading...
Searching...
No Matches
dataSourceMaterialNetworkInterface.h
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 HD_DATA_SOURCE_MATERIAL_NETWORK_INTERFACE_H
8#define HD_DATA_SOURCE_MATERIAL_NETWORK_INTERFACE_H
9
10#include "pxr/usd/sdf/path.h"
11#include "pxr/imaging/hd/containerDataSourceEditor.h"
12#include "pxr/imaging/hd/materialNetworkInterface.h"
15#include "pxr/imaging/hd/schemaTypeDefs.h"
16#include <unordered_map>
17#include <unordered_set>
18
19PXR_NAMESPACE_OPEN_SCOPE
20
30{
31public:
32
34 const SdfPath &materialPrimPath,
35 const HdContainerDataSourceHandle &networkContainer,
36 const HdContainerDataSourceHandle &primContainer)
37 : _materialPrimPath(materialPrimPath)
38 , _networkSchema(networkContainer)
39 , _networkEditor(networkContainer)
40 , _primContainer(primContainer)
41 , _nodesSchema(nullptr)
42 , _lastAccessedNodeSchema(nullptr)
43 , _lastAccessedNodeParametersSchema(nullptr)
44 , _lastAccessedNodeConnectionsSchema(nullptr)
45 {}
46
47 HD_API
48 SdfPath GetMaterialPrimPath() const override {
49 return _materialPrimPath;
50 }
51
52 HD_API
53 std::string GetModelAssetName() const override;
54
55 HD_API
56 TfTokenVector GetNodeNames() const override;
57
58 HD_API
59 TfToken GetNodeType(const TfToken &nodeName) const override;
60
61 HD_API
62 TfTokenVector GetNodeTypeInfoKeys(const TfToken& nodeName) const override;
63 HD_API
64 VtValue GetNodeTypeInfoValue(
65 const TfToken& nodeName, const TfToken& value) const override;
66
67 HD_API
68 TfTokenVector GetAuthoredNodeParameterNames(
69 const TfToken &nodeName) const override;
70
71 HD_API
72 VtValue GetNodeParameterValue(
73 const TfToken &nodeName,
74 const TfToken &paramName) const override;
75
76 HD_API
77 HdMaterialNetworkInterface::NodeParamData GetNodeParameterData(
78 const TfToken &nodeName,
79 const TfToken &paramName) const override;
80
81 HD_API
82 TfTokenVector GetNodeInputConnectionNames(
83 const TfToken &nodeName) const override;
84
85 HD_API
86 InputConnectionVector GetNodeInputConnection(
87 const TfToken &nodeName,
88 const TfToken &inputName) const override;
89
90 HD_API
91 void DeleteNode(const TfToken &nodeName) override;
92
93 HD_API
94 void SetNodeType(
95 const TfToken &nodeName,
96 const TfToken &nodeType) override;
97
98 HD_API
99 void SetNodeParameterValue(
100 const TfToken &nodeName,
101 const TfToken &paramName,
102 const VtValue &value) override;
103
104 HD_API
105 void SetNodeParameterData(
106 const TfToken &nodeName,
107 const TfToken &paramName,
108 const NodeParamData &paramData) override;
109
110 HD_API
111 void DeleteNodeParameter(
112 const TfToken &nodeName,
113 const TfToken &paramName) override;
114
115 HD_API
116 void SetNodeInputConnection(
117 const TfToken &nodeName,
118 const TfToken &inputName,
119 const InputConnectionVector &connections) override;
120
121 HD_API
122 void DeleteNodeInputConnection(
123 const TfToken &nodeName,
124 const TfToken &inputName) override;
125
126 HD_API
128
129 HD_API
130 InputConnectionResult GetTerminalConnection(
131 const TfToken &terminalName) const override;
132
133 HD_API
134 void DeleteTerminal(
135 const TfToken &terminalName) override;
136
137 HD_API
138 void SetTerminalConnection(
139 const TfToken &terminalName,
140 const InputConnection &connection) override;
141
142 HD_API
143 HdContainerDataSourceHandle Finish();
144
145private:
146 HdContainerDataSourceHandle _GetNodeTypeInfo(
147 const TfToken& nodeName) const;
148
149 using _OverrideMap =
150 std::unordered_map<HdDataSourceLocator, HdDataSourceBaseHandle,
151 TfHash>;
152
153 using _TokenSet = std::unordered_set<TfToken, TfHash>;
154
155 void _SetOverride(
156 const HdDataSourceLocator &loc,
157 const HdDataSourceBaseHandle &ds);
158
159 SdfPath _materialPrimPath;
160 mutable HdMaterialNetworkSchema _networkSchema;
161 HdContainerDataSourceEditor _networkEditor;
162 HdContainerDataSourceHandle _primContainer;
163 _OverrideMap _existingOverrides;
164 _TokenSet _overriddenNodes;
165 _TokenSet _deletedNodes;
166 bool _terminalsOverridden = false;
167
168 // cache some common child containers to avoid repeated access
169 HdMaterialNodeSchema _ResetIfNecessaryAndGetNode(
170 const TfToken &nodeName) const;
172 const TfToken &nodeName) const;
174 const TfToken &nodeName) const;
175
176 mutable HdMaterialNodeContainerSchema _nodesSchema;
177
178
179 mutable TfToken _lastAccessedNodeName;
180
181
182 mutable HdMaterialNodeSchema _lastAccessedNodeSchema;
183 mutable HdMaterialNodeParameterContainerSchema _lastAccessedNodeParametersSchema;
184 mutable HdMaterialConnectionVectorContainerSchema _lastAccessedNodeConnectionsSchema;
185};
186
187PXR_NAMESPACE_CLOSE_SCOPE
188
189#endif // HD_DATA_SOURCE_MATERIAL_NETWORK_INTERFACE_H
Represents an object that can identify the location of a data source.
Implements HdMaterialNetworkInterface for reading from and overriding values within data sources.
HD_API TfTokenVector GetTerminalNames() const override
HD_API std::string GetModelAssetName() const override
Returns the nearest enclosing model asset name, as described by the model schema, or empty string if ...
HD_API TfTokenVector GetNodeTypeInfoKeys(const TfToken &nodeName) const override
Node type info is a collection of data related to the node type, often used to determine the node typ...
Abstract interface for querying and mutating a material network.
A path value used to locate objects in layers or scenegraphs.
Definition: path.h:274
A user-extensible hashing mechanism for use with runtime hash tables.
Definition: hash.h:460
This is a small-vector class with local storage optimization, the local storage can be specified via ...
Definition: smallVector.h:155
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:71
Provides a container which may hold any type, and provides introspection and iteration over array typ...
Definition: value.h:147
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:440