diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index 3e221ae6a..9f1e842b1 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -299,8 +299,8 @@ void CaptureContext::LoadCaptureThreaded(const QString &captureFile, const QStri m_StructuredFile = &r->GetStructuredFile(); m_ResourceList = r->GetResources(); - for(ResourceDescription &res : m_ResourceList) - m_Resources[res.resourceId] = &res; + + CacheResources(); m_BufferList = r->GetBuffers(); for(BufferDescription &b : m_BufferList) @@ -375,6 +375,19 @@ void CaptureContext::LoadCaptureThreaded(const QString &captureFile, const QStri m_CaptureLoaded = true; } +void CaptureContext::CacheResources() +{ + m_Resources.clear(); + + std::sort(m_ResourceList.begin(), m_ResourceList.end(), + [this](const ResourceDescription &a, const ResourceDescription &b) { + return GetResourceName(&a) < GetResourceName(&b); + }); + + for(ResourceDescription &res : m_ResourceList) + m_Resources[res.resourceId] = &res; +} + bool CaptureContext::PassEquivalent(const DrawcallDescription &a, const DrawcallDescription &b) { // executing command lists can have children @@ -1194,19 +1207,24 @@ rdcstr CaptureContext::GetResourceName(ResourceId id) if(id == ResourceId()) return tr("No Resource"); - if(m_CustomNames.contains(id)) - return m_CustomNames[id]; - ResourceDescription *desc = GetResource(id); if(desc) - return desc->name; + return GetResourceName(desc); uint64_t num; memcpy(&num, &id, sizeof(num)); return tr("Unknown Resource %1").arg(num); } +rdcstr CaptureContext::GetResourceName(const ResourceDescription *desc) +{ + if(m_CustomNames.contains(desc->resourceId)) + return m_CustomNames[desc->resourceId]; + + return desc->name; +} + bool CaptureContext::IsAutogeneratedName(ResourceId id) { if(id == ResourceId()) @@ -1245,6 +1263,8 @@ void CaptureContext::SetResourceCustomName(ResourceId id, const rdcstr &name) m_CaptureMods |= CaptureModifications::Renames; m_MainWindow->captureModified(); + CacheResources(); + RefreshUIStatus({}, true, true); } diff --git a/qrenderdoc/Code/CaptureContext.h b/qrenderdoc/Code/CaptureContext.h index 9e306888a..859628f25 100644 --- a/qrenderdoc/Code/CaptureContext.h +++ b/qrenderdoc/Code/CaptureContext.h @@ -277,6 +277,9 @@ private: void SaveNotes(); void LoadNotes(const QString &data); + void CacheResources(); + rdcstr GetResourceName(const ResourceDescription *desc); + float m_LoadProgress = 0.0f; float m_PostloadProgress = 0.0f; float UpdateLoadProgress(); diff --git a/qrenderdoc/Windows/ResourceInspector.cpp b/qrenderdoc/Windows/ResourceInspector.cpp index 475817668..8b1792d30 100644 --- a/qrenderdoc/Windows/ResourceInspector.cpp +++ b/qrenderdoc/Windows/ResourceInspector.cpp @@ -113,8 +113,6 @@ ResourceInspector::ResourceInspector(ICaptureContext &ctx, QWidget *parent) m_FilterModel->setSourceModel(m_ResourceModel); m_FilterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); m_FilterModel->setFilterRole(FilterRole); - m_FilterModel->setSortCaseSensitivity(Qt::CaseInsensitive); - m_FilterModel->setSortRole(Qt::DisplayRole); ui->resourceList->setModel(m_FilterModel); @@ -166,7 +164,6 @@ void ResourceInspector::Inspect(ResourceId id) m_Entries.clear(); m_ResourceModel->reset(); - m_FilterModel->sort(0); if(m_Ctx.HasResourceCustomName(id)) ui->resetName->show(); @@ -282,7 +279,6 @@ void ResourceInspector::OnCaptureLoaded() ui->renameResource->setEnabled(true); m_ResourceModel->reset(); - m_FilterModel->sort(0); } void ResourceInspector::OnCaptureClosed() @@ -308,7 +304,6 @@ void ResourceInspector::OnEventChanged(uint32_t eventId) Inspect(m_Resource); m_ResourceModel->reset(); - m_FilterModel->sort(0); } void ResourceInspector::on_renameResource_clicked()