24#ifndef HD_DATA_SOURCE_MATERIAL_NETWORK_INTERFACE_H
25#define HD_DATA_SOURCE_MATERIAL_NETWORK_INTERFACE_H
27#include "pxr/usd/sdf/path.h"
28#include "pxr/imaging/hd/containerDataSourceEditor.h"
29#include "pxr/imaging/hd/materialNetworkInterface.h"
32#include "pxr/imaging/hd/schemaTypeDefs.h"
33#include <unordered_map>
34#include <unordered_set>
36PXR_NAMESPACE_OPEN_SCOPE
51 const SdfPath &materialPrimPath,
52 const HdContainerDataSourceHandle &networkContainer,
53 const HdContainerDataSourceHandle &primContainer)
54 : _materialPrimPath(materialPrimPath)
55 , _networkSchema(networkContainer)
56 , _networkEditor(networkContainer)
57 , _primContainer(primContainer)
58 , _nodesSchema(
nullptr)
59 , _lastAccessedNodeSchema(
nullptr)
60 , _lastAccessedNodeParametersSchema(
nullptr)
61 , _lastAccessedNodeConnectionsSchema(
nullptr)
65 SdfPath GetMaterialPrimPath()
const override {
66 return _materialPrimPath;
86 const TfToken &nodeName)
const override;
91 const TfToken ¶mName)
const override;
94 HdMaterialNetworkInterface::NodeParamData GetNodeParameterData(
96 const TfToken ¶mName)
const override;
100 const TfToken &nodeName)
const override;
105 const TfToken &inputName)
const override;
108 void DeleteNode(
const TfToken &nodeName)
override;
113 const TfToken &nodeType)
override;
116 void SetNodeParameterValue(
119 const VtValue &value)
override;
122 void SetNodeParameterData(
125 const NodeParamData ¶mData)
override;
128 void DeleteNodeParameter(
130 const TfToken ¶mName)
override;
133 void SetNodeInputConnection(
139 void DeleteNodeInputConnection(
141 const TfToken &inputName)
override;
147 InputConnectionResult GetTerminalConnection(
148 const TfToken &terminalName)
const override;
152 const TfToken &terminalName)
override;
155 void SetTerminalConnection(
157 const InputConnection &connection)
override;
160 HdContainerDataSourceHandle Finish();
163 HdContainerDataSourceHandle _GetNodeTypeInfo(
164 const TfToken& nodeName)
const;
170 using _TokenSet = std::unordered_set<TfToken, TfHash>;
174 const HdDataSourceBaseHandle &ds);
177 mutable HdMaterialNetworkSchema _networkSchema;
178 HdContainerDataSourceEditor _networkEditor;
179 HdContainerDataSourceHandle _primContainer;
180 _OverrideMap _existingOverrides;
181 _TokenSet _overriddenNodes;
182 _TokenSet _deletedNodes;
183 bool _terminalsOverridden =
false;
186 HdMaterialNodeSchema _ResetIfNecessaryAndGetNode(
187 const TfToken &nodeName)
const;
189 const TfToken &nodeName)
const;
191 const TfToken &nodeName)
const;
196 mutable TfToken _lastAccessedNodeName;
199 mutable HdMaterialNodeSchema _lastAccessedNodeSchema;
204PXR_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.