Skip to content

Commit e99ae14

Browse files
committed
Added Wayland graphics support
1 parent 7fc36a5 commit e99ae14

File tree

9 files changed

+3533
-0
lines changed

9 files changed

+3533
-0
lines changed

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,11 @@ IF(NOT (ANDROID AND OSG_FIND_3RD_PARTY_DEPS))
864864
ENDIF()
865865
ENDIF()
866866

867+
IF(OSG_WINDOWING_SYSTEM STREQUAL "X11")
868+
# optional Wayland graphics also supported..
869+
FIND_PACKAGE(Wayland)
870+
ENDIF()
871+
867872
################################################################################
868873
# Create bin and lib directories if required
869874

CMakeModules/FindWayland.cmake

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Find Wayland development libraries & headers for wayland-egl & wayland-cursor & EGL
2+
#
3+
# WAYLAND_FOUND - system has a libwayland-[egl|client|cursor] + libEGL
4+
# WAYLAND_INCLUDE_DIR - where to find header files
5+
# WAYLAND_LIBRARIES - the libraries to link against Wayland
6+
#
7+
# copyright (c) 2022 Phil Ashby <[email protected]>
8+
# Redistribution and use of this file is allowed according to the terms of the BSD license.
9+
#
10+
11+
# Use PkgConfig to find includes and libs
12+
find_package(PkgConfig QUIET)
13+
if (PKG_CONFIG_FOUND)
14+
PKG_CHECK_MODULES(WAYLAND QUIET wayland-egl wayland-cursor egl)
15+
endif ()

src/osgViewer/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,16 @@ ELSE()
248248

249249
SET(LIB_EXTRA_LIBS ${X11_X11_LIB} ${LIB_EXTRA_LIBS})
250250
ENDIF(APPLE)
251+
252+
# Add Wayland here if available..
253+
IF(WAYLAND_FOUND)
254+
ADD_DEFINITIONS(-DOSGVIEWER_USE_WAYLAND)
255+
SET(LIB_COMMON_FILES ${LIB_COMMON_FILES}
256+
GraphicsWindowWayland.cpp
257+
xdg-shell.c
258+
xdg-decoration-unstable-v1.c)
259+
SET(LIB_EXTRA_LIBS ${WAYLAND_LIBRARIES} ${LIB_EXTRA_LIBS})
260+
ENDIF()
251261
ELSE()
252262
MESSAGE(STATUS "Windowing system not supported")
253263
ENDIF()

src/osgViewer/GraphicsWindowWayland.cpp

Lines changed: 907 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#pragma once
2+
#include <wayland-client.h>
3+
4+
// declare our function for accessing a data_device from the Wayland connection
5+
#ifdef __cplusplus
6+
extern "C" {
7+
#endif
8+
struct wl_data_device* getWaylandDataDevice();
9+
struct wl_data_source* getWaylandDataSource();
10+
uint32_t getWaylandLastKeySerial();
11+
struct wl_display* getWaylandDisplay();
12+
#ifdef __cplusplus
13+
}
14+
#endif
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/* Generated by wayland-scanner 1.18.0 */
2+
3+
/*
4+
* Copyright © 2018 Simon Ser
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a
7+
* copy of this software and associated documentation files (the "Software"),
8+
* to deal in the Software without restriction, including without limitation
9+
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
10+
* and/or sell copies of the Software, and to permit persons to whom the
11+
* Software is furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice (including the next
14+
* paragraph) shall be included in all copies or substantial portions of the
15+
* Software.
16+
*
17+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23+
* DEALINGS IN THE SOFTWARE.
24+
*/
25+
26+
#include <stdlib.h>
27+
#include <stdint.h>
28+
#include "wayland-util.h"
29+
30+
extern const struct wl_interface xdg_toplevel_interface;
31+
extern const struct wl_interface zxdg_toplevel_decoration_v1_interface;
32+
33+
static const struct wl_interface *xdg_decoration_unstable_v1_types[] = {
34+
NULL,
35+
&zxdg_toplevel_decoration_v1_interface,
36+
&xdg_toplevel_interface,
37+
};
38+
39+
static const struct wl_message zxdg_decoration_manager_v1_requests[] = {
40+
{ "destroy", "", xdg_decoration_unstable_v1_types + 0 },
41+
{ "get_toplevel_decoration", "no", xdg_decoration_unstable_v1_types + 1 },
42+
};
43+
44+
WL_EXPORT const struct wl_interface zxdg_decoration_manager_v1_interface = {
45+
"zxdg_decoration_manager_v1", 1,
46+
2, zxdg_decoration_manager_v1_requests,
47+
0, NULL,
48+
};
49+
50+
static const struct wl_message zxdg_toplevel_decoration_v1_requests[] = {
51+
{ "destroy", "", xdg_decoration_unstable_v1_types + 0 },
52+
{ "set_mode", "u", xdg_decoration_unstable_v1_types + 0 },
53+
{ "unset_mode", "", xdg_decoration_unstable_v1_types + 0 },
54+
};
55+
56+
static const struct wl_message zxdg_toplevel_decoration_v1_events[] = {
57+
{ "configure", "u", xdg_decoration_unstable_v1_types + 0 },
58+
};
59+
60+
WL_EXPORT const struct wl_interface zxdg_toplevel_decoration_v1_interface = {
61+
"zxdg_toplevel_decoration_v1", 1,
62+
3, zxdg_toplevel_decoration_v1_requests,
63+
1, zxdg_toplevel_decoration_v1_events,
64+
};
65+

0 commit comments

Comments
 (0)