mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-12 21:10:42 +00:00
Make sure resource records are deleted as most specific type
* Don't need to use a virtual destructor as the information is already in the templated resource manager
This commit is contained in:
@@ -95,7 +95,7 @@ void ResourceRecord::Delete(ResourceRecordHandler *mgr)
|
||||
if(ResID != ResourceId())
|
||||
mgr->RemoveResourceRecord(ResID);
|
||||
|
||||
delete this;
|
||||
mgr->DestroyResourceRecord(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -61,6 +61,8 @@ namespace ResourceIDGen
|
||||
void SetReplayResourceIDs();
|
||||
};
|
||||
|
||||
struct ResourceRecord;
|
||||
|
||||
class ResourceRecordHandler
|
||||
{
|
||||
public:
|
||||
@@ -68,6 +70,7 @@ class ResourceRecordHandler
|
||||
virtual void MarkPendingDirty(ResourceId id) = 0;
|
||||
virtual void RemoveResourceRecord(ResourceId id) = 0;
|
||||
virtual void MarkResourceFrameReferenced(ResourceId id, FrameRefType refType) = 0;
|
||||
virtual void DestroyResourceRecord(ResourceRecord *record) = 0;
|
||||
};
|
||||
|
||||
// This is a generic resource record, that APIs can inherit from and use.
|
||||
@@ -324,6 +327,7 @@ class ResourceManager : public ResourceRecordHandler
|
||||
bool HasResourceRecord(ResourceId id);
|
||||
RecordType *AddResourceRecord(ResourceId id);
|
||||
inline void RemoveResourceRecord(ResourceId id);
|
||||
void DestroyResourceRecord(ResourceRecord *record);
|
||||
|
||||
// while capturing or replaying, resources and their live IDs
|
||||
void AddCurrentResource(ResourceId id, WrappedResourceType res);
|
||||
@@ -1096,6 +1100,12 @@ void ResourceManager<WrappedResourceType, RealResourceType, RecordType>::RemoveR
|
||||
m_ResourceRecords.erase(id);
|
||||
}
|
||||
|
||||
template<typename WrappedResourceType, typename RealResourceType, typename RecordType>
|
||||
void ResourceManager<WrappedResourceType, RealResourceType, RecordType>::DestroyResourceRecord(ResourceRecord *record)
|
||||
{
|
||||
delete (RecordType *)record;
|
||||
}
|
||||
|
||||
template<typename WrappedResourceType, typename RealResourceType, typename RecordType>
|
||||
bool ResourceManager<WrappedResourceType, RealResourceType, RecordType>::AddWrapper(WrappedResourceType wrap, RealResourceType real)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user