7#ifndef PXR_IMAGING_HDSI_MATERIAL_OVERRIDE_RESOLVING_SCENE_INDEX_H
8#define PXR_IMAGING_HDSI_MATERIAL_OVERRIDE_RESOLVING_SCENE_INDEX_H
11#include "pxr/imaging/hd/filteringSceneIndex.h"
14#include "pxr/imaging/hdsi/api.h"
17#include <unordered_map>
18#include <unordered_set>
20PXR_NAMESPACE_OPEN_SCOPE
22using PathSet = std::unordered_set<SdfPath, SdfPath::Hash>;
176class HdsiMaterialOverrideResolvingSceneIndex final :
184 using PrimDataMap = std::unordered_map<SdfPath, PrimData, SdfPath::Hash>;
185 using MaterialPathsMap = std::unordered_map<SdfPath, PathSet, SdfPath::Hash>;
186 using MaterialDataMap = std::unordered_map<
SdfPath, MaterialData,
188 using HashToMaterialPathMap = std::unordered_map<uint64_t, SdfPath>;
189 using MaterialHashMap = std::unordered_map<
SdfPath, HashToMaterialPathMap,
193 static HdsiMaterialOverrideResolvingSceneIndexRefPtr New(
194 const HdSceneIndexBaseRefPtr &inputScene)
196 return TfCreateRefPtr(
197 new HdsiMaterialOverrideResolvingSceneIndex(inputScene));
210 HdsiMaterialOverrideResolvingSceneIndex(
211 const HdSceneIndexBaseRefPtr &inputScene);
230 const SdfPath& primPath)
const;
271 void _DirtyBaseMaterial(
273 const PathSet& generatedMaterials,
274 PathSet* dirtiedPaths)
const;
290 const HdSceneIndexBaseRefPtr inputScene,
291 const PrimData& primData,
292 PathSet* processedPrimsSet,
294 PathSet* dirtiedPaths,
295 PathSet* removedPaths);
304 void _DirtyMaterialOverrideLocator(
306 const HdSceneIndexBaseRefPtr inputScene,
308 PathSet* dirtiedPaths);
312 PathSet _GetGeneratedMaterials(
const SdfPath& primPath)
const;
316 bool _IsGeneratedMaterial(
const SdfPath& primPath)
const;
320 void _CreateGeneratedMaterialDataSource(
322 const SdfPath& primPath)
const;
329 void _InvalidateMaps(
const SdfPath& primPath);
351 uint64_t materialOverrideHash;
357 MaterialPathsMap _scopeToNewMaterialPaths;
360 MaterialPathsMap _oldToNewMaterialPaths;
366 PrimDataMap _primData;
370 MaterialDataMap _materialData;
382 MaterialHashMap _materialHashMap;
385PXR_NAMESPACE_CLOSE_SCOPE
The MaterialOverride schema allows overrides to be made to various parts of materials,...
Abstract interface to scene data.
virtual SdfPathVector GetChildPrimPaths(const SdfPath &primPath) const =0
Returns the paths of all scene index prims located immediately below primPath.
virtual HdSceneIndexPrim GetPrim(const SdfPath &primPath) const =0
Returns a pair of (prim type, datasource).
A path value used to locate objects in layers or scenegraphs.
Token for efficient comparison, assignment, and hashing of known strings.
Standard pointer typedefs.
#define TF_DECLARE_WEAK_AND_REF_PTRS(type)
Define standard weak, ref, and vector pointer types.
A notice indicating a prim was invalidated.
Small struct representing a 'prim' in the Hydra scene index.