7#if HI_OPERATING_SYSTEM == HI_OS_WINDOWS
11#include "renderdoc_app.h"
12#include "../utility/utility.hpp"
13#include "../char_maps/char_maps.hpp"
14#include "../telemetry/telemetry.hpp"
15#include "../macros.hpp"
19hi_export_module(hikogui.GFX.render_doc);
21hi_export
namespace hi {
inline namespace v1 {
23inline void *render_doc_api =
nullptr;
25inline void render_doc_set_overlay(
bool frameRate,
bool frameNumber,
bool captureList)
noexcept
27 if (not render_doc_api) {
31 uint32_t or_mask = eRENDERDOC_Overlay_None;
32 uint32_t and_mask = eRENDERDOC_Overlay_None;
34 if (frameRate || frameNumber || captureList) {
35 or_mask |= eRENDERDOC_Overlay_Enabled;
37 and_mask |= eRENDERDOC_Overlay_Enabled;
41 or_mask |= eRENDERDOC_Overlay_FrameRate;
43 and_mask |= eRENDERDOC_Overlay_FrameRate;
47 or_mask |= eRENDERDOC_Overlay_FrameNumber;
49 and_mask |= eRENDERDOC_Overlay_FrameNumber;
53 or_mask |= eRENDERDOC_Overlay_CaptureList;
55 and_mask |= eRENDERDOC_Overlay_CaptureList;
58 auto& api_ = *
static_cast<RENDERDOC_API_1_4_1 *
>(render_doc_api);
61 api_.MaskOverlayBits(and_mask, or_mask);
64inline void start_render_doc() noexcept
67#if HI_OPERATING_SYSTEM == HI_OS_WINDOWS
68 auto const dll_urls = std::vector{
69 std::filesystem::path{
"renderdoc.dll"},
70 std::filesystem::path{
"C:/Program Files/RenderDoc/renderdoc.dll"},
71 std::filesystem::path{
"C:/Program Files (x86)/RenderDoc/renderdoc.dll"}};
73 auto mod = [&]() -> HMODULE {
74 for (
auto const& dll_url : dll_urls) {
75 hi_log_debug(
"Trying to load: {}", dll_url.string());
77 if (
auto mod = LoadLibraryW(dll_url.native().c_str())) {
85 hi_log_warning(
"Could not load renderdoc.dll");
89 auto RENDERDOC_GetAPI = (pRENDERDOC_GetAPI)GetProcAddress(mod,
"RENDERDOC_GetAPI");
90 if (RENDERDOC_GetAPI ==
nullptr) {
91 hi_log_error(
"Could not find RENDERDOC_GetAPI in renderdoc.dll");
95 int ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_4_1, &render_doc_api);
97 hi_log_error(
"RENDERDOC_GetAPI returns invalid value {}", ret);
98 render_doc_api =
nullptr;
110 render_doc_set_overlay(
false,
false,
false);
Rules for working with win32 headers.
The HikoGUI namespace.
Definition array_generic.hpp:21
The HikoGUI API version 1.
Definition array_generic.hpp:22