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;
74 const TfToken &nodeName)
const override;
79 const TfToken ¶mName)
const override;
82 HdMaterialNetworkInterface::NodeParamData GetNodeParameterData(
84 const TfToken ¶mName)
const override;
88 const TfToken &nodeName)
const override;
93 const TfToken &inputName)
const override;
96 void DeleteNode(
const TfToken &nodeName)
override;
104 const TfToken &nodeType)
override;
107 void SetNodeTypeInfoValue(
110 const VtValue &value)
override;
113 void SetNodeParameterValue(
116 const VtValue &value)
override;
119 void SetNodeParameterData(
122 const NodeParamData ¶mData)
override;
125 void DeleteNodeParameter(
127 const TfToken ¶mName)
override;
130 void SetNodeInputConnection(
136 void DeleteNodeInputConnection(
138 const TfToken &inputName)
override;
144 InputConnectionResult GetTerminalConnection(
145 const TfToken &terminalName)
const override;
149 const TfToken &terminalName)
override;
152 void SetTerminalConnection(
154 const InputConnection &connection)
override;
157 HdContainerDataSourceHandle Finish();
164 HdContainerDataSourceHandle _GetOriginalNodeTypeInfo(
165 const TfToken& nodeName)
const;
169 HdContainerDataSourceHandle _GetNodeTypeInfo(
170 const TfToken& nodeName)
const;
176 using _HdContainerDataSourceEditorSharedPtr =
177 std::shared_ptr<class HdContainerDataSourceEditor>;
179 using _NodeTypeInfoMap =
180 std::unordered_map<
TfToken, _HdContainerDataSourceEditorSharedPtr,
183 using _TokenSet = std::unordered_set<TfToken, TfHash>;
187 const HdDataSourceBaseHandle &ds);
191 HdContainerDataSourceEditor _networkEditor;
192 _NodeTypeInfoMap _nodeTypeInfoOverrides;
193 HdContainerDataSourceHandle _primContainer;
194 _OverrideMap _existingOverrides;
195 _TokenSet _overriddenNodes;
196 _TokenSet _deletedNodes;
197 bool _terminalsOverridden =
false;
201 const TfToken &nodeName)
const;
203 const TfToken &nodeName)
const;
205 const TfToken &nodeName)
const;
210 mutable TfToken _lastAccessedNodeName;
218PXR_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 GetMaterialConfigKeys() const override
Material config is a collection of data related to the entire material, e.g.
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 void SetNodeType(const TfToken &nodeName, const TfToken &nodeType) override
Set the nodeType for the shader node with the given nodeName.
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.
The MaterialNetwork schema is a container schema that defines a material for a specific render contex...
The MaterialNode schema is a container schema that defines a particular node in 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...
Functor to use for hash maps from tokens to other things.
std::vector< TfToken > TfTokenVector
Convenience types.