7#ifndef HD_DATA_SOURCE_MATERIAL_NETWORK_INTERFACE_H
8#define HD_DATA_SOURCE_MATERIAL_NETWORK_INTERFACE_H
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>
19PXR_NAMESPACE_OPEN_SCOPE
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)
48 SdfPath GetMaterialPrimPath()
const override {
49 return _materialPrimPath;
69 const TfToken &nodeName)
const override;
74 const TfToken ¶mName)
const override;
77 HdMaterialNetworkInterface::NodeParamData GetNodeParameterData(
79 const TfToken ¶mName)
const override;
83 const TfToken &nodeName)
const override;
88 const TfToken &inputName)
const override;
91 void DeleteNode(
const TfToken &nodeName)
override;
96 const TfToken &nodeType)
override;
99 void SetNodeParameterValue(
102 const VtValue &value)
override;
105 void SetNodeParameterData(
108 const NodeParamData ¶mData)
override;
111 void DeleteNodeParameter(
113 const TfToken ¶mName)
override;
116 void SetNodeInputConnection(
122 void DeleteNodeInputConnection(
124 const TfToken &inputName)
override;
130 InputConnectionResult GetTerminalConnection(
131 const TfToken &terminalName)
const override;
135 const TfToken &terminalName)
override;
138 void SetTerminalConnection(
140 const InputConnection &connection)
override;
143 HdContainerDataSourceHandle Finish();
146 HdContainerDataSourceHandle _GetNodeTypeInfo(
147 const TfToken& nodeName)
const;
153 using _TokenSet = std::unordered_set<TfToken, TfHash>;
157 const HdDataSourceBaseHandle &ds);
160 mutable HdMaterialNetworkSchema _networkSchema;
161 HdContainerDataSourceEditor _networkEditor;
162 HdContainerDataSourceHandle _primContainer;
163 _OverrideMap _existingOverrides;
164 _TokenSet _overriddenNodes;
165 _TokenSet _deletedNodes;
166 bool _terminalsOverridden =
false;
169 HdMaterialNodeSchema _ResetIfNecessaryAndGetNode(
170 const TfToken &nodeName)
const;
172 const TfToken &nodeName)
const;
174 const TfToken &nodeName)
const;
179 mutable TfToken _lastAccessedNodeName;
182 mutable HdMaterialNodeSchema _lastAccessedNodeSchema;
187PXR_NAMESPACE_CLOSE_SCOPE
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.
A user-extensible hashing mechanism for use with runtime hash tables.
This is a small-vector class with local storage optimization, the local storage can be specified via ...
Token for efficient comparison, assignment, and hashing of known strings.
Provides a container which may hold any type, and provides introspection and iteration over array typ...
std::vector< TfToken > TfTokenVector
Convenience types.