} else if (UsdLuxLightFilter lightFilter =
UsdLuxLightFilter(_shaderNode.GetPrim())) {
nodeId = lightFilter.GetShaderId({});
-
} else if (UsdLuxLightAPI light =
UsdLuxLightAPI(_shaderNode.GetPrim())) {
nodeId = light.GetShaderId({});
+ } else if (UsdShadeNodeGraph nodegraph =
+ UsdShadeNodeGraph(_shaderNode.GetPrim())) {
+ nodeId = TfToken();
}
-
_shaderNode.GetShaderId(&nodeId);
return HdRetainedTypedSampledDataSource<TfToken>::New(nodeId);
}
return nullptr;
}
+
if (name == HdMaterialNodeSchemaTokens->nodeTypeInfo) {
if (_shaderNode.GetImplementationSource() != UsdShadeTokens->id) {
return _UsdImagingNodeTypeInfoSource::New(
materialPrefix);
}
}
-
}
static
const SdfPath &sceneIndexPath,
const HdDataSourceLocator &locatorPrefix)
{
-
_TokenDataSourceMap nodeDataSources;
_WalkGraph(terminalNode,
&nodeDataSources,
}
+static
+UsdShadeConnectableAPI
+_ComputeOutputSource(
+ const UsdShadeMaterial &usdMat,
+ const TfToken &outputName,
+ const TfTokenVector &renderContext,
+ UsdShadeConnectionSourceInfo sourceInfo)
+{
+ if (outputName == UsdShadeTokens->surface) {
+ return UsdShadeConnectableAPI(usdMat.ComputeSurfaceSource(
+ renderContext, &sourceInfo.sourceName, &sourceInfo.sourceType));
+ }
+ if (outputName == UsdShadeTokens->displacement) {
+ return UsdShadeConnectableAPI(usdMat.ComputeDisplacementSource(
+ renderContext, &sourceInfo.sourceName, &sourceInfo.sourceType));
+ }
+ if (outputName == UsdShadeTokens->volume) {
+ return UsdShadeConnectableAPI(usdMat.ComputeVolumeSource(
+ renderContext, &sourceInfo.sourceName, &sourceInfo.sourceType));
+ }
+ return UsdShadeConnectableAPI(sourceInfo.source.GetPrim());
+}
+
static
HdDataSourceBaseHandle
_BuildMaterial(
continue;
}
- UsdShadeConnectableAPI upstreamShader(sourceInfo.source.GetPrim());
+ UsdShadeConnectableAPI upstreamShader = _ComputeOutputSource(
+ UsdShadeMaterial(usdMat), outputName, {context}, sourceInfo);
_WalkGraph(upstreamShader,
&nodeDataSources,
: UsdImagingRepresentedByAncestorPrimAdapter() {}
};
+/// \class UsdImagingNodeGraphAdapter
+/// \brief Delegates invalidation responsibility of a Noge Graph prim to an
+/// ancestor Material prim
+class UsdImagingNodeGraphAdapter :
+ public UsdImagingRepresentedByAncestorPrimAdapter
+{
+public:
+ using BaseAdapter = UsdImagingRepresentedByAncestorPrimAdapter;
+
+ UsdImagingNodeGraphAdapter()
+ : UsdImagingRepresentedByAncestorPrimAdapter() {}
+};
+
PXR_NAMESPACE_CLOSE_SCOPE
#endif // PXR_USD_IMAGING_USD_IMAGING_MATERIAL_ADAPTER_H