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;
264 void _DirtyBaseMaterial(
266 const PathSet& generatedMaterials,
267 PathSet* dirtiedPaths)
const;
283 const HdSceneIndexBaseRefPtr inputScene,
284 const PrimData& primData,
285 PathSet* processedPrimsSet,
287 PathSet* dirtiedPaths,
288 PathSet* removedPaths);
297 void _DirtyMaterialOverrideLocator(
299 const HdSceneIndexBaseRefPtr inputScene,
301 PathSet* dirtiedPaths);
305 PathSet _GetGeneratedMaterials(
const SdfPath& primPath)
const;
309 bool _IsGeneratedMaterial(
const SdfPath& primPath)
const;
313 void _CreateGeneratedMaterialDataSource(
315 const SdfPath& primPath)
const;
322 void _InvalidateMaps(
const SdfPath& primPath);
344 uint64_t materialOverrideHash;
350 MaterialPathsMap _scopeToNewMaterialPaths;
353 MaterialPathsMap _oldToNewMaterialPaths;
359 PrimDataMap _primData;
363 MaterialDataMap _materialData;
375 MaterialHashMap _materialHashMap;
378PXR_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.