| |
| |
|
|
| #include <renderdoc_app.h> |
|
|
| #include "common/assert.h" |
| #include "common/dynamic_library.h" |
| #include "core/tools/renderdoc.h" |
|
|
| #ifdef _WIN32 |
| #include <windows.h> |
| #else |
| #include <dlfcn.h> |
| #endif |
|
|
| namespace Tools { |
|
|
| RenderdocAPI::RenderdocAPI() { |
| #ifdef WIN32 |
| if (HMODULE mod = GetModuleHandleA("renderdoc.dll")) { |
| const auto RENDERDOC_GetAPI = |
| reinterpret_cast<pRENDERDOC_GetAPI>(GetProcAddress(mod, "RENDERDOC_GetAPI")); |
| const s32 ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_6_0, (void**)&rdoc_api); |
| ASSERT(ret == 1); |
| } |
| #else |
| #ifdef ANDROID |
| static constexpr const char RENDERDOC_LIB[] = "libVkLayer_GLES_RenderDoc.so"; |
| #else |
| static constexpr const char RENDERDOC_LIB[] = "librenderdoc.so"; |
| #endif |
| if (void* mod = dlopen(RENDERDOC_LIB, RTLD_NOW | RTLD_NOLOAD)) { |
| const auto RENDERDOC_GetAPI = |
| reinterpret_cast<pRENDERDOC_GetAPI>(dlsym(mod, "RENDERDOC_GetAPI")); |
| const s32 ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_6_0, (void**)&rdoc_api); |
| ASSERT(ret == 1); |
| } |
| #endif |
| } |
|
|
| RenderdocAPI::~RenderdocAPI() = default; |
|
|
| void RenderdocAPI::ToggleCapture() { |
| if (!rdoc_api) [[unlikely]] { |
| return; |
| } |
| if (!is_capturing) { |
| rdoc_api->StartFrameCapture(NULL, NULL); |
| } else { |
| rdoc_api->EndFrameCapture(NULL, NULL); |
| } |
| is_capturing = !is_capturing; |
| } |
|
|
| } |
|
|