mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-14 05:50:51 +00:00
Add a small interface into Qt widgets to our own python wrapping
* This by no means replaces PySide2, but it allows python extensions to write simple UIs without needing to rely on PySide2, which might not be available (generally all windows builds have it as well as recent binary linux builds, but local windows builds may not and most linux builds probably won't).
This commit is contained in:
+400
-112
@@ -37,125 +37,28 @@
|
||||
// Note this does NOT make CaptureContext thread safe. We just invoke for any potentially UI
|
||||
// operations. All invokes are blocking, so there can't be any times when the UI thread waits
|
||||
// on the python thread.
|
||||
struct CaptureContextInvoker : ICaptureContext
|
||||
template <typename Obj>
|
||||
struct ObjectForwarder : Obj
|
||||
{
|
||||
ObjectForwarder(PythonShell *sh, Obj &o) : m_Shell(sh), m_Obj(o) {}
|
||||
PythonShell *m_Shell;
|
||||
ICaptureContext &m_Ctx;
|
||||
CaptureContextInvoker(PythonShell *shell, ICaptureContext &ctx) : m_Shell(shell), m_Ctx(ctx) {}
|
||||
virtual ~CaptureContextInvoker() {}
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// pass-through functions that don't need the UI thread
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
virtual rdcstr TempCaptureFilename(const rdcstr &appname) override
|
||||
{
|
||||
return m_Ctx.TempCaptureFilename(appname);
|
||||
}
|
||||
virtual IExtensionManager &Extensions() override { return m_Ctx.Extensions(); }
|
||||
virtual IReplayManager &Replay() override { return m_Ctx.Replay(); }
|
||||
virtual bool IsCaptureLoaded() override { return m_Ctx.IsCaptureLoaded(); }
|
||||
virtual bool IsCaptureLocal() override { return m_Ctx.IsCaptureLocal(); }
|
||||
virtual bool IsCaptureTemporary() override { return m_Ctx.IsCaptureTemporary(); }
|
||||
virtual bool IsCaptureLoading() override { return m_Ctx.IsCaptureLoading(); }
|
||||
virtual rdcstr GetCaptureFilename() override { return m_Ctx.GetCaptureFilename(); }
|
||||
virtual CaptureModifications GetCaptureModifications() override
|
||||
{
|
||||
return m_Ctx.GetCaptureModifications();
|
||||
}
|
||||
virtual const FrameDescription &FrameInfo() override { return m_Ctx.FrameInfo(); }
|
||||
virtual const APIProperties &APIProps() override { return m_Ctx.APIProps(); }
|
||||
virtual rdcarray<ShaderEncoding> TargetShaderEncodings() override
|
||||
{
|
||||
return m_Ctx.TargetShaderEncodings();
|
||||
}
|
||||
virtual rdcarray<ShaderEncoding> CustomShaderEncodings() override
|
||||
{
|
||||
return m_Ctx.CustomShaderEncodings();
|
||||
}
|
||||
virtual uint32_t CurSelectedEvent() override { return m_Ctx.CurSelectedEvent(); }
|
||||
virtual uint32_t CurEvent() override { return m_Ctx.CurEvent(); }
|
||||
virtual const DrawcallDescription *CurSelectedDrawcall() override
|
||||
{
|
||||
return m_Ctx.CurSelectedDrawcall();
|
||||
}
|
||||
virtual const DrawcallDescription *CurDrawcall() override { return m_Ctx.CurDrawcall(); }
|
||||
virtual const DrawcallDescription *GetFirstDrawcall() override
|
||||
{
|
||||
return m_Ctx.GetFirstDrawcall();
|
||||
}
|
||||
virtual const DrawcallDescription *GetLastDrawcall() override { return m_Ctx.GetLastDrawcall(); }
|
||||
virtual const rdcarray<DrawcallDescription> &CurDrawcalls() override
|
||||
{
|
||||
return m_Ctx.CurDrawcalls();
|
||||
}
|
||||
virtual ResourceDescription *GetResource(ResourceId id) override { return m_Ctx.GetResource(id); }
|
||||
virtual const rdcarray<ResourceDescription> &GetResources() override
|
||||
{
|
||||
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
|
||||
{
|
||||
return m_Ctx.HasResourceCustomName(id);
|
||||
}
|
||||
virtual int ResourceNameCacheID() override { return m_Ctx.ResourceNameCacheID(); }
|
||||
virtual TextureDescription *GetTexture(ResourceId id) override { return m_Ctx.GetTexture(id); }
|
||||
virtual const rdcarray<TextureDescription> &GetTextures() override { return m_Ctx.GetTextures(); }
|
||||
virtual BufferDescription *GetBuffer(ResourceId id) override { return m_Ctx.GetBuffer(id); }
|
||||
virtual const rdcarray<BufferDescription> &GetBuffers() override { return m_Ctx.GetBuffers(); }
|
||||
virtual const DrawcallDescription *GetDrawcall(uint32_t eventId) override
|
||||
{
|
||||
return m_Ctx.GetDrawcall(eventId);
|
||||
}
|
||||
virtual bool OpenRGPProfile(const rdcstr &filename) override
|
||||
{
|
||||
return m_Ctx.OpenRGPProfile(filename);
|
||||
}
|
||||
virtual IRGPInterop *GetRGPInterop() override { return m_Ctx.GetRGPInterop(); }
|
||||
virtual const SDFile &GetStructuredFile() override { return m_Ctx.GetStructuredFile(); }
|
||||
virtual WindowingSystem CurWindowingSystem() override { return m_Ctx.CurWindowingSystem(); }
|
||||
virtual const rdcarray<DebugMessage> &DebugMessages() override { return m_Ctx.DebugMessages(); }
|
||||
virtual int UnreadMessageCount() override { return m_Ctx.UnreadMessageCount(); }
|
||||
virtual void MarkMessagesRead() override { return m_Ctx.MarkMessagesRead(); }
|
||||
virtual rdcstr GetNotes(const rdcstr &key) override { return m_Ctx.GetNotes(key); }
|
||||
virtual rdcarray<EventBookmark> GetBookmarks() override { return m_Ctx.GetBookmarks(); }
|
||||
virtual const D3D11Pipe::State *CurD3D11PipelineState() override
|
||||
{
|
||||
return m_Ctx.CurD3D11PipelineState();
|
||||
}
|
||||
virtual const D3D12Pipe::State *CurD3D12PipelineState() override
|
||||
{
|
||||
return m_Ctx.CurD3D12PipelineState();
|
||||
}
|
||||
virtual const GLPipe::State *CurGLPipelineState() override { return m_Ctx.CurGLPipelineState(); }
|
||||
virtual const VKPipe::State *CurVulkanPipelineState() override
|
||||
{
|
||||
return m_Ctx.CurVulkanPipelineState();
|
||||
}
|
||||
virtual const PipeState &CurPipelineState() override { return m_Ctx.CurPipelineState(); }
|
||||
virtual PersistantConfig &Config() override { return m_Ctx.Config(); }
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// functions that invoke onto the UI thread
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
Obj &m_Obj;
|
||||
|
||||
template <typename F, typename... paramTypes>
|
||||
void InvokeVoidFunction(F ptr, paramTypes... params)
|
||||
{
|
||||
if(!GUIInvoke::onUIThread())
|
||||
{
|
||||
GUIInvoke::blockcall(m_Shell, [this, ptr, params...]() { (m_Ctx.*ptr)(params...); });
|
||||
|
||||
PythonContext *scriptContext = m_Shell->GetScriptContext();
|
||||
if(scriptContext)
|
||||
scriptContext->PausePythonThreading();
|
||||
GUIInvoke::blockcall(m_Shell, [this, ptr, params...]() { (m_Obj.*ptr)(params...); });
|
||||
if(scriptContext)
|
||||
scriptContext->ResumePythonThreading();
|
||||
return;
|
||||
}
|
||||
|
||||
(m_Ctx.*ptr)(params...);
|
||||
(m_Obj.*ptr)(params...);
|
||||
}
|
||||
|
||||
template <typename R, typename F, typename... paramTypes>
|
||||
@@ -164,15 +67,395 @@ struct CaptureContextInvoker : ICaptureContext
|
||||
if(!GUIInvoke::onUIThread())
|
||||
{
|
||||
R ret;
|
||||
PythonContext *scriptContext = m_Shell->GetScriptContext();
|
||||
if(scriptContext)
|
||||
scriptContext->PausePythonThreading();
|
||||
GUIInvoke::blockcall(m_Shell,
|
||||
[this, &ret, ptr, params...]() { ret = (m_Ctx.*ptr)(params...); });
|
||||
|
||||
[this, &ret, ptr, params...]() { ret = (m_Obj.*ptr)(params...); });
|
||||
if(scriptContext)
|
||||
scriptContext->ResumePythonThreading();
|
||||
return ret;
|
||||
}
|
||||
|
||||
return (m_Ctx.*ptr)(params...);
|
||||
return (m_Obj.*ptr)(params...);
|
||||
}
|
||||
};
|
||||
|
||||
struct MiniQtInvoker : ObjectForwarder<IMiniQtHelper>
|
||||
{
|
||||
MiniQtInvoker(PythonShell *shell, IMiniQtHelper &obj) : ObjectForwarder(shell, obj) {}
|
||||
virtual ~MiniQtInvoker() {}
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// all functions invoke onto the UI thread since they deal with widgets!
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
QWidget *CreateToplevelWidget(const rdcstr &windowTitle)
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateToplevelWidget, windowTitle);
|
||||
}
|
||||
|
||||
// widget hierarchy
|
||||
|
||||
void SetWidgetName(QWidget *widget, const rdcstr &name)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::SetWidgetName, widget, name);
|
||||
}
|
||||
rdcstr GetWidgetName(QWidget *widget)
|
||||
{
|
||||
return InvokeRetFunction<rdcstr>(&IMiniQtHelper::GetWidgetName, widget);
|
||||
}
|
||||
rdcstr GetWidgetType(QWidget *widget)
|
||||
{
|
||||
return InvokeRetFunction<rdcstr>(&IMiniQtHelper::GetWidgetType, widget);
|
||||
}
|
||||
QWidget *FindChildByName(QWidget *parent, const rdcstr &name)
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::FindChildByName, parent, name);
|
||||
}
|
||||
QWidget *GetParent(QWidget *widget)
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::GetParent, widget);
|
||||
}
|
||||
int GetNumChildren(QWidget *widget)
|
||||
{
|
||||
return InvokeRetFunction<int>(&IMiniQtHelper::GetNumChildren, widget);
|
||||
}
|
||||
QWidget *GetChild(QWidget *parent, int index)
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::GetChild, parent, index);
|
||||
}
|
||||
|
||||
// dialogs
|
||||
|
||||
bool ShowWidgetAsDialog(QWidget *widget)
|
||||
{
|
||||
return InvokeRetFunction<bool>(&IMiniQtHelper::ShowWidgetAsDialog, widget);
|
||||
}
|
||||
void CloseCurrentDialog(bool success)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::CloseCurrentDialog, success);
|
||||
}
|
||||
|
||||
// layout functions
|
||||
|
||||
QWidget *CreateHorizontalContainer()
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateHorizontalContainer);
|
||||
}
|
||||
QWidget *CreateVerticalContainer()
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateVerticalContainer);
|
||||
}
|
||||
QWidget *CreateGridContainer()
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateGridContainer);
|
||||
}
|
||||
|
||||
void ClearContainedWidgets(QWidget *parent)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::ClearContainedWidgets, parent);
|
||||
}
|
||||
void AddGridWidget(QWidget *parent, int row, int column, QWidget *child, int rowSpan, int columnSpan)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::AddGridWidget, parent, row, column, child, rowSpan,
|
||||
columnSpan);
|
||||
}
|
||||
void AddWidget(QWidget *parent, QWidget *child)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::AddWidget, parent, child);
|
||||
}
|
||||
void InsertWidget(QWidget *parent, int index, QWidget *child)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::InsertWidget, parent, index, child);
|
||||
}
|
||||
|
||||
// widget manipulation
|
||||
|
||||
void SetWidgetText(QWidget *widget, const rdcstr &text)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::SetWidgetText, widget, text);
|
||||
}
|
||||
rdcstr GetWidgetText(QWidget *widget)
|
||||
{
|
||||
return InvokeRetFunction<rdcstr>(&IMiniQtHelper::GetWidgetText, widget);
|
||||
}
|
||||
|
||||
void SetWidgetFont(QWidget *widget, const rdcstr &font, int fontSize, bool bold, bool italic)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::SetWidgetFont, widget, font, fontSize, bold, italic);
|
||||
}
|
||||
|
||||
void SetWidgetEnabled(QWidget *widget, bool enabled)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::SetWidgetEnabled, widget, enabled);
|
||||
}
|
||||
bool IsWidgetEnabled(QWidget *widget)
|
||||
{
|
||||
return InvokeRetFunction<bool>(&IMiniQtHelper::IsWidgetEnabled, widget);
|
||||
}
|
||||
|
||||
// specific widgets
|
||||
|
||||
QWidget *CreateGroupBox(bool collapsible)
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateGroupBox, collapsible);
|
||||
}
|
||||
|
||||
QWidget *CreateButton(WidgetCallback pressed)
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateButton, pressed);
|
||||
}
|
||||
|
||||
QWidget *CreateLabel() { return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateLabel); }
|
||||
QWidget *CreateCheckbox(WidgetCallback changed)
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateCheckbox, changed);
|
||||
}
|
||||
QWidget *CreateRadiobox(WidgetCallback changed)
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateRadiobox, changed);
|
||||
}
|
||||
|
||||
void SetWidgetChecked(QWidget *checkableWidget, bool checked)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::SetWidgetChecked, checkableWidget, checked);
|
||||
}
|
||||
bool IsWidgetChecked(QWidget *checkableWidget)
|
||||
{
|
||||
return InvokeRetFunction<bool>(&IMiniQtHelper::IsWidgetChecked, checkableWidget);
|
||||
}
|
||||
|
||||
QWidget *CreateSpinbox(int decimalPlaces, double step)
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateSpinbox, decimalPlaces, step);
|
||||
}
|
||||
|
||||
void SetSpinboxBounds(QWidget *spinbox, double minVal, double maxVal)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::SetSpinboxBounds, spinbox, minVal, maxVal);
|
||||
}
|
||||
void SetSpinboxValue(QWidget *spinbox, double value)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::SetSpinboxValue, spinbox, value);
|
||||
}
|
||||
double GetSpinboxValue(QWidget *spinbox)
|
||||
{
|
||||
return InvokeRetFunction<double>(&IMiniQtHelper::GetSpinboxValue, spinbox);
|
||||
}
|
||||
|
||||
QWidget *CreateTextBox(bool singleLine, WidgetCallback changed)
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateTextBox, singleLine, changed);
|
||||
}
|
||||
|
||||
QWidget *CreateComboBox(bool editable, WidgetCallback changed)
|
||||
{
|
||||
return InvokeRetFunction<QWidget *>(&IMiniQtHelper::CreateComboBox, editable, changed);
|
||||
}
|
||||
|
||||
void SetComboOptions(QWidget *combo, const rdcarray<rdcstr> &options)
|
||||
{
|
||||
InvokeVoidFunction(&IMiniQtHelper::SetComboOptions, combo, options);
|
||||
}
|
||||
};
|
||||
|
||||
struct ExtensionInvoker : ObjectForwarder<IExtensionManager>
|
||||
{
|
||||
MiniQtInvoker *m_MiniQt;
|
||||
ExtensionInvoker(PythonShell *shell, IExtensionManager &obj) : ObjectForwarder(shell, obj)
|
||||
{
|
||||
m_MiniQt = new MiniQtInvoker(shell, obj.GetMiniQtHelper());
|
||||
}
|
||||
virtual ~ExtensionInvoker() { delete m_MiniQt; }
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// pass-through functions that don't need the UI thread
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
rdcarray<ExtensionMetadata> GetInstalledExtensions() { return m_Obj.GetInstalledExtensions(); }
|
||||
bool IsExtensionLoaded(rdcstr name) { return m_Obj.IsExtensionLoaded(name); }
|
||||
bool LoadExtension(rdcstr name) { return m_Obj.LoadExtension(name); }
|
||||
IMiniQtHelper &GetMiniQtHelper() { return *m_MiniQt; }
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// functions that invoke onto the UI thread
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
void RegisterWindowMenu(WindowMenu base, const rdcarray<rdcstr> &submenus,
|
||||
ExtensionCallback callback)
|
||||
{
|
||||
InvokeVoidFunction(&IExtensionManager::RegisterWindowMenu, base, submenus, callback);
|
||||
}
|
||||
|
||||
void RegisterPanelMenu(PanelMenu base, const rdcarray<rdcstr> &submenus, ExtensionCallback callback)
|
||||
{
|
||||
InvokeVoidFunction(&IExtensionManager::RegisterPanelMenu, base, submenus, callback);
|
||||
}
|
||||
|
||||
void RegisterContextMenu(ContextMenu base, const rdcarray<rdcstr> &submenus,
|
||||
ExtensionCallback callback)
|
||||
{
|
||||
InvokeVoidFunction(&IExtensionManager::RegisterContextMenu, base, submenus, callback);
|
||||
}
|
||||
|
||||
void MessageDialog(const rdcstr &text, const rdcstr &title)
|
||||
{
|
||||
InvokeVoidFunction(&IExtensionManager::MessageDialog, text, title);
|
||||
}
|
||||
|
||||
void ErrorDialog(const rdcstr &text, const rdcstr &title)
|
||||
{
|
||||
InvokeVoidFunction(&IExtensionManager::ErrorDialog, text, title);
|
||||
}
|
||||
|
||||
DialogButton QuestionDialog(const rdcstr &text, const rdcarray<DialogButton> &options,
|
||||
const rdcstr &title)
|
||||
{
|
||||
return InvokeRetFunction<DialogButton>(&IExtensionManager::QuestionDialog, text, options, title);
|
||||
}
|
||||
|
||||
rdcstr OpenFileName(const rdcstr &caption, const rdcstr &dir, const rdcstr &filter)
|
||||
{
|
||||
return InvokeRetFunction<rdcstr>(&IExtensionManager::OpenFileName, caption, dir, filter);
|
||||
}
|
||||
|
||||
rdcstr OpenDirectoryName(const rdcstr &caption, const rdcstr &dir)
|
||||
{
|
||||
return InvokeRetFunction<rdcstr>(&IExtensionManager::OpenDirectoryName, caption, dir);
|
||||
}
|
||||
|
||||
rdcstr SaveFileName(const rdcstr &caption, const rdcstr &dir, const rdcstr &filter)
|
||||
{
|
||||
return InvokeRetFunction<rdcstr>(&IExtensionManager::SaveFileName, caption, dir, filter);
|
||||
}
|
||||
|
||||
void MenuDisplaying(ContextMenu contextMenu, QMenu *menu, const ExtensionCallbackData &data)
|
||||
{
|
||||
InvokeVoidFunction(
|
||||
(void (IExtensionManager::*)(ContextMenu, QMenu *, const ExtensionCallbackData &)) &
|
||||
IExtensionManager::MenuDisplaying,
|
||||
contextMenu, menu, data);
|
||||
}
|
||||
void MenuDisplaying(PanelMenu panelMenu, QMenu *menu, QWidget *extensionButton,
|
||||
const ExtensionCallbackData &data)
|
||||
{
|
||||
InvokeVoidFunction(
|
||||
(void (IExtensionManager::*)(PanelMenu, QMenu *, QWidget *, const ExtensionCallbackData &)) &
|
||||
IExtensionManager::MenuDisplaying,
|
||||
panelMenu, menu, extensionButton, data);
|
||||
}
|
||||
};
|
||||
|
||||
struct CaptureContextInvoker : ObjectForwarder<ICaptureContext>
|
||||
{
|
||||
ExtensionInvoker *m_Ext;
|
||||
CaptureContextInvoker(PythonShell *shell, ICaptureContext &obj) : ObjectForwarder(shell, obj)
|
||||
{
|
||||
m_Ext = new ExtensionInvoker(shell, obj.Extensions());
|
||||
}
|
||||
virtual ~CaptureContextInvoker() { delete m_Ext; }
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// pass-through functions that don't need the UI thread
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
virtual rdcstr TempCaptureFilename(const rdcstr &appname) override
|
||||
{
|
||||
return m_Obj.TempCaptureFilename(appname);
|
||||
}
|
||||
virtual IExtensionManager &Extensions() override { return *m_Ext; }
|
||||
virtual IReplayManager &Replay() override { return m_Obj.Replay(); }
|
||||
virtual bool IsCaptureLoaded() override { return m_Obj.IsCaptureLoaded(); }
|
||||
virtual bool IsCaptureLocal() override { return m_Obj.IsCaptureLocal(); }
|
||||
virtual bool IsCaptureTemporary() override { return m_Obj.IsCaptureTemporary(); }
|
||||
virtual bool IsCaptureLoading() override { return m_Obj.IsCaptureLoading(); }
|
||||
virtual rdcstr GetCaptureFilename() override { return m_Obj.GetCaptureFilename(); }
|
||||
virtual CaptureModifications GetCaptureModifications() override
|
||||
{
|
||||
return m_Obj.GetCaptureModifications();
|
||||
}
|
||||
virtual const FrameDescription &FrameInfo() override { return m_Obj.FrameInfo(); }
|
||||
virtual const APIProperties &APIProps() override { return m_Obj.APIProps(); }
|
||||
virtual rdcarray<ShaderEncoding> TargetShaderEncodings() override
|
||||
{
|
||||
return m_Obj.TargetShaderEncodings();
|
||||
}
|
||||
virtual rdcarray<ShaderEncoding> CustomShaderEncodings() override
|
||||
{
|
||||
return m_Obj.CustomShaderEncodings();
|
||||
}
|
||||
virtual uint32_t CurSelectedEvent() override { return m_Obj.CurSelectedEvent(); }
|
||||
virtual uint32_t CurEvent() override { return m_Obj.CurEvent(); }
|
||||
virtual const DrawcallDescription *CurSelectedDrawcall() override
|
||||
{
|
||||
return m_Obj.CurSelectedDrawcall();
|
||||
}
|
||||
virtual const DrawcallDescription *CurDrawcall() override { return m_Obj.CurDrawcall(); }
|
||||
virtual const DrawcallDescription *GetFirstDrawcall() override
|
||||
{
|
||||
return m_Obj.GetFirstDrawcall();
|
||||
}
|
||||
virtual const DrawcallDescription *GetLastDrawcall() override { return m_Obj.GetLastDrawcall(); }
|
||||
virtual const rdcarray<DrawcallDescription> &CurDrawcalls() override
|
||||
{
|
||||
return m_Obj.CurDrawcalls();
|
||||
}
|
||||
virtual ResourceDescription *GetResource(ResourceId id) override { return m_Obj.GetResource(id); }
|
||||
virtual const rdcarray<ResourceDescription> &GetResources() override
|
||||
{
|
||||
return m_Obj.GetResources();
|
||||
}
|
||||
virtual rdcstr GetResourceName(ResourceId id) override { return m_Obj.GetResourceName(id); }
|
||||
virtual rdcstr GetResourceNameUnsuffixed(ResourceId id) override
|
||||
{
|
||||
return m_Obj.GetResourceNameUnsuffixed(id);
|
||||
}
|
||||
virtual bool IsAutogeneratedName(ResourceId id) override { return m_Obj.IsAutogeneratedName(id); }
|
||||
virtual bool HasResourceCustomName(ResourceId id) override
|
||||
{
|
||||
return m_Obj.HasResourceCustomName(id);
|
||||
}
|
||||
virtual int ResourceNameCacheID() override { return m_Obj.ResourceNameCacheID(); }
|
||||
virtual TextureDescription *GetTexture(ResourceId id) override { return m_Obj.GetTexture(id); }
|
||||
virtual const rdcarray<TextureDescription> &GetTextures() override { return m_Obj.GetTextures(); }
|
||||
virtual BufferDescription *GetBuffer(ResourceId id) override { return m_Obj.GetBuffer(id); }
|
||||
virtual const rdcarray<BufferDescription> &GetBuffers() override { return m_Obj.GetBuffers(); }
|
||||
virtual const DrawcallDescription *GetDrawcall(uint32_t eventId) override
|
||||
{
|
||||
return m_Obj.GetDrawcall(eventId);
|
||||
}
|
||||
virtual bool OpenRGPProfile(const rdcstr &filename) override
|
||||
{
|
||||
return m_Obj.OpenRGPProfile(filename);
|
||||
}
|
||||
virtual IRGPInterop *GetRGPInterop() override { return m_Obj.GetRGPInterop(); }
|
||||
virtual const SDFile &GetStructuredFile() override { return m_Obj.GetStructuredFile(); }
|
||||
virtual WindowingSystem CurWindowingSystem() override { return m_Obj.CurWindowingSystem(); }
|
||||
virtual const rdcarray<DebugMessage> &DebugMessages() override { return m_Obj.DebugMessages(); }
|
||||
virtual int UnreadMessageCount() override { return m_Obj.UnreadMessageCount(); }
|
||||
virtual void MarkMessagesRead() override { return m_Obj.MarkMessagesRead(); }
|
||||
virtual rdcstr GetNotes(const rdcstr &key) override { return m_Obj.GetNotes(key); }
|
||||
virtual rdcarray<EventBookmark> GetBookmarks() override { return m_Obj.GetBookmarks(); }
|
||||
virtual const D3D11Pipe::State *CurD3D11PipelineState() override
|
||||
{
|
||||
return m_Obj.CurD3D11PipelineState();
|
||||
}
|
||||
virtual const D3D12Pipe::State *CurD3D12PipelineState() override
|
||||
{
|
||||
return m_Obj.CurD3D12PipelineState();
|
||||
}
|
||||
virtual const GLPipe::State *CurGLPipelineState() override { return m_Obj.CurGLPipelineState(); }
|
||||
virtual const VKPipe::State *CurVulkanPipelineState() override
|
||||
{
|
||||
return m_Obj.CurVulkanPipelineState();
|
||||
}
|
||||
virtual const PipeState &CurPipelineState() override { return m_Obj.CurPipelineState(); }
|
||||
virtual PersistantConfig &Config() override { return m_Obj.Config(); }
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// functions that invoke onto the UI thread
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
virtual void ConnectToRemoteServer(RemoteHost host) override
|
||||
{
|
||||
InvokeVoidFunction(&ICaptureContext::ConnectToRemoteServer, host);
|
||||
@@ -596,6 +879,11 @@ PythonShell::~PythonShell()
|
||||
delete ui;
|
||||
}
|
||||
|
||||
PythonContext *PythonShell::GetScriptContext()
|
||||
{
|
||||
return scriptContext;
|
||||
}
|
||||
|
||||
void PythonShell::on_execute_clicked()
|
||||
{
|
||||
QString command = ui->lineInput->text();
|
||||
|
||||
Reference in New Issue
Block a user