Allow simultaneous X11 and Wayland support (#3152)

* Allow simultaneous X11 and Wayland support

* Add NativeWindowHandleType

* Set default value for g_platformData.type

* Use g_platformData.type to check for a native Wayland window

* Stub getNativeWindowHandleType on platform where Wayland is not an option

* Implement getNativeWindowHandleType for GLFW

* Add getNativeWindowHandleType to the remaining C++ examples

* Add getNativeWindowHandleType to the C example
This commit is contained in:
Julian Sikorski 2023-08-17 16:54:31 +02:00 committed by GitHub
parent a16f603e3c
commit f4d463990a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
64 changed files with 240 additions and 65 deletions

View File

@ -34,6 +34,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -149,6 +149,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -508,6 +508,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -121,6 +121,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -32,6 +32,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -84,6 +84,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -104,6 +104,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -331,6 +331,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -247,6 +247,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -159,6 +159,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -73,6 +73,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -56,6 +56,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -48,6 +48,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -814,6 +814,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_viewState.m_width; init.resolution.width = m_viewState.m_width;
init.resolution.height = m_viewState.m_height; init.resolution.height = m_viewState.m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -1786,6 +1786,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_viewState.m_width; init.resolution.width = m_viewState.m_width;
init.resolution.height = m_viewState.m_height; init.resolution.height = m_viewState.m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -80,6 +80,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -1159,6 +1159,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_viewState.m_width; init.resolution.width = m_viewState.m_width;
init.resolution.height = m_viewState.m_height; init.resolution.height = m_viewState.m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -131,6 +131,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -420,6 +420,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -171,6 +171,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -1404,6 +1404,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -213,6 +213,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -88,6 +88,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -132,6 +132,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -9,6 +9,7 @@
extern bool entry_process_events(uint32_t* _width, uint32_t* _height, uint32_t* _debug, uint32_t* _reset); extern bool entry_process_events(uint32_t* _width, uint32_t* _height, uint32_t* _debug, uint32_t* _reset);
extern void* entry_get_default_native_window_handle(void); extern void* entry_get_default_native_window_handle(void);
extern void* entry_get_native_display_handle(void); extern void* entry_get_native_display_handle(void);
extern bgfx_native_window_handle_type_t entry_get_native_window_handle_type(void);
uint16_t uint16_max(uint16_t _a, uint16_t _b) uint16_t uint16_max(uint16_t _a, uint16_t _b)
{ {
@ -29,6 +30,7 @@ int32_t _main_(int32_t _argc, char** _argv)
init.platformData.nwh = entry_get_default_native_window_handle(); init.platformData.nwh = entry_get_default_native_window_handle();
init.platformData.ndt = entry_get_native_display_handle(); init.platformData.ndt = entry_get_native_display_handle();
init.platformData.type = entry_get_native_window_handle_type();
bgfx_init(&init); bgfx_init(&init);
bgfx_reset(width, height, reset, init.resolution.format); bgfx_reset(width, height, reset, init.resolution.format);

View File

@ -84,6 +84,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -80,6 +80,7 @@ ExampleTerrain(const char* _name, const char* _description, const char* _url)
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -293,6 +293,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -780,6 +780,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -40,6 +40,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -213,6 +213,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -248,6 +248,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -130,6 +130,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -126,6 +126,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -104,6 +104,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -420,6 +420,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -330,6 +330,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -200,6 +200,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -271,6 +271,7 @@ namespace
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -82,6 +82,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -339,6 +339,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -264,6 +264,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -253,6 +253,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -265,6 +265,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -247,6 +247,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -429,6 +429,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -146,6 +146,7 @@ public:
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -85,6 +85,7 @@ namespace
init.vendorId = args.m_pciId; init.vendorId = args.m_pciId;
init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle); init.platformData.nwh = entry::getNativeWindowHandle(entry::kDefaultWindowHandle);
init.platformData.ndt = entry::getNativeDisplayHandle(); init.platformData.ndt = entry::getNativeDisplayHandle();
init.platformData.type = entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
init.resolution.width = m_width; init.resolution.width = m_width;
init.resolution.height = m_height; init.resolution.height = m_height;
init.resolution.reset = m_reset; init.resolution.reset = m_reset;

View File

@ -1037,3 +1037,8 @@ extern "C" void* entry_get_native_display_handle()
{ {
return entry::getNativeDisplayHandle(); return entry::getNativeDisplayHandle();
} }
extern "C" bgfx::NativeWindowHandleType::Enum entry_get_native_window_handle_type()
{
return entry::getNativeWindowHandleType(entry::kDefaultWindowHandle);
}

View File

@ -7,6 +7,7 @@
#define ENTRY_H_HEADER_GUARD #define ENTRY_H_HEADER_GUARD
#include "dbg.h" #include "dbg.h"
#include <bgfx/bgfx.h>
#include <bx/bx.h> #include <bx/bx.h>
#include <bx/filepath.h> #include <bx/filepath.h>
#include <bx/string.h> #include <bx/string.h>
@ -297,6 +298,9 @@ namespace entry
/// ///
void* getNativeDisplayHandle(); void* getNativeDisplayHandle();
///
bgfx::NativeWindowHandleType::Enum getNativeWindowHandleType(WindowHandle _handle);
/// ///
void setCurrentDir(const char* _dir); void setCurrentDir(const char* _dir);

View File

@ -550,6 +550,11 @@ namespace entry
return NULL; return NULL;
} }
bgfx::NativeWindowHandleType::Enum getNativeWindowHandleType(WindowHandle _handle)
{
return bgfx::NativeWindowHandleType::Default;
}
int32_t MainThreadEntry::threadFunc(bx::Thread* _thread, void* _userData) int32_t MainThreadEntry::threadFunc(bx::Thread* _thread, void* _userData)
{ {
BX_UNUSED(_thread); BX_UNUSED(_thread);

View File

@ -875,6 +875,19 @@ namespace entry
# endif // BX_PLATFORM_* # endif // BX_PLATFORM_*
} }
bgfx::NativeWindowHandleType::Enum getNativeWindowHandleType(WindowHandle _handle)
{
# if BX_PLATFORM_LINUX || BX_PLATFORM_BSD
# if ENTRY_CONFIG_USE_WAYLAND
return bgfx::NativeWindowHandleType::Wayland;
# else
return bgfx::NativeWindowHandleType::Default;
# endif // ENTRY_CONFIG_USE_WAYLAND
# else
return bgfx::NativeWindowHandleType::Default;
# endif // BX_PLATFORM_*
}
int32_t MainThreadEntry::threadFunc(bx::Thread* _thread, void* _userData) int32_t MainThreadEntry::threadFunc(bx::Thread* _thread, void* _userData)
{ {
BX_UNUSED(_thread); BX_UNUSED(_thread);

View File

@ -427,6 +427,11 @@ namespace entry
{ {
return NULL; return NULL;
} }
bgfx::NativeWindowHandleType::Enum getNativeWindowHandleType(WindowHandle _handle)
{
return bgfx::NativeWindowHandleType::Default;
}
} }
int main(int _argc, const char* const* _argv) int main(int _argc, const char* const* _argv)

