From 8ffcab84d9c97f2c8f86c90bdf1e7adaef8a4b9e Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 17 Feb 2017 12:26:49 +0000 Subject: [PATCH] Add self-hosting tool menu items on windows --- qrenderdoc/Windows/MainWindow.cpp | 31 +++++++++++++++++++++++++ renderdoc/api/replay/renderdoc_replay.h | 3 +++ 2 files changed, 34 insertions(+) diff --git a/qrenderdoc/Windows/MainWindow.cpp b/qrenderdoc/Windows/MainWindow.cpp index 4181087e1..d09a4abf2 100644 --- a/qrenderdoc/Windows/MainWindow.cpp +++ b/qrenderdoc/Windows/MainWindow.cpp @@ -69,6 +69,10 @@ struct Version static bool isMismatched() { return RENDERDOC_GetVersionString() != bareString(); } }; +#if defined(Q_OS_WIN32) +extern "C" void *GetModuleHandleA(const char *); +#endif + MainWindow::MainWindow(CaptureContext &ctx) : QMainWindow(NULL), ui(new Ui::MainWindow), m_Ctx(ctx) { ui->setupUi(this); @@ -229,6 +233,33 @@ MainWindow::MainWindow(CaptureContext &ctx) : QMainWindow(NULL), ui(new Ui::Main ui->toolWindowManager->areaOf(eventBrowser), 0.3f)); } +#if defined(Q_OS_WIN32) + if(GetModuleHandleA("rdocself.dll")) + { + QAction *begin = new QAction(tr("Start Self-hosted Capture"), this); + QAction *end = new QAction(tr("End Self-hosted Capture"), this); + end->setEnabled(false); + + QObject::connect(begin, &QAction::triggered, [begin, end]() { + begin->setEnabled(false); + end->setEnabled(true); + + RENDERDOC_StartSelfHostCapture("rdocself.dll"); + }); + + QObject::connect(end, &QAction::triggered, [begin, end]() { + begin->setEnabled(true); + end->setEnabled(false); + + RENDERDOC_EndSelfHostCapture("rdocself.dll"); + }); + + ui->menu_Tools->addSeparator(); + ui->menu_Tools->addAction(begin); + ui->menu_Tools->addAction(end); + } +#endif + m_Ctx.AddLogViewer(this); } diff --git a/renderdoc/api/replay/renderdoc_replay.h b/renderdoc/api/replay/renderdoc_replay.h index 5f1857d44..2f727e0d0 100644 --- a/renderdoc/api/replay/renderdoc_replay.h +++ b/renderdoc/api/replay/renderdoc_replay.h @@ -642,6 +642,9 @@ RENDERDOC_ExecuteAndInject(const char *app, const char *workingDir, const char * extern "C" RENDERDOC_API uint32_t RENDERDOC_CC RENDERDOC_InjectIntoProcess( uint32_t pid, void *env, const char *logfile, const CaptureOptions *opts, bool32 waitForExit); +extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_StartSelfHostCapture(const char *dllname); +extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_EndSelfHostCapture(const char *dllname); + ////////////////////////////////////////////////////////////////////////// // Vulkan layer handling //////////////////////////////////////////////////////////////////////////