diff options
Diffstat (limited to '3rdparty/bgfx/include/bgfxplatform.h')
-rw-r--r-- | 3rdparty/bgfx/include/bgfxplatform.h | 122 |
1 files changed, 99 insertions, 23 deletions
diff --git a/3rdparty/bgfx/include/bgfxplatform.h b/3rdparty/bgfx/include/bgfxplatform.h index 4598fc1e7d7..8a2cf5a0711 100644 --- a/3rdparty/bgfx/include/bgfxplatform.h +++ b/3rdparty/bgfx/include/bgfxplatform.h @@ -30,7 +30,19 @@ namespace bgfx /// allow creating separate rendering thread. If it is called before /// to bgfx::init, render thread won't be created by bgfx::init call. RenderFrame::Enum renderFrame(); -} + + struct PlatformData + { + void* ndt; //< Native display type + void* nwh; //< Native window handle + void* context; //< GL context, or D3D device + void* backBuffer; //< GL backbuffer, or D3D render target view + void* backBufferDS; //< Backbuffer depth/stencil. + }; + + void setPlatformData(const PlatformData& _hooks); + +} // namespace bgfx #if BX_PLATFORM_ANDROID # include <android/native_window.h> @@ -38,7 +50,16 @@ namespace bgfx namespace bgfx { /// - void androidSetWindow(::ANativeWindow* _window); + inline void androidSetWindow(::ANativeWindow* _window) + { + PlatformData pd; + pd.ndt = NULL; + pd.nwh = _window; + pd.context = NULL; + pd.backBuffer = NULL; + pd.backBufferDS = NULL; + setPlatformData(pd); + } } // namespace bgfx @@ -46,7 +67,16 @@ namespace bgfx namespace bgfx { /// - void iosSetEaglLayer(void* _layer); + inline void iosSetEaglLayer(void* _window) + { + PlatformData pd; + pd.ndt = NULL; + pd.nwh = _window; + pd.context = NULL; + pd.backBuffer = NULL; + pd.backBufferDS = NULL; + setPlatformData(pd); + } } // namespace bgfx @@ -55,7 +85,16 @@ namespace bgfx namespace bgfx { /// - void x11SetDisplayWindow(void* _display, uint32_t _window, void* _glx = NULL); + inline void x11SetDisplayWindow(void* _display, uint32_t _window, void* _glx = NULL) + { + PlatformData pd; + pd.ndt = _display; + pd.nwh = (void*)(uintptr_t)_window; + pd.context = _glx; + pd.backBuffer = NULL; + pd.backBufferDS = NULL; + setPlatformData(pd); + } } // namespace bgfx @@ -76,7 +115,16 @@ namespace bgfx namespace bgfx { /// - void osxSetNSWindow(void* _window, void* _nsgl = NULL); + inline void osxSetNSWindow(void* _window, void* _nsgl = NULL) + { + PlatformData pd; + pd.ndt = NULL; + pd.nwh = _window; + pd.context = _nsgl; + pd.backBuffer = NULL; + pd.backBufferDS = NULL; + setPlatformData(pd); + } } // namespace bgfx @@ -86,7 +134,16 @@ namespace bgfx namespace bgfx { /// - void winSetHwnd(::HWND _window); + inline void winSetHwnd(::HWND _window) + { + PlatformData pd; + pd.ndt = NULL; + pd.nwh = _window; + pd.context = NULL; + pd.backBuffer = NULL; + pd.backBufferDS = NULL; + setPlatformData(pd); + } } // namespace bgfx @@ -96,18 +153,25 @@ namespace bgfx namespace bgfx { /// - void winrtSetWindow(IUnknown* _window); + inline void winrtSetWindow(::IUnknown* _window) + { + PlatformData pd; + pd.ndt = NULL; + pd.nwh = _window; + pd.context = NULL; + pd.backBuffer = NULL; + pd.backBufferDS = NULL; + setPlatformData(pd); + } } // namespace bgfx #endif // BX_PLATFORM_ -#if defined(_SDL_H) -// If SDL.h is included before bgfxplatform.h we can enable SDL window +#if defined(_SDL_syswm_h) +// If SDL_syswm.h is included before bgfxplatform.h we can enable SDL window // interop convenience code. -# include <SDL2/SDL_syswm.h> - namespace bgfx { /// @@ -120,13 +184,21 @@ namespace bgfx return false; } + PlatformData pd; # if BX_PLATFORM_LINUX || BX_PLATFORM_FREEBSD - x11SetDisplayWindow(wmi.info.x11.display, wmi.info.x11.window); + pd.ndt = wmi.info.x11.display; + pd.nwh = (void*)(uintptr_t)wmi.info.x11.window; # elif BX_PLATFORM_OSX - osxSetNSWindow(wmi.info.cocoa.window); + pd.ndt = NULL; + pd.nwh = wmi.info.cocoa.window; # elif BX_PLATFORM_WINDOWS - winSetHwnd(wmi.info.win.window); + pd.ndt = NULL; + pd.nwh = wmi.info.win.window; # endif // BX_PLATFORM_ + pd.context = NULL; + pd.backBuffer = NULL; + pd.backBufferDS = NULL; + setPlatformData(pd); return true; } @@ -153,19 +225,23 @@ namespace bgfx { inline void glfwSetWindow(GLFWwindow* _window) { + PlatformData pd; # if BX_PLATFORM_LINUX || BX_PLATFORM_FREEBSD - ::Display* display = glfwGetX11Display(); - ::Window window = glfwGetX11Window(_window); - void* glx = glfwGetGLXContext(_window); - x11SetDisplayWindow(display, window, glx); + pd.ndt = glfwGetX11Display(); + pd.nwh = (void*)(uintptr_t)glfwGetX11Window(_window); + pd.context = glfwGetGLXContext(_window); # elif BX_PLATFORM_OSX - void* window = glfwGetCocoaWindow(_window); - void* nsgl = glfwGetNSGLContext(_window); - osxSetNSWindow(window, nsgl); + pd.ndt = NULL; + pd.nwh = glfwGetCocoaWindow(_window); + pd.context = glfwGetNSGLContext(_window); # elif BX_PLATFORM_WINDOWS - HWND hwnd = glfwGetWin32Window(_window); - winSetHwnd(hwnd); + pd.ndt = NULL; + pd.nwh = glfwGetWin32Window(_window); + pd.context = NULL; # endif // BX_PLATFORM_WINDOWS + pd.backBuffer = NULL; + pd.backBufferDS = NULL; + setPlatformData(pd); } } // namespace bgfx |