diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2019-06-05 10:46:16 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2019-06-05 09:38:02 +0000 |
commit | 38cd18384f6198c5bc3ea1da9ffc0158e960a778 (patch) | |
tree | a6c8b2339477a7d5079865e57671a40bbffbf7d9 /src/gui | |
parent | 2eeba9f55f11a3389dd29196fc3c52e317d8967c (diff) |
Fix OpenGL vs. GLESv2 linkage, attempt number three
We introduced WrapOpenGL to link against either desktop GL or GLESv2
depending on the GL feature in QtGui. This works "fine", with two
caveats:
(1) find_package(WrapOpenGL) must be called after
find_package(Qt5Gui) in order for the feature check in
FindWrapOpenGL.cmake to work. That's error prone.
(2) More and more places are popping up, in particular examples,
where GL linkage is required due to inline functions in Qt that
forward to GL functions - such as on Android.
This in particular explains the qmake behavior of making the GL
linkage (desktop _or_ GLES) a public dependency of QtGui, so only
Gui linkage is required.
Those two aspects combined are the nail in the coffin of FindWrapOpenGL
and it would seem much easier to simply make the Desktop GL vs. GLES
decision once in Gui's CMakeLists.txt and let Qt5GuiDependencies.cmake
propagate this well. This allows us to get rid of plenty of special
cases as well.
Change-Id: I3a7e8af49537ce5f215f24470e075a4ae9aeb944
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/CMakeLists.txt | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 7acfedf46b..b662f8e092 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -336,12 +336,20 @@ extend_target(Gui CONDITION QT_FEATURE_standarditemmodel # special case begin # With qmake, gui's opengl.pri used CONFIG += opengl, where opengl.prf -# acted like WrapOpenGL: direct linkage against either libGLESv2 or -# libGL, depending on the opengl _feature_. This is done by hand now -# here (where the feature is available). +# used direct public linkage against either libGLESv2 or libGL, depending +# on the opengl _feature_. This is done by hand now here (where the +# feature is available). # DO NOT MOVE THIS TO THE BEGINNING OF THE FILE, the feature variables are not # available until the add_qt_module call. -qt_find_package(WrapOpenGL PROVIDED_TARGETS WrapOpenGL) +if(QT_FEATURE_opengl) + if(QT_FEATURE_opengles2) + find_package(GLESv2) + target_link_libraries(Gui PUBLIC GLESv2::GLESv2) + else() + find_package(OpenGL) + target_link_libraries(Gui PUBLIC OpenGL::GL) + endif() +endif() # special case end extend_target(Gui CONDITION QT_FEATURE_opengl @@ -376,19 +384,7 @@ extend_target(Gui CONDITION QT_FEATURE_opengl opengl/qopenglversionfunctions.cpp opengl/qopenglversionfunctions.h opengl/qopenglversionfunctionsfactory.cpp opengl/qopenglversionfunctionsfactory_p.h opengl/qopenglvertexarrayobject.cpp opengl/qopenglvertexarrayobject.h - LIBRARIES # special case - WrapOpenGL # special case -) - -# special case begin -# qopenglfunctions.h on Android does not use the function -# table indirection for calls but calls ::glFoo in inline functions -# directly. That means the GL library is a public dependency. -extend_target(Gui CONDITION QT_FEATURE_opengl AND ANDROID - PUBLIC_LIBRARIES - WrapOpenGL ) -# special case end #### Keys ignored in scope 2:.:.:gui.pro:QT_FEATURE_opengl: # MODULE_CONFIG = "opengl" |