diff options
author | 2019-10-13 13:50:38 +0200 | |
---|---|---|
committer | 2019-10-13 07:50:38 -0400 | |
commit | 0837e7451a84f95c29dbdb9bd6b8b931fee1635d (patch) | |
tree | 626bcbd250a7fbebdf5958a288d2f438d4f9fb5a /3rdparty/bgfx/examples/common/entry/entry_glfw.cpp | |
parent | c913ccb59d713ce0b91135520719ac5385e54358 (diff) |
WIP: sync bgfx, bx and bimg with latest upstream (#5723)
* Sync with bgfx upstream revision b91d0b6
* Sync with bx upstream revision d60912b
* Sync with bimg upstream revision bd81f60
* Add astc-codec decoder
* Rename VertexDecl to VertexLayout
* Rename UniformType enum Int1 to Sampler.
* Add NVN stub
* Fix unused-const-variable error on macOS
* Drop redundant explicit language parameters
buildoptions_cpp are only applied to c++ files and buildoptions_objcpp are only
applied to objective c++ files. As such, hardcoding -x offers no benefit while
preventing overrides (such as one needed by 3rdparty/bgfx/src/renderer_vk.cpp on
macOS) from working.
* Re-introduce -x c++ in places where C code is compiled as C++ to prevent clang from throwing a warning
* Build bgfx as Objective-C++ on macOS
It is needed due to included headers
* Enable Direct3D12 and Vulkan bgfx rendering backends
* Enable building of spirv shaders
* Properly escape /c in cmd call
* Comment out dx12 bgfx renderer
* Honor VERBOSE setting during shaders build
* Only invert hlsl shader XYZ_TO_sRGB matrix for opengl
* Add spirv shaders
* OpenGL ES needs transposed matrix too
* Metal needs transposed matrix as well
Diffstat (limited to '3rdparty/bgfx/examples/common/entry/entry_glfw.cpp')
-rw-r--r-- | 3rdparty/bgfx/examples/common/entry/entry_glfw.cpp | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp b/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp index 5e81dd9aece..c78ac057099 100644 --- a/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp +++ b/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2011-2018 Branimir Karadzic. All rights reserved. + * Copyright 2011-2019 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -15,8 +15,13 @@ #endif // GLFW_VERSION_MINOR < 2 #if BX_PLATFORM_LINUX || BX_PLATFORM_BSD -# define GLFW_EXPOSE_NATIVE_X11 -# define GLFW_EXPOSE_NATIVE_GLX +# if ENTRY_CONFIG_USE_WAYLAND +# include <wayland-egl.h> +# define GLFW_EXPOSE_NATIVE_WAYLAND +# else +# define GLFW_EXPOSE_NATIVE_X11 +# define GLFW_EXPOSE_NATIVE_GLX +# endif #elif BX_PLATFORM_OSX # define GLFW_EXPOSE_NATIVE_COCOA # define GLFW_EXPOSE_NATIVE_NSGL @@ -40,7 +45,22 @@ namespace entry static void* glfwNativeWindowHandle(GLFWwindow* _window) { # if BX_PLATFORM_LINUX || BX_PLATFORM_BSD +# if ENTRY_CONFIG_USE_WAYLAND + wl_egl_window *win_impl = (wl_egl_window*)glfwGetWindowUserPointer(_window); + if(!win_impl) + { + int width, height; + glfwGetWindowSize(_window, &width, &height); + struct wl_surface* surface = (struct wl_surface*)glfwGetWaylandWindow(_window); + if(!surface) + return nullptr; + win_impl = wl_egl_window_create(surface, width, height); + glfwSetWindowUserPointer(_window, (void*)(uintptr_t)win_impl); + } + return (void*)(uintptr_t)win_impl; +# else return (void*)(uintptr_t)glfwGetX11Window(_window); +# endif # elif BX_PLATFORM_OSX return glfwGetCocoaWindow(_window); # elif BX_PLATFORM_WINDOWS @@ -48,11 +68,32 @@ namespace entry # endif // BX_PLATFORM_ } + static void glfwDestroyWindowImpl(GLFWwindow *_window) + { + if(!_window) + return; +# if BX_PLATFORM_LINUX || BX_PLATFORM_BSD +# if ENTRY_CONFIG_USE_WAYLAND + wl_egl_window *win_impl = (wl_egl_window*)glfwGetWindowUserPointer(_window); + if(win_impl) + { + glfwSetWindowUserPointer(_window, nullptr); + wl_egl_window_destroy(win_impl); + } +# endif +# endif + glfwDestroyWindow(_window); + } + static void glfwSetWindow(GLFWwindow* _window) { bgfx::PlatformData pd; # if BX_PLATFORM_LINUX || BX_PLATFORM_BSD +# if ENTRY_CONFIG_USE_WAYLAND + pd.ndt = glfwGetWaylandDisplay(); +# else pd.ndt = glfwGetX11Display(); + #endif # elif BX_PLATFORM_OSX pd.ndt = NULL; # elif BX_PLATFORM_WINDOWS @@ -506,7 +547,7 @@ namespace entry { GLFWwindow* window = m_windows[msg->m_handle.idx]; m_eventQueue.postWindowEvent(msg->m_handle); - glfwDestroyWindow(window); + glfwDestroyWindowImpl(window); m_windows[msg->m_handle.idx] = NULL; } } @@ -598,7 +639,7 @@ namespace entry m_eventQueue.postExitEvent(); m_thread.shutdown(); - glfwDestroyWindow(m_windows[0]); + glfwDestroyWindowImpl(m_windows[0]); glfwTerminate(); return m_thread.getExitCode(); |