View File

@ -161,6 +161,11 @@ namespace entry
return NULL; return NULL;
} }
bgfx::NativeWindowHandleType::Enum getNativeWindowHandleType(WindowHandle _handle)
{
return bgfx::NativeWindowHandleType::Default;
}
} // namespace entry } // namespace entry
using namespace entry; using namespace entry;

View File

@ -78,6 +78,11 @@ namespace entry
return NULL; return NULL;
} }
bgfx::NativeWindowHandleType::Enum getNativeWindowHandleType(WindowHandle _handle)
{
return bgfx::NativeWindowHandleType::Default;
}
} // namespace entry } // namespace entry
int main(int _argc, const char* const* _argv) int main(int _argc, const char* const* _argv)

View File

@ -725,6 +725,11 @@ namespace entry
return NULL; return NULL;
} }
bgfx::NativeWindowHandleType::Enum getNativeWindowHandleType(WindowHandle _handle)
{
return bgfx::NativeWindowHandleType::Default;
}
} // namespace entry } // namespace entry
@implementation AppDelegate @implementation AppDelegate

View File

@ -50,21 +50,24 @@ namespace entry
# if BX_PLATFORM_LINUX || BX_PLATFORM_BSD # if BX_PLATFORM_LINUX || BX_PLATFORM_BSD
# if ENTRY_CONFIG_USE_WAYLAND # if ENTRY_CONFIG_USE_WAYLAND
wl_egl_window *win_impl = (wl_egl_window*)SDL_GetWindowData(_window, "wl_egl_window"); if (wmi.subsystem == SDL_SYSWM_WAYLAND)
if(!win_impl) {
{ wl_egl_window *win_impl = (wl_egl_window*)SDL_GetWindowData(_window, "wl_egl_window");
int width, height; if(!win_impl)
SDL_GetWindowSize(_window, &width, &height); {
struct wl_surface* surface = wmi.info.wl.surface; int width, height;
if(!surface) SDL_GetWindowSize(_window, &width, &height);
return nullptr; struct wl_surface* surface = wmi.info.wl.surface;
win_impl = wl_egl_window_create(surface, width, height); if(!surface)
SDL_SetWindowData(_window, "wl_egl_window", win_impl); return nullptr;
} win_impl = wl_egl_window_create(surface, width, height);
return (void*)(uintptr_t)win_impl; SDL_SetWindowData(_window, "wl_egl_window", win_impl);
# else }
return (void*)wmi.info.x11.window; return (void*)(uintptr_t)win_impl;
# endif }
else
# endif // ENTRY_CONFIG_USE_WAYLAND
return (void*)wmi.info.x11.window;
# elif BX_PLATFORM_OSX || BX_PLATFORM_IOS # elif BX_PLATFORM_OSX || BX_PLATFORM_IOS
return wmi.info.cocoa.window; return wmi.info.cocoa.window;
# elif BX_PLATFORM_WINDOWS # elif BX_PLATFORM_WINDOWS
@ -1145,18 +1148,38 @@ namespace entry
{ {
return NULL; return NULL;
} }
# if BX_PLATFORM_LINUX || BX_PLATFORM_BSD # if BX_PLATFORM_LINUX || BX_PLATFORM_BSD
# if ENTRY_CONFIG_USE_WAYLAND # if ENTRY_CONFIG_USE_WAYLAND
return wmi.info.wl.display; if (wmi.subsystem == SDL_SYSWM_WAYLAND)
# else return wmi.info.wl.display;
return wmi.info.x11.display; else
# endif // ENTRY_CONFIG_USE_WAYLAND # endif // ENTRY_CONFIG_USE_WAYLAND
return wmi.info.x11.display;
# else # else
return NULL; return NULL;
# endif // BX_PLATFORM_* # endif // BX_PLATFORM_*
} }
bgfx::NativeWindowHandleType::Enum getNativeWindowHandleType(WindowHandle _handle)
{
SDL_SysWMinfo wmi;
SDL_VERSION(&wmi.version);
if (!SDL_GetWindowWMInfo(s_ctx.m_window[_handle.idx], &wmi) )
{
return bgfx::NativeWindowHandleType::Default;
}
# if BX_PLATFORM_LINUX || BX_PLATFORM_BSD
# if ENTRY_CONFIG_USE_WAYLAND
if (wmi.subsystem == SDL_SYSWM_WAYLAND)
return bgfx::NativeWindowHandleType::Wayland;
else
# endif // ENTRY_CONFIG_USE_WAYLAND
return bgfx::NativeWindowHandleType::Default;
# else
return bgfx::NativeWindowHandleType::Default;
# endif // BX_PLATFORM_*
}
int32_t MainThreadEntry::threadFunc(bx::Thread* _thread, void* _userData) int32_t MainThreadEntry::threadFunc(bx::Thread* _thread, void* _userData)
{ {
BX_UNUSED(_thread); BX_UNUSED(_thread);

View File

@ -1169,6 +1169,11 @@ namespace entry
return NULL; return NULL;
} }
bgfx::NativeWindowHandleType::Enum getNativeWindowHandleType(WindowHandle _handle)
{
return bgfx::NativeWindowHandleType::Default;
}
int32_t MainThreadEntry::threadFunc(bx::Thread* /*_thread*/, void* _userData) int32_t MainThreadEntry::threadFunc(bx::Thread* /*_thread*/, void* _userData)
{ {
MainThreadEntry* self = (MainThreadEntry*)_userData; MainThreadEntry* self = (MainThreadEntry*)_userData;

View File

@ -771,6 +771,11 @@ namespace entry
return s_ctx.m_display; return s_ctx.m_display;
} }
bgfx::NativeWindowHandleType::Enum getNativeWindowHandleType(WindowHandle _handle)
{
return bgfx::NativeWindowHandleType::Default;
}
} // namespace entry } // namespace entry
int main(int _argc, const char* const* _argv) int main(int _argc, const char* const* _argv)

