mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-17 20:52:36 +01:00
Updated RenderDoc interface.
This commit is contained in:
36
src/bgfx.cpp
36
src/bgfx.cpp
@@ -20,6 +20,8 @@
|
||||
# endif // WIN32_LEAN_AND_MEAN
|
||||
# include <windows.h>
|
||||
# include <psapi.h>
|
||||
#elif BX_PLATFORM_LINUX
|
||||
# include <link.h> // dl_iterate_phdr
|
||||
#endif // BX_PLATFORM_*
|
||||
|
||||
BX_ERROR_RESULT(BGFX_ERROR_TEXTURE_VALIDATION, BX_MAKEFOURCC('b', 'g', 0, 1) );
|
||||
@@ -2663,11 +2665,39 @@ namespace bgfx
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
BX_UNUSED(_name);
|
||||
#endif // BX_PLATFORM_WINDOWS
|
||||
|
||||
return NULL;
|
||||
#elif BX_PLATFORM_LINUX
|
||||
struct DlIterateCallbackData
|
||||
{
|
||||
const char* name;
|
||||
void* ptr;
|
||||
} cbData =
|
||||
{
|
||||
.name = _name,
|
||||
.ptr = NULL,
|
||||
};
|
||||
|
||||
auto dlIterateCb = [](struct dl_phdr_info* _info, size_t /* _size */, void* _data) -> int
|
||||
{
|
||||
DlIterateCallbackData& data = *(DlIterateCallbackData*)_data;
|
||||
|
||||
if (bx::hasSuffix(_info->dlpi_name, data.name) )
|
||||
{
|
||||
data.ptr = dlopen(_info->dlpi_name, RTLD_NOW | RTLD_NOLOAD);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
};
|
||||
|
||||
dl_iterate_phdr(dlIterateCb, &cbData);
|
||||
|
||||
return cbData.ptr;
|
||||
#else
|
||||
BX_UNUSED(_name);
|
||||
return NULL;
|
||||
#endif // BX_PLATFORM_WINDOWS
|
||||
}
|
||||
|
||||
bool windowsVersionIs(Condition::Enum _op, uint32_t _version, uint32_t _build)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
namespace bgfx
|
||||
{
|
||||
pRENDERDOC_GetAPI RENDERDOC_GetAPI;
|
||||
static RENDERDOC_API_1_1_2* s_renderDoc = NULL;
|
||||
static RENDERDOC_API_1_6_0* s_renderDoc = NULL;
|
||||
static void* s_renderDocDll = NULL;
|
||||
|
||||
void* loadRenderDoc()
|
||||
@@ -27,18 +27,25 @@ namespace bgfx
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char* renderDocDllName =
|
||||
#if BX_PLATFORM_WINDOWS
|
||||
"renderdoc.dll"
|
||||
#else
|
||||
"librenderdoc.so"
|
||||
#endif // BX_PLATFORM_WINDOWS
|
||||
;
|
||||
|
||||
// If RenderDoc is already injected in the process then use the already present DLL
|
||||
void* renderDocDll = findModule("renderdoc.dll");
|
||||
void* renderDocDll = findModule(renderDocDllName);
|
||||
|
||||
if (NULL == renderDocDll)
|
||||
{
|
||||
// TODO: try common installation paths before looking in current directory
|
||||
renderDocDll = bx::dlopen(
|
||||
#if BX_PLATFORM_WINDOWS
|
||||
"renderdoc.dll"
|
||||
#else
|
||||
"./librenderdoc.so"
|
||||
#endif // BX_PLATFORM_WINDOWS
|
||||
);
|
||||
BX_TRACE("Loading RenderDoc...");
|
||||
renderDocDll = bx::dlopen(renderDocDllName);
|
||||
}
|
||||
else
|
||||
{
|
||||
BX_TRACE("RenderDoc is already loaded.");
|
||||
}
|
||||
|
||||
if (NULL != renderDocDll)
|
||||
@@ -46,7 +53,7 @@ namespace bgfx
|
||||
RENDERDOC_GetAPI = (pRENDERDOC_GetAPI)bx::dlsym(renderDocDll, "RENDERDOC_GetAPI");
|
||||
|
||||
if (NULL != RENDERDOC_GetAPI
|
||||
&& 1 == RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_1_2, (void**)&s_renderDoc) )
|
||||
&& 1 == RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_6_0, (void**)&s_renderDoc) )
|
||||
{
|
||||
s_renderDoc->SetCaptureFilePathTemplate(BGFX_CONFIG_RENDERDOC_LOG_FILEPATH);
|
||||
|
||||
@@ -55,8 +62,8 @@ namespace bgfx
|
||||
RENDERDOC_InputButton captureKeys[] = BGFX_CONFIG_RENDERDOC_CAPTURE_KEYS;
|
||||
s_renderDoc->SetCaptureKeys(captureKeys, BX_COUNTOF(captureKeys) );
|
||||
|
||||
s_renderDoc->SetCaptureOptionU32(eRENDERDOC_Option_AllowVSync, 1);
|
||||
s_renderDoc->SetCaptureOptionU32(eRENDERDOC_Option_SaveAllInitials, 1);
|
||||
s_renderDoc->SetCaptureOptionU32(eRENDERDOC_Option_AllowVSync, 1);
|
||||
s_renderDoc->SetCaptureOptionU32(eRENDERDOC_Option_APIValidation, 1);
|
||||
|
||||
s_renderDoc->MaskOverlayBits(eRENDERDOC_Overlay_None, eRENDERDOC_Overlay_None);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user