mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 09:00:44 +00:00
Mark edited resources with an (Edited) suffix on their names
This commit is contained in:
@@ -989,11 +989,13 @@ void CaptureContext::LoadCaptureThreaded(const QString &captureFile, const Repla
|
||||
|
||||
void CaptureContext::CacheResources()
|
||||
{
|
||||
m_CustomNameCachedID++;
|
||||
|
||||
m_Resources.clear();
|
||||
|
||||
std::sort(m_ResourceList.begin(), m_ResourceList.end(),
|
||||
[this](const ResourceDescription &a, const ResourceDescription &b) {
|
||||
return GetResourceName(&a) < GetResourceName(&b);
|
||||
return GetResourceNameUnsuffixed(&a) < GetResourceNameUnsuffixed(&b);
|
||||
});
|
||||
|
||||
for(ResourceDescription &res : m_ResourceList)
|
||||
@@ -1453,6 +1455,24 @@ void CaptureContext::SetRemoteHost(int hostIdx)
|
||||
m_MainWindow->setRemoteHost(hostIdx);
|
||||
}
|
||||
|
||||
void CaptureContext::RegisterReplacement(ResourceId id)
|
||||
{
|
||||
m_ReplacedResources.push_back(id);
|
||||
|
||||
CacheResources();
|
||||
|
||||
RefreshUIStatus({}, true, true);
|
||||
}
|
||||
|
||||
void CaptureContext::UnregisterReplacement(ResourceId id)
|
||||
{
|
||||
m_ReplacedResources.removeOne(id);
|
||||
|
||||
CacheResources();
|
||||
|
||||
RefreshUIStatus({}, true, true);
|
||||
}
|
||||
|
||||
void CaptureContext::RefreshUIStatus(const rdcarray<ICaptureViewer *> &exclude,
|
||||
bool updateSelectedEvent, bool updateEvent)
|
||||
{
|
||||
@@ -1754,7 +1774,7 @@ bool CaptureContext::OpenRGPProfile(const rdcstr &filename)
|
||||
return true;
|
||||
}
|
||||
|
||||
rdcstr CaptureContext::GetResourceName(ResourceId id)
|
||||
rdcstr CaptureContext::GetResourceNameUnsuffixed(ResourceId id)
|
||||
{
|
||||
if(id == ResourceId())
|
||||
return tr("No Resource");
|
||||
@@ -1762,14 +1782,14 @@ rdcstr CaptureContext::GetResourceName(ResourceId id)
|
||||
ResourceDescription *desc = GetResource(id);
|
||||
|
||||
if(desc)
|
||||
return GetResourceName(desc);
|
||||
return GetResourceNameUnsuffixed(desc);
|
||||
|
||||
uint64_t num;
|
||||
memcpy(&num, &id, sizeof(num));
|
||||
return tr("Unknown Resource %1").arg(num);
|
||||
}
|
||||
|
||||
rdcstr CaptureContext::GetResourceName(const ResourceDescription *desc)
|
||||
rdcstr CaptureContext::GetResourceNameUnsuffixed(const ResourceDescription *desc)
|
||||
{
|
||||
if(m_CustomNames.contains(desc->resourceId))
|
||||
return m_CustomNames[desc->resourceId];
|
||||
@@ -1777,6 +1797,16 @@ rdcstr CaptureContext::GetResourceName(const ResourceDescription *desc)
|
||||
return desc->name;
|
||||
}
|
||||
|
||||
rdcstr CaptureContext::GetResourceName(ResourceId id)
|
||||
{
|
||||
rdcstr ret = GetResourceNameUnsuffixed(id);
|
||||
|
||||
if(m_ReplacedResources.contains(id))
|
||||
ret += tr(" (Edited)");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool CaptureContext::IsAutogeneratedName(ResourceId id)
|
||||
{
|
||||
if(id == ResourceId())
|
||||
@@ -1810,8 +1840,6 @@ void CaptureContext::SetResourceCustomName(ResourceId id, const rdcstr &name)
|
||||
m_CustomNames[id] = name;
|
||||
}
|
||||
|
||||
m_CustomNameCachedID++;
|
||||
|
||||
m_CaptureMods |= CaptureModifications::Renames;
|
||||
m_MainWindow->captureModified();
|
||||
|
||||
|
||||
@@ -114,6 +114,8 @@ public:
|
||||
uint32_t eventId, bool force = false) override;
|
||||
void SetRemoteHost(int hostIndex);
|
||||
void RefreshStatus() override { SetEventID({}, m_SelectedEventID, m_EventID, true); }
|
||||
void RegisterReplacement(ResourceId id) override;
|
||||
void UnregisterReplacement(ResourceId id) override;
|
||||
void RefreshUIStatus(const rdcarray<ICaptureViewer *> &exclude, bool updateSelectedEvent,
|
||||
bool updateEvent);
|
||||
|
||||
@@ -159,6 +161,7 @@ public:
|
||||
ResourceDescription *GetResource(ResourceId id) override { return m_Resources[id]; }
|
||||
const rdcarray<ResourceDescription> &GetResources() override { return m_ResourceList; }
|
||||
rdcstr GetResourceName(ResourceId id) override;
|
||||
rdcstr GetResourceNameUnsuffixed(ResourceId id) override;
|
||||
bool IsAutogeneratedName(ResourceId id) override;
|
||||
bool HasResourceCustomName(ResourceId id) override;
|
||||
void SetResourceCustomName(ResourceId id, const rdcstr &name) override;
|
||||
@@ -299,7 +302,7 @@ private:
|
||||
void LoadNotes(const QString &data);
|
||||
|
||||
void CacheResources();
|
||||
rdcstr GetResourceName(const ResourceDescription *desc);
|
||||
rdcstr GetResourceNameUnsuffixed(const ResourceDescription *desc);
|
||||
|
||||
float m_LoadProgress = 0.0f;
|
||||
float m_PostloadProgress = 0.0f;
|
||||
@@ -359,6 +362,8 @@ private:
|
||||
QMap<ResourceId, QString> m_CustomNames;
|
||||
int m_CustomNameCachedID = 1;
|
||||
|
||||
QVector<ResourceId> m_ReplacedResources;
|
||||
|
||||
const SDFile *m_StructuredFile = NULL;
|
||||
SDFile m_DummySDFile;
|
||||
|
||||
|
||||
@@ -1162,6 +1162,26 @@ been made.
|
||||
)");
|
||||
virtual void RefreshStatus() = 0;
|
||||
|
||||
DOCUMENT(R"(Register that a resource has replaced, so that the UI can be updated to reflect the
|
||||
change.
|
||||
|
||||
This should be called at the same time as :meth:`ReplayController.ReplaceResource`.
|
||||
|
||||
:param ResourceId id: The id of the resource that has been replaced.
|
||||
)");
|
||||
virtual void RegisterReplacement(ResourceId id) = 0;
|
||||
|
||||
DOCUMENT(R"(Register that a replacement has been removed, so that the UI can be updated to reflect
|
||||
the change.
|
||||
|
||||
This should be called at the same time as :meth:`ReplayController.RemoveReplacement`.
|
||||
|
||||
See :meth:`ReplaceResource`.
|
||||
|
||||
:param ResourceId id: The id of the original resource that was previously replaced.
|
||||
)");
|
||||
virtual void UnregisterReplacement(ResourceId id) = 0;
|
||||
|
||||
DOCUMENT(R"(Register a new instance of :class:`CaptureViewer` to receive capture event notifications.
|
||||
|
||||
:param CaptureViewer viewer: The viewer to register.
|
||||
@@ -1344,6 +1364,14 @@ the resource type.
|
||||
)");
|
||||
virtual rdcstr GetResourceName(ResourceId id) = 0;
|
||||
|
||||
DOCUMENT(R"(Returns the same name as :meth:`GetResourceName` but without any added suffix, e.g. to
|
||||
indicate the resource's status such as (Edited).
|
||||
|
||||
:return: The unsuffixed resource name.
|
||||
:rtype: ``str``
|
||||
)");
|
||||
virtual rdcstr GetResourceNameUnsuffixed(ResourceId id) = 0;
|
||||
|
||||
DOCUMENT(R"(Determines whether the name for the given resource has been customised at all, either
|
||||
during capture time or with :meth:`SetResourceCustomName`.
|
||||
|
||||
|
||||
@@ -829,14 +829,17 @@ IShaderViewer *PipelineStateViewer::EditShader(ResourceId id, ShaderStage shader
|
||||
if(to == ResourceId())
|
||||
{
|
||||
r->RemoveReplacement(from);
|
||||
if(ptr)
|
||||
GUIInvoke::call(ptr, [ctx]() { ctx->RefreshStatus(); });
|
||||
|
||||
// this GUIInvoke call always needs to go through even if the viewer has been closed.
|
||||
GUIInvoke::call(ctx->GetMainWindow()->Widget(),
|
||||
[ctx, from]() { ctx->UnregisterReplacement(from); });
|
||||
}
|
||||
else
|
||||
{
|
||||
r->ReplaceResource(from, to);
|
||||
if(ptr)
|
||||
GUIInvoke::call(ptr, [ctx]() { ctx->RefreshStatus(); });
|
||||
|
||||
GUIInvoke::call(ctx->GetMainWindow()->Widget(),
|
||||
[ctx, from]() { ctx->RegisterReplacement(from); });
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -846,7 +849,7 @@ IShaderViewer *PipelineStateViewer::EditShader(ResourceId id, ShaderStage shader
|
||||
// was a place to control replaced resources/shaders).
|
||||
ctx->Replay().AsyncInvoke([ctx, id](IReplayController *r) {
|
||||
r->RemoveReplacement(id);
|
||||
GUIInvoke::call(ctx->GetMainWindow()->Widget(), [ctx] { ctx->RefreshStatus(); });
|
||||
GUIInvoke::call(ctx->GetMainWindow()->Widget(), [ctx, id] { ctx->UnregisterReplacement(id); });
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -95,6 +95,10 @@ struct CaptureContextInvoker : ICaptureContext
|
||||
return m_Ctx.GetResources();
|
||||
}
|
||||
virtual rdcstr GetResourceName(ResourceId id) override { return m_Ctx.GetResourceName(id); }
|
||||
virtual rdcstr GetResourceNameUnsuffixed(ResourceId id) override
|
||||
{
|
||||
return m_Ctx.GetResourceNameUnsuffixed(id);
|
||||
}
|
||||
virtual bool IsAutogeneratedName(ResourceId id) override { return m_Ctx.IsAutogeneratedName(id); }
|
||||
virtual bool HasResourceCustomName(ResourceId id) override
|
||||
{
|
||||
@@ -202,6 +206,14 @@ struct CaptureContextInvoker : ICaptureContext
|
||||
InvokeVoidFunction(&ICaptureContext::SetEventID, exclude, selectedEventID, eventId, force);
|
||||
}
|
||||
virtual void RefreshStatus() override { InvokeVoidFunction(&ICaptureContext::RefreshStatus); }
|
||||
virtual void RegisterReplacement(ResourceId id) override
|
||||
{
|
||||
InvokeVoidFunction(&ICaptureContext::RegisterReplacement, id);
|
||||
}
|
||||
virtual void UnregisterReplacement(ResourceId id) override
|
||||
{
|
||||
InvokeVoidFunction(&ICaptureContext::UnregisterReplacement, id);
|
||||
}
|
||||
virtual void AddCaptureViewer(ICaptureViewer *viewer) override
|
||||
{
|
||||
InvokeVoidFunction(&ICaptureContext::AddCaptureViewer, viewer);
|
||||
|
||||
@@ -387,6 +387,7 @@ void ResourceInspector::OnEventChanged(uint32_t eventId)
|
||||
{
|
||||
m_ResourceCacheID = m_Ctx.ResourceNameCacheID();
|
||||
m_ResourceModel->reset();
|
||||
SetResourceNameDisplay(m_Ctx.GetResourceName(m_Resource));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -394,9 +395,7 @@ void ResourceInspector::on_renameResource_clicked()
|
||||
{
|
||||
if(!ui->resourceNameEdit->isVisible())
|
||||
{
|
||||
ui->resourceNameEdit->setText(ui->resourceName->text()
|
||||
.replace(QFormatStr(" (%1)").arg(ToQStr(m_Resource)), QString())
|
||||
.trimmed());
|
||||
ui->resourceNameEdit->setText(m_Ctx.GetResourceNameUnsuffixed(m_Resource).trimmed());
|
||||
ui->resourceName->hide();
|
||||
ui->resourceNameEdit->show();
|
||||
ui->resourceNameEdit->setFocus();
|
||||
@@ -406,14 +405,14 @@ void ResourceInspector::on_renameResource_clicked()
|
||||
QString name = ui->resourceNameEdit->text();
|
||||
|
||||
// apply the edit
|
||||
SetResourceNameDisplay(name);
|
||||
m_Ctx.SetResourceCustomName(m_Resource, name);
|
||||
|
||||
SetResourceNameDisplay(m_Ctx.GetResourceName(m_Resource));
|
||||
|
||||
ui->resourceNameEdit->hide();
|
||||
ui->resourceName->show();
|
||||
|
||||
ui->resetName->show();
|
||||
|
||||
m_Ctx.SetResourceCustomName(m_Resource, name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -434,12 +433,12 @@ void ResourceInspector::on_resourceNameEdit_keyPress(QKeyEvent *event)
|
||||
|
||||
void ResourceInspector::on_resetName_clicked()
|
||||
{
|
||||
m_Ctx.SetResourceCustomName(m_Resource, QString());
|
||||
|
||||
SetResourceNameDisplay(m_Ctx.GetResourceName(m_Resource));
|
||||
|
||||
ui->resetName->hide();
|
||||
|
||||
m_Ctx.SetResourceCustomName(m_Resource, QString());
|
||||
|
||||
// force a refresh to pick up the new name
|
||||
ResourceId id = m_Resource;
|
||||
m_Resource = ResourceId();
|
||||
|
||||
Reference in New Issue
Block a user