View File

@ -403,6 +403,22 @@ namespace bgfx
}; };
}; };
/// Native window handle type.
///
/// @attention C99's equivalent binding is `bgfx_native_window_handle_type_t`.
///
struct NativeWindowHandleType
{
enum Enum
{
Default = 0, //!< Platform default handle type (X11 on Linux).
Wayland, //!< Wayland.
Count
};
};
static const uint16_t kInvalidHandle = UINT16_MAX; static const uint16_t kInvalidHandle = UINT16_MAX;
BGFX_HANDLE(DynamicIndexBufferHandle) BGFX_HANDLE(DynamicIndexBufferHandle)
@ -622,15 +638,16 @@ namespace bgfx
{ {
PlatformData(); PlatformData();
void* ndt; //!< Native display type (*nix specific). void* ndt; //!< Native display type (*nix specific).
void* nwh; //!< Native window handle. If `NULL`, bgfx will create a headless void* nwh; //!< Native window handle. If `NULL`, bgfx will create a headless
/// context/device, provided the rendering API supports it. /// context/device, provided the rendering API supports it.
void* context; //!< GL context, D3D device, or Vulkan device. If `NULL`, bgfx void* context; //!< GL context, D3D device, or Vulkan device. If `NULL`, bgfx
/// will create context/device. /// will create context/device.
void* backBuffer; //!< GL back-buffer, or D3D render target view. If `NULL` bgfx will void* backBuffer; //!< GL back-buffer, or D3D render target view. If `NULL` bgfx will
/// create back-buffer color surface. /// create back-buffer color surface.
void* backBufferDS; //!< Backbuffer depth/stencil. If `NULL`, bgfx will create a back-buffer void* backBufferDS; //!< Backbuffer depth/stencil. If `NULL`, bgfx will create a back-buffer
/// depth/stencil surface. /// depth/stencil surface.
NativeWindowHandleType::Enum type; //!< Handle type. Needed for platforms having more than one option.
}; };
/// Backbuffer resolution and reset parameters. /// Backbuffer resolution and reset parameters.

