diff --git a/profiler/src/Backend.hpp b/profiler/src/Backend.hpp index a2e94a8c..b20b616f 100644 --- a/profiler/src/Backend.hpp +++ b/profiler/src/Backend.hpp @@ -26,6 +26,9 @@ public: float GetDpiScale(); + size_t HandleType(); + void* Handle(); + private: WindowPosition m_winPos; int m_w, m_h; diff --git a/profiler/src/BackendEmscripten.cpp b/profiler/src/BackendEmscripten.cpp index d1204d7a..69d3a89b 100644 --- a/profiler/src/BackendEmscripten.cpp +++ b/profiler/src/BackendEmscripten.cpp @@ -388,3 +388,13 @@ float Backend::GetDpiScale() { return EM_ASM_DOUBLE( { return window.devicePixelRatio; } ); } + +size_t Backend::HandleType() +{ + return 0; +} + +void* Backend::Handle() +{ + return nullptr; +} diff --git a/profiler/src/BackendGlfw.cpp b/profiler/src/BackendGlfw.cpp index 065c3f8f..336b4fe5 100644 --- a/profiler/src/BackendGlfw.cpp +++ b/profiler/src/BackendGlfw.cpp @@ -21,6 +21,17 @@ # include "icon.hpp" #endif +#if !defined TRACY_NO_FILESELECTOR +# if defined WIN32 +# define GLFW_EXPOSE_NATIVE_WIN32 +# elif defined __APPLE__ +# define GLFW_EXPOSE_NATIVE_COCOA +# else +# define GLFW_EXPOSE_NATIVE_X11 +# endif +# include +#endif + static GLFWwindow* s_window; static std::function s_redraw; @@ -283,3 +294,25 @@ float Backend::GetDpiScale() return 1; #endif } + +size_t Backend::HandleType() +{ +#ifdef TRACY_NO_FILESELECTOR + return 0; +#else + nfdwindowhandle_t handle = {}; + NFD_GetNativeWindowFromGLFWWindow( s_window, &handle ); + return handle.type; +#endif +} + +void* Backend::Handle() +{ +#ifdef TRACY_NO_FILESELECTOR + return nullptr; +#else + nfdwindowhandle_t handle = {}; + NFD_GetNativeWindowFromGLFWWindow( s_window, &handle ); + return handle.handle; +#endif +} diff --git a/profiler/src/BackendWayland.cpp b/profiler/src/BackendWayland.cpp index 949f3219..b9385615 100644 --- a/profiler/src/BackendWayland.cpp +++ b/profiler/src/BackendWayland.cpp @@ -1372,3 +1372,13 @@ float Backend::GetDpiScale() { return s_maxScale / 120.f; } + +size_t Backend::HandleType() +{ + return 0; +} + +void* Backend::Handle() +{ + return nullptr; +} diff --git a/profiler/src/main.cpp b/profiler/src/main.cpp index e254af00..9a96c251 100644 --- a/profiler/src/main.cpp +++ b/profiler/src/main.cpp @@ -361,7 +361,7 @@ int main( int argc, char** argv ) view.store( std::make_shared( RunOnMainThread, connectTo, port, SetWindowTitleCallback, SetupScaleCallback, AttentionCallback, s_achievements ), std::memory_order_release ); } - tracy::Fileselector::Init(); + tracy::Fileselector::Init( backend.HandleType(), backend.Handle() ); s_isElevated = IsElevated(); backend.Show(); diff --git a/profiler/src/profiler/TracyFileselector.cpp b/profiler/src/profiler/TracyFileselector.cpp index e6289f1c..2ad19a9e 100644 --- a/profiler/src/profiler/TracyFileselector.cpp +++ b/profiler/src/profiler/TracyFileselector.cpp @@ -13,10 +13,18 @@ namespace tracy::Fileselector static bool s_hasFailed = false; -void Init() +#if !defined TRACY_NO_FILESELECTOR && !defined __EMSCRIPTEN__ +static nfdwindowhandle_t s_windowHandle; +#endif + +void Init( size_t type, void* handle ) { #if !defined TRACY_NO_FILESELECTOR && !defined __EMSCRIPTEN__ NFD_Init(); + s_windowHandle = { + .type = type, + .handle = handle + }; #endif } diff --git a/profiler/src/profiler/TracyFileselector.hpp b/profiler/src/profiler/TracyFileselector.hpp index 7fd8ba44..25a6ae1b 100644 --- a/profiler/src/profiler/TracyFileselector.hpp +++ b/profiler/src/profiler/TracyFileselector.hpp @@ -1,12 +1,13 @@ #ifndef __TRACYFILESELECTOR_HPP__ #define __TRACYFILESELECTOR_HPP__ +#include #include namespace tracy::Fileselector { -void Init(); +void Init( size_t type, void* handle ); void Shutdown(); bool HasFailed();