diff --git a/CMake/patches/99/FindOpenGL.cmake b/CMake/patches/99/FindOpenGL.cmake index e8c9cbe1061d9f01f67fc1113e499b67c1dc2235..58d2f5da007d591f1e9ef8aec02239976f84edb3 100644 --- a/CMake/patches/99/FindOpenGL.cmake +++ b/CMake/patches/99/FindOpenGL.cmake @@ -498,46 +498,113 @@ if(OPENGL_FOUND) # ::GLES2 is a GLVND library, and thus Linux-only: we don't bother checking # for a framework version of this library. if(OpenGL_GLES2_FOUND AND NOT TARGET OpenGL::GLES2) - if(IS_ABSOLUTE "${OPENGL_gles2_LIBRARY}") - add_library(OpenGL::GLES2 UNKNOWN IMPORTED) - set_target_properties(OpenGL::GLES2 PROPERTIES IMPORTED_LOCATION - "${OPENGL_gles2_LIBRARY}") - else() + set(_opengl_gles_cxx_flags) + + # Configure compile options + if(EMSCRIPTEN) + # For GLES2 we do not make any decision for which WebGL version should + # be used (1 or 2). For old version of EMSCRIPTEN < 1.39.5 the user will + # have to register its own "-s USE_WEBGL1=1 or -s USE_WEBGL2=1" + list(APPEND _opengl_gles_cxx_flags + "SHELL:-s FULL_ES2=1" + ) + if(EMSCRIPTEN_VERSION VERSION_GREATER_EQUAL "1.39.5") + list(APPEND _opengl_gles_cxx_flags + "SHELL:-s MIN_WEBGL_VERSION=1" + "SHELL:-s MAX_WEBGL_VERSION=2" + ) + endif() + endif() + + # Initialize target + if(NOT OPENGL_gles2_LIBRARY) add_library(OpenGL::GLES2 INTERFACE IMPORTED) - set_target_properties(OpenGL::GLES2 PROPERTIES IMPORTED_LIBNAME - "${OPENGL_gles2_LIBRARY}") + else() + if(IS_ABSOLUTE "${OPENGL_gles2_LIBRARY}") + add_library(OpenGL::GLES2 UNKNOWN IMPORTED) + set_target_properties(OpenGL::GLES2 PROPERTIES + IMPORTED_LOCATION "${OPENGL_gles2_LIBRARY}" + ) + else() + add_library(OpenGL::GLES2 INTERFACE IMPORTED) + set_target_properties(OpenGL::GLES2 PROPERTIES + IMPORTED_LIBNAME "${OPENGL_gles2_LIBRARY}" + ) + endif() endif() - set_target_properties(OpenGL::GLES2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES - "${OPENGL_GLES2_INCLUDE_DIR}") + + # Attach target properties + set_target_properties(OpenGL::GLES2 + PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES + "${OPENGL_GLES2_INCLUDE_DIR}" + INTERFACE_COMPILE_OPTIONS + "${_opengl_gles_cxx_flags}" + INTERFACE_LINK_OPTIONS + "${_opengl_gles_cxx_flags}" + ) + if (OPENGL_USE_GLES2) set(_OpenGL_EGL_IMPL OpenGL::GLES2) endif () + + unset(_opengl_gles_cxx_flags) endif() # ::GLES3 is a GLVND library, and thus Linux-only: we don't bother checking # for a framework version of this library. if(OpenGL_GLES3_FOUND AND NOT TARGET OpenGL::GLES3) - if(IS_ABSOLUTE "${OPENGL_gles3_LIBRARY}") - add_library(OpenGL::GLES3 UNKNOWN IMPORTED) - if(NOT EMSCRIPTEN) - set_target_properties(OpenGL::GLES3 PROPERTIES IMPORTED_LOCATION - "${OPENGL_gles3_LIBRARY}") + set(_opengl_gles_cxx_flags) + + if(EMSCRIPTEN) + # For GLES3 we force EMSCRIPTEN to use WebGL 2 + list(APPEND _opengl_gles_cxx_flags + "SHELL:-s FULL_ES3=1" + ) + if(EMSCRIPTEN_VERSION VERSION_GREATER_EQUAL "1.39.5") + list(APPEND _opengl_gles_cxx_flags + "SHELL:-s MIN_WEBGL_VERSION=2" + "SHELL:-s MAX_WEBGL_VERSION=2" + ) + else() + list(APPEND _opengl_gles_cxx_flags + "SHELL:-s USE_WEBGL2=1" + ) endif() - else() + endif() + + # Initialize target + if(NOT OPENGL_gles3_LIBRARY) add_library(OpenGL::GLES3 INTERFACE IMPORTED) - if(NOT EMSCRIPTEN) - set_target_properties(OpenGL::GLES3 PROPERTIES IMPORTED_LIBNAME - "${OPENGL_gles3_LIBRARY}") + else() + if(IS_ABSOLUTE "${OPENGL_gles3_LIBRARY}") + add_library(OpenGL::GLES3 UNKNOWN IMPORTED) + set_target_properties(OpenGL::GLES3 PROPERTIES + IMPORTED_LOCATION "${OPENGL_gles3_LIBRARY}" + ) + else() + add_library(OpenGL::GLES3 INTERFACE IMPORTED) + set_target_properties(OpenGL::GLES3 PROPERTIES + IMPORTED_LIBNAME "${OPENGL_gles3_LIBRARY}" + ) endif() endif() - if(NOT EMSCRIPTEN) - set_target_properties(OpenGL::GLES3 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES - "${OPENGL_GLES3_INCLUDE_DIR}") - endif() + + # Attach target properties + set_target_properties(OpenGL::GLES3 PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES + "${OPENGL_GLES3_INCLUDE_DIR}" + INTERFACE_COMPILE_OPTIONS + "${_opengl_gles_cxx_flags}" + INTERFACE_LINK_OPTIONS + "${_opengl_gles_cxx_flags}" + ) if (OPENGL_USE_GLES3) set(_OpenGL_EGL_IMPL OpenGL::GLES3) endif () + + unset(_opengl_gles_cxx_flags) endif() if(OPENGL_gl_LIBRARY AND NOT TARGET OpenGL::GL)