88#include " pxr/imaging/hd/api.h"
99#include " pxr/imaging/hd/filteringSceneIndex.h"
1010#include " pxr/imaging/hd/mergingSceneIndex.h"
11+ #include " pxr/imaging/hd/retainedDataSource.h"
1112#include " pxr/imaging/hd/retainedSceneIndex.h"
1213
1314#include " pxr/base/tf/declarePtrs.h"
1415
1516#include < iostream>
1617
17- template <typename T>
18- bool
19- _CompareValue (const char * msg, const T& v1, const T& v2)
20- {
21- if (v1 == v2) {
22- std::cout << msg << " matches." << std::endl;
23- }
24- else {
25- std::cerr << msg << " doesn't match. Expecting " << v2 << " got " << v1
26- << std::endl;
27- return false ;
28- }
29- return true ;
30- }
18+ PXR_NAMESPACE_USING_DIRECTIVE
3119
3220TF_DECLARE_REF_PTRS (_MySceneIndex);
3321
@@ -53,6 +41,21 @@ operator<<(std::ostream& out, const std::vector<T>& v)
5341 return out;
5442}
5543
44+ template <typename T>
45+ bool
46+ _CompareValue (const char * msg, const T& v1, const T& v2)
47+ {
48+ if (v1 == v2) {
49+ std::cout << msg << " matches." << std::endl;
50+ }
51+ else {
52+ std::cerr << msg << " doesn't match. Expecting " << v2 << " got " << v1
53+ << std::endl;
54+ return false ;
55+ }
56+ return true ;
57+ }
58+
5659class _MySceneIndex final : public HdSingleInputFilteringSceneIndexBase
5760{
5861public:
@@ -225,6 +228,47 @@ _TestNoticesAfterRemove()
225228 });
226229}
227230
231+ static bool
232+ _TestRemoveInputScenes ()
233+ {
234+ const TfToken primType (" PrimType" );
235+ auto dataSource = HdRetainedContainerDataSource::New ();
236+
237+ HdRetainedSceneIndexRefPtr siA = HdRetainedSceneIndex::New ();
238+ siA->AddPrims ({ { SdfPath (" /A/B/C/D/E/F" ), primType, dataSource },
239+ { SdfPath (" /A/B/C/D2" ), primType, dataSource } });
240+
241+ HdRetainedSceneIndexRefPtr siB = HdRetainedSceneIndex::New ();
242+ siB->AddPrims ({ { SdfPath (" /A/B/C/D" ), primType, dataSource } });
243+
244+ HdRetainedSceneIndexRefPtr siC = HdRetainedSceneIndex::New ();
245+ siC->AddPrims ({ { SdfPath (" /A/B/C" ), primType, dataSource } });
246+
247+ HdMergingSceneIndexRefPtr mergingSceneIndex = HdMergingSceneIndex::New ();
248+ mergingSceneIndex->AddInputScene (siA, SdfPath (" /A/B" ));
249+ mergingSceneIndex->AddInputScene (siB, SdfPath (" /A/B/C" ));
250+ mergingSceneIndex->AddInputScene (siC, SdfPath::AbsoluteRootPath ());
251+
252+ _Logger logger;
253+ mergingSceneIndex->AddObserver (HdSceneIndexObserverPtr (&logger));
254+
255+ mergingSceneIndex->RemoveInputScenes ({siA, siB});
256+
257+ auto logEntries = logger.GetLog ();
258+
259+ return _CompareValue (
260+ " NOTICES" , logEntries,
261+ {
262+ _LogEntry (" remove" , " /A/B/C/D/E" ),
263+ _LogEntry (" remove" , " /A/B/C/D2" ),
264+ _LogEntry (" add" , " /A/B" ),
265+ _LogEntry (" add" , " /A/B/C" ),
266+ _LogEntry (" add" , " /A/B/C/D" ),
267+ _LogEntry (" remove" , " /A/B/C/D" ),
268+ _LogEntry (" add" , " /A/B/C" ),
269+ });
270+ }
271+
228272#define xstr (s ) str(s)
229273#define str (s ) #s
230274#define TEST (X ) \
@@ -244,6 +288,7 @@ main(int argc, char** argv)
244288
245289 int i = 0 ;
246290 TEST (_TestNoticesAfterRemove);
291+ TEST (_TestRemoveInputScenes);
247292
248293 // -------------------------------------------------------------------------
249294 std::cout << " DONE testHdMergingSceneIndex" << std::endl;
0 commit comments