From 20625eeebafdd4300f3bfeaf0548909f010148c7 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 30 Apr 2016 17:12:36 +0200 Subject: [PATCH] Add a LibraryHooks callback when capture options are changed --- renderdoc/core/core.cpp | 3 +++ renderdoc/driver/d3d11/d3d11_hooks.cpp | 2 ++ renderdoc/driver/d3d11/d3d9_hooks.cpp | 2 ++ renderdoc/driver/dxgi/dxgi_hooks.cpp | 2 ++ renderdoc/driver/gl/gl_hooks_linux.cpp | 2 ++ renderdoc/driver/gl/gl_hooks_win32.cpp | 2 ++ renderdoc/hooks/hooks.cpp | 9 ++++++--- renderdoc/hooks/hooks.h | 2 ++ renderdoc/os/win32/sys_win32_hooks.cpp | 2 ++ 9 files changed, 23 insertions(+), 3 deletions(-) diff --git a/renderdoc/core/core.cpp b/renderdoc/core/core.cpp index d2d976429..9cdbb235d 100644 --- a/renderdoc/core/core.cpp +++ b/renderdoc/core/core.cpp @@ -35,6 +35,7 @@ #include "data/version.h" #include "crash_handler.h" +#include "hooks/hooks.h" #include "stb/stb_image.h" #include "common/dds_readwrite.h" @@ -769,6 +770,8 @@ map RenderDoc::GetRemoteDrivers() void RenderDoc::SetCaptureOptions(const CaptureOptions &opts) { m_Options = opts; + + LibraryHooks::GetInstance().OptionsUpdated(); } void RenderDoc::SetLogFile(const char *logFile) diff --git a/renderdoc/driver/d3d11/d3d11_hooks.cpp b/renderdoc/driver/d3d11/d3d11_hooks.cpp index 9a680559f..17afdfce0 100644 --- a/renderdoc/driver/d3d11/d3d11_hooks.cpp +++ b/renderdoc/driver/d3d11/d3d11_hooks.cpp @@ -63,6 +63,8 @@ public: m_EnabledHooks = enable; } + void OptionsUpdated(const char *libName) {} + bool UseHooks() { return (d3d11hooks.m_HasHooks && d3d11hooks.m_EnabledHooks); diff --git a/renderdoc/driver/d3d11/d3d9_hooks.cpp b/renderdoc/driver/d3d11/d3d9_hooks.cpp index 24664dbf9..880d59e5e 100644 --- a/renderdoc/driver/d3d11/d3d9_hooks.cpp +++ b/renderdoc/driver/d3d11/d3d9_hooks.cpp @@ -69,6 +69,8 @@ class D3D9Hook : LibraryHook m_EnabledHooks = enable; } + void OptionsUpdated(const char *libName) {} + private: static D3D9Hook d3d9hooks; diff --git a/renderdoc/driver/dxgi/dxgi_hooks.cpp b/renderdoc/driver/dxgi/dxgi_hooks.cpp index e6583779c..47d1a7b93 100644 --- a/renderdoc/driver/dxgi/dxgi_hooks.cpp +++ b/renderdoc/driver/dxgi/dxgi_hooks.cpp @@ -60,6 +60,8 @@ public: m_EnabledHooks = enable; } + void OptionsUpdated(const char *libName) {} + bool UseHooks() { return (dxgihooks.m_HasHooks && dxgihooks.m_EnabledHooks); diff --git a/renderdoc/driver/gl/gl_hooks_linux.cpp b/renderdoc/driver/gl/gl_hooks_linux.cpp index 5903e8772..75dec8e65 100644 --- a/renderdoc/driver/gl/gl_hooks_linux.cpp +++ b/renderdoc/driver/gl/gl_hooks_linux.cpp @@ -305,6 +305,8 @@ class OpenGLHook : LibraryHook { m_EnabledHooks = enable; } + + void OptionsUpdated(const char *libName) {} static OpenGLHook glhooks; diff --git a/renderdoc/driver/gl/gl_hooks_win32.cpp b/renderdoc/driver/gl/gl_hooks_win32.cpp index 514547691..c48b54259 100644 --- a/renderdoc/driver/gl/gl_hooks_win32.cpp +++ b/renderdoc/driver/gl/gl_hooks_win32.cpp @@ -243,6 +243,8 @@ class OpenGLHook : LibraryHook { m_EnabledHooks = enable; } + + void OptionsUpdated(const char *libName) {} static OpenGLHook glhooks; diff --git a/renderdoc/hooks/hooks.cpp b/renderdoc/hooks/hooks.cpp index 12ae7b0fc..69b636519 100644 --- a/renderdoc/hooks/hooks.cpp +++ b/renderdoc/hooks/hooks.cpp @@ -67,10 +67,13 @@ void LibraryHooks::RemoveHooks() void LibraryHooks::EnableHooks(bool enable) { RDCDEBUG("%s hooks!", enable ? "Enabling" : "Disabling"); - - if(!enable) - return; for(auto it=m_Hooks.begin(); it!=m_Hooks.end(); ++it) it->second->EnableHooks(it->first, enable); } + +void LibraryHooks::OptionsUpdated() +{ + for(auto it=m_Hooks.begin(); it!=m_Hooks.end(); ++it) + it->second->OptionsUpdated(it->first); +} \ No newline at end of file diff --git a/renderdoc/hooks/hooks.h b/renderdoc/hooks/hooks.h index 6eab4fd87..c2dd0c329 100644 --- a/renderdoc/hooks/hooks.h +++ b/renderdoc/hooks/hooks.h @@ -98,6 +98,7 @@ struct LibraryHook { virtual bool CreateHooks(const char *libName) = 0; virtual void EnableHooks(const char *libName, bool enable) = 0; + virtual void OptionsUpdated(const char *libName) = 0; }; // this singleton allows you to compile in code that defines a hook for a given library @@ -110,6 +111,7 @@ class LibraryHooks static LibraryHooks &GetInstance(); void RegisterHook(const char *libName, LibraryHook *hook); void CreateHooks(); + void OptionsUpdated(); void EnableHooks(bool enable); void RemoveHooks(); diff --git a/renderdoc/os/win32/sys_win32_hooks.cpp b/renderdoc/os/win32/sys_win32_hooks.cpp index f510607a9..7b93b3b5a 100644 --- a/renderdoc/os/win32/sys_win32_hooks.cpp +++ b/renderdoc/os/win32/sys_win32_hooks.cpp @@ -84,6 +84,8 @@ class SysHook : LibraryHook m_EnabledHooks = enable; } + void OptionsUpdated(const char *libName) {} + private: static SysHook syshooks;