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:
GLVNDIf the GLVND OpenGL and GLX libraries are available, prefer them. This forces
OPENGL_gl_LIBRARYto be empty.Changed in version 3.11: This is the default, unless policy
CMP0072is set toOLDand 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.