diff --git a/cmake/options.cmake b/cmake/options.cmake index 3db3c77..f815d54 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -22,6 +22,8 @@ option(ENABLE_AGL_CLIENT "Enable AGL Shell" OFF) option(ENABLE_IVI_SHELL_CLIENT "Enable IVI Shell Client" OFF) option(ENABLE_DRM_LEASE_CLIENT "Enable DRM Lease Client" OFF) +option(ENABLE_EGL "Enable EGL dependency" ON) + # # Link Time Optimization # diff --git a/cmake/wayland-protocols.h.in b/cmake/wayland-protocols.h.in index 39b5398..8dc3a31 100644 --- a/cmake/wayland-protocols.h.in +++ b/cmake/wayland-protocols.h.in @@ -24,6 +24,8 @@ #cmakedefine01 ENABLE_IVI_SHELL_CLIENT #cmakedefine01 ENABLE_DRM_LEASE_CLIENT +#cmakedefine01 ENABLE_EGL + #cmakedefine01 HAS_WAYLAND_PROTOCOL_XDG_SHELL #cmakedefine01 HAS_WAYLAND_PROTOCOL_AGL_SHELL #cmakedefine01 HAS_WAYLAND_PROTOCOL_AGL_SHELL_DESKTOP diff --git a/cmake/wayland.cmake b/cmake/wayland.cmake index 95f7313..658d903 100644 --- a/cmake/wayland.cmake +++ b/cmake/wayland.cmake @@ -24,7 +24,10 @@ option(ENABLE_IVI_SHELL_CLIENT "Enable ivi-shell Client" OFF) option(ENABLE_DRM_LEASE_CLIENT "Enable DRM Lease Client" OFF) find_package(PkgConfig REQUIRED) -pkg_check_modules(WAYLAND REQUIRED IMPORTED_TARGET wayland-client wayland-egl wayland-cursor xkbcommon) +pkg_check_modules(WAYLAND REQUIRED IMPORTED_TARGET wayland-client wayland-cursor xkbcommon) +if (ENABLE_EGL) + pkg_check_modules(WAYLAND_EGL REQUIRED IMPORTED_TARGET wayland-egl) +endif () include(CheckFunctionExists) check_function_exists(memfd_create HAVE_MEMFD_CREATE) @@ -120,6 +123,9 @@ configure_file(cmake/wayland-protocols.h.in ${CMAKE_CURRENT_BINARY_DIR}/protocol add_library(wayland-gen STATIC ${WAYLAND_PROTOCOL_SOURCES}) target_link_libraries(wayland-gen PUBLIC PkgConfig::WAYLAND) +if (ENABLE_EGL) + target_link_libraries(wayland-gen PUBLIC PkgConfig::WAYLAND_EGL) +endif () target_include_directories(wayland-gen PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}/protocols diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index e09a56c..18f131e 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -15,23 +15,32 @@ # -# -# simple-egl -# -find_package(PkgConfig REQUIRED) -pkg_check_modules(GLESv2 IMPORTED_TARGET glesv2) +if (ENABLE_EGL) -add_executable(simple-egl simple-egl.cc) + # + # simple-egl + # + find_package(PkgConfig REQUIRED) + pkg_check_modules(GLESv2 IMPORTED_TARGET glesv2) -target_compile_definitions(simple-egl PRIVATE EGL_NO_X11 MESA_EGL_NO_X11_HEADERS) + add_executable(simple-egl simple-egl.cc) -target_link_libraries(simple-egl PRIVATE waypp wayland-gen PkgConfig::GLESv2 cxxopts::cxxopts) + target_compile_definitions(simple-egl PRIVATE EGL_NO_X11 MESA_EGL_NO_X11_HEADERS) -if (IPO_SUPPORT_RESULT) - set_property(TARGET simple-egl PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) -endif () + target_link_libraries(simple-egl PRIVATE waypp wayland-gen PkgConfig::GLESv2 cxxopts::cxxopts) + + if (IPO_SUPPORT_RESULT) + set_property(TARGET simple-egl PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) + endif () -add_sanitizers(simple-egl) + add_sanitizers(simple-egl) + + # + # OpenGL + # + add_subdirectory(gl-shadertoy) + +endif () # # simple-shm @@ -107,8 +116,3 @@ find_package(Vulkan) if (VULKAN_FOUND) add_subdirectory(vk-shadertoy) endif () - -# -# GL -# -add_subdirectory(gl-shadertoy) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ba3774c..16cff71 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -16,7 +16,10 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) -find_package(OpenGL REQUIRED COMPONENTS EGL) + +if (ENABLE_EGL) + find_package(OpenGL REQUIRED COMPONENTS EGL) +endif () set(WINDOW_MANAGER_SRC window_manager/agl_shell.cc @@ -37,7 +40,6 @@ set(SEAT_SRC set(WINDOW_SRC window/anonymous_file.cc window/buffer.cc - window/egl.cc window/feedback.cc window/window.cc ) @@ -54,6 +56,12 @@ if (BUILD_STANDALONE) logging.cc) endif () +if (ENABLE_EGL) + target_sources(waypp PRIVATE + window/egl.cc + ) +endif () + if (ENABLE_XDG_CLIENT) target_sources(waypp PRIVATE window/xdg_toplevel.cc @@ -74,8 +82,13 @@ target_include_directories(waypp PUBLIC .) target_link_libraries(waypp PUBLIC wayland-gen PkgConfig::GLIB - OpenGL::EGL spdlog ) +if (ENABLE_EGL) + target_link_libraries(waypp PUBLIC + OpenGL::EGL + ) +endif () + add_sanitizers(waypp) diff --git a/src/window/window.cc b/src/window/window.cc index d7f4492..c92c2bc 100644 --- a/src/window/window.cc +++ b/src/window/window.cc @@ -80,6 +80,7 @@ Window::Window(WindowManager *wm, presentation_.clock_id = wm_->get_presentation_time_clk_id(); } +#if ENABLE_EGL if (context_attribs_size && config_attribs_size) { egl_ = std::make_unique(wm->get_display(), wl_surface_, width, height, context_attribs, context_attribs_size, @@ -87,6 +88,7 @@ Window::Window(WindowManager *wm, buffer_bpp, type); egl_->set_swap_interval(swap_interval); } +#endif if (wm->get_viewporter()) { #if HAS_WAYLAND_PROTOCOL_VIEWPORTER @@ -232,9 +234,11 @@ void Window::update_buffer_geometry() { buffer_size_.height != new_buffer_size.height) { buffer_size_.width = new_buffer_size.width; buffer_size_.height = new_buffer_size.height; +#if ENABLE_EGL if (egl_) { egl_->resize(buffer_size_.width, buffer_size_.height, 0, 0); } +#endif } if (fractional_buffer_scale_ > 0.0) { @@ -388,48 +392,62 @@ void Window::handle_preferred_buffer_transform(void *data, } void Window::resize(int width, int height) { +#if ENABLE_EGL if (egl_) { logical_size_.width = width; logical_size_.height = height; egl_->resize(width, height, 0, 0); } +#endif } void Window::make_current() { +#if ENABLE_EGL if (egl_) { egl_->make_current(); } +#endif } void Window::clear_current() { +#if ENABLE_EGL if (egl_) { egl_->clear_current(); } +#endif } void Window::swap_buffers() { +#if ENABLE_EGL if (egl_) { egl_->swap_buffers(); } +#endif } bool Window::have_swap_buffers_width_damage() { +#if ENABLE_EGL if (egl_) { return egl_->have_swap_buffers_width_damage(); } +#endif return false; } void Window::get_buffer_age(EGLint &buffer_age) { +#if ENABLE_EGL if (egl_) { egl_->get_buffer_age(buffer_age); } +#endif } void Window::swap_buffers_with_damage(const EGLint *rects, EGLint n_rects) { +#if ENABLE_EGL if (egl_) { egl_->swap_buffers_with_damage(rects, n_rects); } +#endif } Buffer *Window::pick_free_buffer() { diff --git a/src/window/window.h b/src/window/window.h index 31b64e6..35f488f 100644 --- a/src/window/window.h +++ b/src/window/window.h @@ -206,7 +206,9 @@ class Window { std::function frame_callback_; void *user_data_{}; +#if ENABLE_EGL std::unique_ptr egl_; +#endif std::vector> buffers_;