It is often very convenient to have a concept of an invalid object, to represent error conditions or invalid queries. An invalid HdSceneIndexPrim
seems to be one that has a null data source, as demonstrated here:
It appears that it is legal for the prim type to be empty for a valid prim, which is then a typeless prim. Only the dataSource data member determines an invalid prim, when it is null. Is this interpretation correct?
My uncertainty is based on the fact that a retained scene index uses an SdfPathTable to store prims:
And SdfPathTable inserts missing ancestors on inserting a prim:
However, inserted ancestors are inserted with the default mapped type:
which for HdSceneIndexPrim is a prim with a null data source.
Therefore, a retained scene index can return prims that have a null data source. Hopefully someone can explain what appears to me to be a discrepancy. Thanks for any help!
You’re correct that we do have typeless prims with data. I think sometimes we have typeless prims without data (but which have a path, and might later get data), and currently those are represented by a null datasource; I don’t think that’s semantically a problem, although it requires a null check before you refer to the datasource. Does that all make sense?
I guess if we wanted an invalid value with a null datasource, we could have the default constructor refer to a static empty container datasource.