diff --git a/renderdoc/api/replay/structured_data.h b/renderdoc/api/replay/structured_data.h index bd34585d4..1a0e9960a 100644 --- a/renderdoc/api/replay/structured_data.h +++ b/renderdoc/api/replay/structured_data.h @@ -920,6 +920,12 @@ private: SDObject *m_Parent = NULL; mutable LazyArrayData *m_Lazy = NULL; + // object serialisers need to be able to set the parent pointer. This is only for proxying really + template + friend void DoSerialise(SerialiserType &ser, SDObject &el); + template + friend void DoSerialise(SerialiserType &ser, SDChunk &el); + void DeleteLazyGenerator() const { if(m_Lazy) diff --git a/renderdoc/serialise/serialiser.cpp b/renderdoc/serialise/serialiser.cpp index 10e5be8a8..030eac48c 100644 --- a/renderdoc/serialise/serialiser.cpp +++ b/renderdoc/serialise/serialiser.cpp @@ -718,6 +718,12 @@ void DoSerialise(SerialiserType &ser, SDObject &el) SERIALISE_MEMBER(name); SERIALISE_MEMBER(type); SERIALISE_MEMBER(data); + + if(ser.IsReading()) + { + for(size_t i = 0; i < el.NumChildren(); i++) + el.GetChild(i)->m_Parent = ⪙ + } } template @@ -727,6 +733,12 @@ void DoSerialise(SerialiserType &ser, SDChunk &el) SERIALISE_MEMBER(type); SERIALISE_MEMBER(data); SERIALISE_MEMBER(metadata); + + if(ser.IsReading()) + { + for(size_t i = 0; i < el.NumChildren(); i++) + el.GetChild(i)->m_Parent = ⪙ + } } INSTANTIATE_SERIALISE_TYPE(SDChunk);