View File

@ -391,6 +391,19 @@ typedef enum bgfx_view_mode
} bgfx_view_mode_t; } bgfx_view_mode_t;
/**
* Native window handle type..
*
*/
typedef enum bgfx_native_window_handle_type
{
BGFX_NATIVE_WINDOW_HANDLE_TYPE_DEFAULT, /** ( 0) Platform default handle type (X11 on Linux) */
BGFX_NATIVE_WINDOW_HANDLE_TYPE_WAYLAND, /** ( 1) Wayland. */
BGFX_NATIVE_WINDOW_HANDLE_TYPE_COUNT
} bgfx_native_window_handle_type_t;
/** /**
* Render frame enum. * Render frame enum.
* *
@ -625,6 +638,11 @@ typedef struct bgfx_platform_data_s
*/ */
void* backBufferDS; void* backBufferDS;
/**
* Handle type. Needed for platforms having more than one option.
*/
bgfx_native_window_handle_type_t type;
} bgfx_platform_data_t; } bgfx_platform_data_t;
/** /**

View File

@ -3437,6 +3437,7 @@ namespace bgfx
, context(NULL) , context(NULL)
, backBuffer(NULL) , backBuffer(NULL)
, backBufferDS(NULL) , backBufferDS(NULL)
, type(NativeWindowHandleType::Default)
{ {
} }

View File

@ -1230,7 +1230,7 @@ VK_IMPORT
BX_TRACE("\t%s", layer.m_name); BX_TRACE("\t%s", layer.m_name);
} }
} }
#if BX_PLATFORM_OSX #if BX_PLATFORM_OSX || WL_EGL_PLATFORM
uint32_t numEnabledExtensions = headless ? 0 : 3; uint32_t numEnabledExtensions = headless ? 0 : 3;
const char* enabledExtension[Extension::Count + 3] = const char* enabledExtension[Extension::Count + 3] =
@ -6776,9 +6776,9 @@ VK_DESTROY
} }
} }
#elif BX_PLATFORM_LINUX #elif BX_PLATFORM_LINUX
#if WL_EGL_PLATFORM
{ {
if (NULL != vkCreateWaylandSurfaceKHR) #if WL_EGL_PLATFORM
if (g_platformData.type == bgfx::NativeWindowHandleType::Wayland)
{ {
VkWaylandSurfaceCreateInfoKHR sci; VkWaylandSurfaceCreateInfoKHR sci;
sci.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR; sci.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR;
@ -6788,45 +6788,46 @@ VK_DESTROY
sci.surface = (wl_surface*)((wl_egl_window*)g_platformData.nwh)->surface; sci.surface = (wl_surface*)((wl_egl_window*)g_platformData.nwh)->surface;
result = vkCreateWaylandSurfaceKHR(instance, &sci, allocatorCb, &m_surface); result = vkCreateWaylandSurfaceKHR(instance, &sci, allocatorCb, &m_surface);
} }
} else
#else #endif // WL_EGL_PLATFORM
{
if (NULL != vkCreateXlibSurfaceKHR)
{ {
VkXlibSurfaceCreateInfoKHR sci; if (NULL != vkCreateXlibSurfaceKHR)
sci.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR;
sci.pNext = NULL;
sci.flags = 0;
sci.dpy = (Display*)g_platformData.ndt;
sci.window = (Window)m_nwh;
result = vkCreateXlibSurfaceKHR(instance, &sci, allocatorCb, &m_surface);
}
if (VK_SUCCESS != result)
{
void* xcbdll = bx::dlopen("libX11-xcb.so.1");
if (NULL != xcbdll
&& NULL != vkCreateXcbSurfaceKHR)
{ {
typedef xcb_connection_t* (*PFN_XGETXCBCONNECTION)(Display*); VkXlibSurfaceCreateInfoKHR sci;
PFN_XGETXCBCONNECTION XGetXCBConnection = (PFN_XGETXCBCONNECTION)bx::dlsym(xcbdll, "XGetXCBConnection"); sci.sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR;
sci.pNext = NULL;
sci.flags = 0;
sci.dpy = (Display*)g_platformData.ndt;
sci.window = (Window)m_nwh;
result = vkCreateXlibSurfaceKHR(instance, &sci, allocatorCb, &m_surface);
}
union { void* ptr; xcb_window_t window; } cast = { m_nwh }; if (VK_SUCCESS != result)
{
void* xcbdll = bx::dlopen("libX11-xcb.so.1");
VkXcbSurfaceCreateInfoKHR sci; if (NULL != xcbdll
sci.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; && NULL != vkCreateXcbSurfaceKHR)
sci.pNext = NULL; {
sci.flags = 0; typedef xcb_connection_t* (*PFN_XGETXCBCONNECTION)(Display*);
sci.connection = XGetXCBConnection( (Display*)g_platformData.ndt); PFN_XGETXCBCONNECTION XGetXCBConnection = (PFN_XGETXCBCONNECTION)bx::dlsym(xcbdll, "XGetXCBConnection");
sci.window = cast.window;
result = vkCreateXcbSurfaceKHR(instance, &sci, allocatorCb, &m_surface);
bx::dlclose(xcbdll); union { void* ptr; xcb_window_t window; } cast = { m_nwh };
VkXcbSurfaceCreateInfoKHR sci;
sci.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
sci.pNext = NULL;
sci.flags = 0;
sci.connection = XGetXCBConnection( (Display*)g_platformData.ndt);
sci.window = cast.window;
result = vkCreateXcbSurfaceKHR(instance, &sci, allocatorCb, &m_surface);
bx::dlclose(xcbdll);
}
} }
} }
} }
#endif // WL_EGL_PLATFORM
#elif BX_PLATFORM_OSX #elif BX_PLATFORM_OSX
{ {
if (NULL != vkCreateMacOSSurfaceMVK) if (NULL != vkCreateMacOSSurfaceMVK)

View File

@ -17,10 +17,13 @@
#elif BX_PLATFORM_LINUX #elif BX_PLATFORM_LINUX
# if WL_EGL_PLATFORM # if WL_EGL_PLATFORM
# define VK_USE_PLATFORM_WAYLAND_KHR # define VK_USE_PLATFORM_WAYLAND_KHR
# define KHR_SURFACE_EXTENSION_NAME VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME # endif // WL_EGL_PLATFORM
# define VK_USE_PLATFORM_XLIB_KHR
# define VK_USE_PLATFORM_XCB_KHR
# if WL_EGL_PLATFORM
# define KHR_SURFACE_EXTENSION_NAME VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, \
VK_KHR_XCB_SURFACE_EXTENSION_NAME
# else # else
# define VK_USE_PLATFORM_XLIB_KHR
# define VK_USE_PLATFORM_XCB_KHR
# define KHR_SURFACE_EXTENSION_NAME VK_KHR_XCB_SURFACE_EXTENSION_NAME # define KHR_SURFACE_EXTENSION_NAME VK_KHR_XCB_SURFACE_EXTENSION_NAME
# endif // WL_EGL_PLATFORM # endif // WL_EGL_PLATFORM
# define VK_IMPORT_INSTANCE_PLATFORM VK_IMPORT_INSTANCE_LINUX # define VK_IMPORT_INSTANCE_PLATFORM VK_IMPORT_INSTANCE_LINUX
@ -75,6 +78,12 @@
/* VK_KHR_wayland_surface */ \ /* VK_KHR_wayland_surface */ \
VK_IMPORT_INSTANCE_FUNC(true, vkCreateWaylandSurfaceKHR); \ VK_IMPORT_INSTANCE_FUNC(true, vkCreateWaylandSurfaceKHR); \
VK_IMPORT_INSTANCE_FUNC(true, vkGetPhysicalDeviceWaylandPresentationSupportKHR); \ VK_IMPORT_INSTANCE_FUNC(true, vkGetPhysicalDeviceWaylandPresentationSupportKHR); \
/* VK_KHR_xlib_surface */ \
VK_IMPORT_INSTANCE_FUNC(true, vkCreateXlibSurfaceKHR); \
VK_IMPORT_INSTANCE_FUNC(true, vkGetPhysicalDeviceXlibPresentationSupportKHR); \
/* VK_KHR_xcb_surface */ \
VK_IMPORT_INSTANCE_FUNC(true, vkCreateXcbSurfaceKHR); \
VK_IMPORT_INSTANCE_FUNC(true, vkGetPhysicalDeviceXcbPresentationSupportKHR); \
#else #else
#define VK_IMPORT_INSTANCE_LINUX \ #define VK_IMPORT_INSTANCE_LINUX \