summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/examples/common/entry/entry_glfw.cpp
diff options
context:
space:
mode:
author Julian Sikorski <belegdol+github@gmail.com>2019-10-13 13:50:38 +0200
committer R. Belmont <rb6502@users.noreply.github.com>2019-10-13 07:50:38 -0400
commit0837e7451a84f95c29dbdb9bd6b8b931fee1635d (patch)
tree626bcbd250a7fbebdf5958a288d2f438d4f9fb5a /3rdparty/bgfx/examples/common/entry/entry_glfw.cpp
parentc913ccb59d713ce0b91135520719ac5385e54358 (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.cpp51
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();