From 6b67a6c13ba6e242d542087d4cf3d3785aac9d88 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 28 Oct 2020 11:56:38 +0000 Subject: [PATCH] Fix proxy serialisation of SDObject to set parent pointer correctly --- renderdoc/api/replay/structured_data.h | 6 ++++++ renderdoc/serialise/serialiser.cpp | 12 ++++++++++++ 2 files changed, 18 insertions(+) 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);