From d2d85f3caca97bff91827d52a79d7a74f55a98f2 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 31 Jul 2025 00:50:00 +0200 Subject: [PATCH] cmake: add gles2 and gles3 UI type Signed-off-by: falkTX --- cmake/DPF-plugin.cmake | 237 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 234 insertions(+), 3 deletions(-) diff --git a/cmake/DPF-plugin.cmake b/cmake/DPF-plugin.cmake index 9d5660e9..5effdba0 100644 --- a/cmake/DPF-plugin.cmake +++ b/cmake/DPF-plugin.cmake @@ -78,6 +78,8 @@ include(CMakeParseArguments) # the user interface type, can be one of the following: # - cairo # - external +# - gles2 +# - gles3 # - opengl (default) # - opengl3 # - vulkan @@ -129,6 +131,16 @@ function(dpf_add_plugin NAME) dpf__add_dgl_external($ $) set(_dgl_library dgl-external) + elseif(_dpf_plugin_UI_TYPE STREQUAL "gles2") + dpf__add_dgl_gles2($> + $ + $) + set(_dgl_library dgl-gles2) + elseif(_dpf_plugin_UI_TYPE STREQUAL "gles3") + dpf__add_dgl_gles3($> + $ + $) + set(_dgl_library dgl-gles3) elseif(_dpf_plugin_UI_TYPE STREQUAL "opengl") dpf__add_dgl_opengl($> $ @@ -256,6 +268,8 @@ endfunction() # the user interface type, can be one of the following: # - cairo # - external +# - gles2 +# - gles3 # - opengl (default) # - opengl3 # - vulkan @@ -289,6 +303,16 @@ function(dpf_add_executable NAME) dpf__add_dgl_external($ $) set(_dgl_library dgl-external) + elseif(_dpf_plugin_UI_TYPE STREQUAL "gles2") + dpf__add_dgl_gles2($> + $ + $) + set(_dgl_library dgl-gles2) + elseif(_dpf_plugin_UI_TYPE STREQUAL "gles3") + dpf__add_dgl_gles3($> + $ + $) + set(_dgl_library dgl-gles3) elseif(_dpf_plugin_UI_TYPE STREQUAL "opengl") dpf__add_dgl_opengl($> $ @@ -927,6 +951,197 @@ function(dpf__add_dgl_external USE_FILE_BROWSER USE_WEB_VIEW) target_link_libraries(dgl-external PRIVATE dgl-external-definitions "${OPENGL_gl_LIBRARY}") endfunction() +# dpf__add_dgl_gles2 +# ------------------------------------------------------------------------------ +# +# Add the GLESv2 variant of DGL, if not already available. +# +function(dpf__add_dgl_gles2 SHARED_RESOURCES USE_FILE_BROWSER USE_WEB_VIEW) + if(TARGET dgl-gles2) + return() + endif() + + if(NOT OpenGL_GL_PREFERENCE) + set(OpenGL_GL_PREFERENCE "LEGACY") + endif() + + find_package(OpenGL REQUIRED) + + dpf__add_static_library(dgl-gles2 STATIC + "${DPF_ROOT_DIR}/dgl/src/Application.cpp" + "${DPF_ROOT_DIR}/dgl/src/ApplicationPrivateData.cpp" + "${DPF_ROOT_DIR}/dgl/src/Color.cpp" + "${DPF_ROOT_DIR}/dgl/src/EventHandlers.cpp" + "${DPF_ROOT_DIR}/dgl/src/Geometry.cpp" + "${DPF_ROOT_DIR}/dgl/src/ImageBase.cpp" + "${DPF_ROOT_DIR}/dgl/src/ImageBaseWidgets.cpp" + "${DPF_ROOT_DIR}/dgl/src/Layout.cpp" + "${DPF_ROOT_DIR}/dgl/src/SubWidget.cpp" + "${DPF_ROOT_DIR}/dgl/src/SubWidgetPrivateData.cpp" + "${DPF_ROOT_DIR}/dgl/src/TopLevelWidget.cpp" + "${DPF_ROOT_DIR}/dgl/src/TopLevelWidgetPrivateData.cpp" + "${DPF_ROOT_DIR}/dgl/src/Widget.cpp" + "${DPF_ROOT_DIR}/dgl/src/WidgetPrivateData.cpp" + "${DPF_ROOT_DIR}/dgl/src/Window.cpp" + "${DPF_ROOT_DIR}/dgl/src/WindowPrivateData.cpp" + "${DPF_ROOT_DIR}/dgl/src/OpenGL.cpp" + "${DPF_ROOT_DIR}/dgl/src/NanoVG.cpp") + if(SHARED_RESOURCES) + target_sources(dgl-gles2 PRIVATE "${DPF_ROOT_DIR}/dgl/src/Resources.cpp") + else() + target_compile_definitions(dgl-gles2 PUBLIC "DGL_NO_SHARED_RESOURCES") + endif() + if(APPLE) + target_sources(dgl-gles2 PRIVATE + "${DPF_ROOT_DIR}/dgl/src/pugl.mm") + else() + target_sources(dgl-gles2 PRIVATE + "${DPF_ROOT_DIR}/dgl/src/pugl.cpp") + endif() + target_include_directories(dgl-gles2 PUBLIC + "${DPF_ROOT_DIR}/dgl") + target_include_directories(dgl-gles2 PUBLIC + "${DPF_ROOT_DIR}/dgl/src/pugl-upstream/include") + + if(APPLE) + target_compile_definitions(dgl-gles2 PUBLIC "GL_SILENCE_DEPRECATION") + endif() + + if(USE_FILE_BROWSER) + target_compile_definitions(dgl-gles2 PUBLIC "DGL_USE_FILE_BROWSER") + endif() + + if(USE_WEB_VIEW) + target_compile_definitions(dgl-gles2 PUBLIC "DGL_USE_WEB_VIEW") + if(APPLE) + find_library(APPLE_WEBKIT_FRAMEWORK "WebKit") + target_link_libraries(dgl-gles2 PRIVATE "${APPLE_WEBKIT_FRAMEWORK}") + elseif(WIN32) + target_sources(dgl-gles2 PRIVATE + "${DPF_ROOT_DIR}/dgl/src/WebViewWin32.cpp") + set_source_files_properties("${DPF_ROOT_DIR}/dgl/src/WebViewWin32.cpp" + PROPERTIES + COMPILE_FLAGS + $,/std:c++17,-std=gnu++17>) + endif() + endif() + + dpf__add_dgl_system_libs() + target_link_libraries(dgl-gles2 PRIVATE dgl-system-libs) + target_link_options(dgl-gles2 + INTERFACE + $<$:-sMIN_WEBGL_VERSION=2> + $<$:-sMAX_WEBGL_VERSION=2> + ) + + add_library(dgl-gles2-definitions INTERFACE) + target_compile_definitions(dgl-gles2-definitions + INTERFACE + DGL_USE_OPENGL3 + DGL_USE_GLES + DGL_USE_GLES2 + DGL_OPENGL + HAVE_OPENGL + HAVE_DGL + ) + + target_include_directories(dgl-gles2 PUBLIC "${OPENGL_INCLUDE_DIR}") + target_link_libraries(dgl-gles2 PRIVATE dgl-gles2-definitions "${OPENGL_gl_LIBRARY}") +endfunction() + +# dpf__add_dgl_gles3 +# ------------------------------------------------------------------------------ +# +# Add the GLESv3 variant of DGL, if not already available. +# +function(dpf__add_dgl_gles3 SHARED_RESOURCES USE_FILE_BROWSER USE_WEB_VIEW) + if(TARGET dgl-gles3) + return() + endif() + + if(NOT OpenGL_GL_PREFERENCE) + set(OpenGL_GL_PREFERENCE "LEGACY") + endif() + + find_package(OpenGL REQUIRED) + + dpf__add_static_library(dgl-gles3 STATIC + "${DPF_ROOT_DIR}/dgl/src/Application.cpp" + "${DPF_ROOT_DIR}/dgl/src/ApplicationPrivateData.cpp" + "${DPF_ROOT_DIR}/dgl/src/Color.cpp" + "${DPF_ROOT_DIR}/dgl/src/EventHandlers.cpp" + "${DPF_ROOT_DIR}/dgl/src/Geometry.cpp" + "${DPF_ROOT_DIR}/dgl/src/ImageBase.cpp" + "${DPF_ROOT_DIR}/dgl/src/ImageBaseWidgets.cpp" + "${DPF_ROOT_DIR}/dgl/src/Layout.cpp" + "${DPF_ROOT_DIR}/dgl/src/SubWidget.cpp" + "${DPF_ROOT_DIR}/dgl/src/SubWidgetPrivateData.cpp" + "${DPF_ROOT_DIR}/dgl/src/TopLevelWidget.cpp" + "${DPF_ROOT_DIR}/dgl/src/TopLevelWidgetPrivateData.cpp" + "${DPF_ROOT_DIR}/dgl/src/Widget.cpp" + "${DPF_ROOT_DIR}/dgl/src/WidgetPrivateData.cpp" + "${DPF_ROOT_DIR}/dgl/src/Window.cpp" + "${DPF_ROOT_DIR}/dgl/src/WindowPrivateData.cpp" + "${DPF_ROOT_DIR}/dgl/src/OpenGL.cpp" + "${DPF_ROOT_DIR}/dgl/src/NanoVG.cpp") + if(SHARED_RESOURCES) + target_sources(dgl-gles3 PRIVATE "${DPF_ROOT_DIR}/dgl/src/Resources.cpp") + else() + target_compile_definitions(dgl-gles3 PUBLIC "DGL_NO_SHARED_RESOURCES") + endif() + if(APPLE) + target_sources(dgl-gles3 PRIVATE + "${DPF_ROOT_DIR}/dgl/src/pugl.mm") + else() + target_sources(dgl-gles3 PRIVATE + "${DPF_ROOT_DIR}/dgl/src/pugl.cpp") + endif() + target_include_directories(dgl-gles3 PUBLIC + "${DPF_ROOT_DIR}/dgl") + target_include_directories(dgl-gles3 PUBLIC + "${DPF_ROOT_DIR}/dgl/src/pugl-upstream/include") + + if(APPLE) + target_compile_definitions(dgl-gles3 PUBLIC "GL_SILENCE_DEPRECATION") + endif() + + if(USE_FILE_BROWSER) + target_compile_definitions(dgl-gles3 PUBLIC "DGL_USE_FILE_BROWSER") + endif() + + if(USE_WEB_VIEW) + target_compile_definitions(dgl-gles3 PUBLIC "DGL_USE_WEB_VIEW") + if(APPLE) + find_library(APPLE_WEBKIT_FRAMEWORK "WebKit") + target_link_libraries(dgl-gles3 PRIVATE "${APPLE_WEBKIT_FRAMEWORK}") + elseif(WIN32) + target_sources(dgl-gles3 PRIVATE + "${DPF_ROOT_DIR}/dgl/src/WebViewWin32.cpp") + set_source_files_properties("${DPF_ROOT_DIR}/dgl/src/WebViewWin32.cpp" + PROPERTIES + COMPILE_FLAGS + $,/std:c++17,-std=gnu++17>) + endif() + endif() + + dpf__add_dgl_system_libs() + target_link_libraries(dgl-gles3 PRIVATE dgl-system-libs) + + add_library(dgl-gles3-definitions INTERFACE) + target_compile_definitions(dgl-gles3-definitions + INTERFACE + DGL_USE_OPENGL3 + DGL_USE_GLES + DGL_USE_GLES3 + DGL_OPENGL + HAVE_OPENGL + HAVE_DGL + ) + + target_include_directories(dgl-gles3 PUBLIC "${OPENGL_INCLUDE_DIR}") + target_link_libraries(dgl-gles3 PRIVATE dgl-gles3-definitions "${OPENGL_gl_LIBRARY}") +endfunction() + # dpf__add_dgl_opengl # ------------------------------------------------------------------------------ # @@ -1004,9 +1219,19 @@ function(dpf__add_dgl_opengl SHARED_RESOURCES USE_FILE_BROWSER USE_WEB_VIEW) dpf__add_dgl_system_libs() target_link_libraries(dgl-opengl PRIVATE dgl-system-libs) + target_link_options(dgl-opengl + INTERFACE + $<$:-sLEGACY_GL_EMULATION> + $<$:-sGL_UNSAFE_OPTS=0> + ) add_library(dgl-opengl-definitions INTERFACE) - target_compile_definitions(dgl-opengl-definitions INTERFACE "DGL_OPENGL" "HAVE_OPENGL" "HAVE_DGL") + target_compile_definitions(dgl-opengl-definitions + INTERFACE + DGL_OPENGL + HAVE_OPENGL + HAVE_DGL + ) target_include_directories(dgl-opengl PUBLIC "${OPENGL_INCLUDE_DIR}") target_link_libraries(dgl-opengl PRIVATE dgl-opengl-definitions "${OPENGL_gl_LIBRARY}") @@ -1091,7 +1316,13 @@ function(dpf__add_dgl_opengl3 SHARED_RESOURCES USE_FILE_BROWSER USE_WEB_VIEW) target_link_libraries(dgl-opengl3 PRIVATE dgl-system-libs) add_library(dgl-opengl3-definitions INTERFACE) - target_compile_definitions(dgl-opengl3-definitions INTERFACE "DGL_USE_OPENGL3" "DGL_OPENGL" "HAVE_OPENGL" "HAVE_DGL") + target_compile_definitions(dgl-opengl3-definitions + INTERFACE + DGL_USE_OPENGL3 + DGL_OPENGL + HAVE_OPENGL + HAVE_DGL + ) target_include_directories(dgl-opengl3 PUBLIC "${OPENGL_INCLUDE_DIR}") target_link_libraries(dgl-opengl3 PRIVATE dgl-opengl3-definitions "${OPENGL_gl_LIBRARY}") @@ -1349,7 +1580,7 @@ function(dpf__set_target_defaults NAME) if (CMAKE_COMPILER_IS_GNUCXX) target_compile_options("${NAME}" PUBLIC "-fno-gnu-unique") endif() - if ((NOT APPLE) AND (NOT MSVC)) + if ((NOT APPLE) AND (NOT EMSCRIPTEN) AND (NOT MSVC)) target_link_options("${NAME}" PUBLIC "-Wl,--no-undefined") endif() endfunction()