FindOpenGL
FindOpenGL
FindModule for OpenGL and OpenGL Utility Library (GLU).
Changed in version 3.2: X11 is no longer added as a dependency on Unix/Linux systems.
New in version 3.10: GLVND support on Linux. See the Linux-specific section below.
Optional COMPONENTS
New in version 3.10.
This module respects several optional COMPONENTS: EGL
, GLX
, and OpenGL
. There are corresponding import targets for each of these flags.
IMPORTED Targets
New in version 3.8.
This module defines the IMPORTED targets:
OpenGL::GL
- Defined to the platform-specific OpenGL libraries if the system has OpenGL.
OpenGL::GLU
- Defined if the system has OpenGL Utility Library (GLU).
New in version 3.10: Additionally, the following GLVND-specific library targets are defined:
OpenGL::OpenGL
- Defined to libOpenGL if the system is GLVND-based.
OpenGL::GLX
- Defined if the system has OpenGL Extension to the X Window System (GLX).
OpenGL::EGL
- Defined if the system has EGL.
Result Variables
This module sets the following variables:
OPENGL_FOUND
- True, if the system has OpenGL and all components are found.
OPENGL_XMESA_FOUND
- True, if the system has XMESA.
OPENGL_GLU_FOUND
- True, if the system has GLU.
OpenGL_OpenGL_FOUND
- True, if the system has an OpenGL library.
OpenGL_GLX_FOUND
- True, if the system has GLX.
OpenGL_EGL_FOUND
- True, if the system has EGL.
OPENGL_INCLUDE_DIR
- Path to the OpenGL include directory.
OPENGL_EGL_INCLUDE_DIRS
- Path to the EGL include directory.
OPENGL_LIBRARIES
- Paths to the OpenGL library, windowing system libraries, and GLU libraries. On Linux, this assumes GLX and is never correct for EGL-based targets. Clients are encouraged to use the
OpenGL::*
import targets instead.
New in version 3.10: Variables for GLVND-specific libraries OpenGL
, EGL
and GLX
.
Cache variables
The following cache variables may also be set:
OPENGL_egl_LIBRARY
- Path to the EGL library.
OPENGL_glu_LIBRARY
- Path to the GLU library.
OPENGL_glx_LIBRARY
- Path to the GLVND 'GLX' library.
OPENGL_opengl_LIBRARY
- Path to the GLVND 'OpenGL' library
OPENGL_gl_LIBRARY
- Path to the OpenGL library. New code should prefer the
OpenGL::*
import targets.
New in version 3.10: Variables for GLVND-specific libraries OpenGL
, EGL
and GLX
.
Linux-specific
Some Linux systems utilize GLVND as a new ABI for OpenGL. GLVND separates context libraries from OpenGL itself; OpenGL lives in "libOpenGL", and contexts are defined in "libGLX" or "libEGL". GLVND is currently the only way to get OpenGL 3+ functionality via EGL in a manner portable across vendors. Projects may use GLVND explicitly with target OpenGL::OpenGL
and either OpenGL::GLX
or OpenGL::EGL
.
Projects may use the OpenGL::GL
target (or OPENGL_LIBRARIES
variable) to use legacy GL interfaces. These will use the legacy GL library located by OPENGL_gl_LIBRARY
, if available. If OPENGL_gl_LIBRARY
is empty or not found and GLVND is available, the OpenGL::GL
target will use GLVND OpenGL::OpenGL
and OpenGL::GLX
(and the OPENGL_LIBRARIES
variable will use the corresponding libraries). Thus, for non-EGL-based Linux targets, the OpenGL::GL
target is most portable.
A OpenGL_GL_PREFERENCE
variable may be set to specify the preferred way to provide legacy GL interfaces in case multiple choices are available. The value may be one of:
GLVND
If the GLVND OpenGL and GLX libraries are available, prefer them. This forces
OPENGL_gl_LIBRARY
to be empty.Changed in version 3.11: This is the default, unless policy CMP0072 is set to
OLD
and no components are requeted (since components correspond to GLVND libraries).LEGACY
Prefer to use the legacy libGL library, if available.
For EGL targets the client must rely on GLVND support on the user's system. Linking should use the OpenGL::OpenGL OpenGL::EGL
targets. Using GLES* libraries is theoretically possible in place of OpenGL::OpenGL
, but this module does not currently support that; contributions welcome.
OPENGL_egl_LIBRARY
and OPENGL_EGL_INCLUDE_DIRS
are defined in the case of GLVND. For non-GLVND Linux and other systems these are left undefined.
macOS-Specific
On OSX FindOpenGL defaults to using the framework version of OpenGL. People will have to change the cache values of OPENGL_glu_LIBRARY and OPENGL_gl_LIBRARY to use OpenGL with X11 on OSX.
© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.21/module/FindOpenGL.html