查找OpenGL

FindModule for OpenGL 和 OpenGL Utility Library (GLU)。

在 3.2 版本发生变更: X11 不再添加为对 Unix/Linux 系统的依赖。

在 3.10 版本加入: Linux 上的 GLVND 支持。请参阅下面的 特定于 Linux 部分。

可选组件

在 3.10 版本加入.

该模块涉及几个可选组件:EGLGLXOpenGL。这些标志中的每一个都有相应的导入目标。

进口目标

在 3.8 版本加入.

该模块定义了 IMPORTED 目标:

OpenGL::GL

如果系统具有 OpenGL,则定义为特定于平台的 OpenGL 库。

OpenGL::GLU

定义系统是否具有 OpenGL 实用程序库 (GLU)。

在 3.10 版本加入: 此外,还定义了以下特定于 GLVND 的库目标:

OpenGL::OpenGL

如果系统是基于 GLVND 的,则定义为 libOpenGL。

OpenGL::GLX

定义系统是否具有 X 窗口系统 (GLX) 的 OpenGL 扩展。

OpenGL::EGL

定义系统是否有 EGL。

结果变量

该模块设置以下变量:

OPENGL_FOUND

是的,如果系统有 OpenGL 并且找到所有组件。

OPENGL_XMESA_FOUND

是的,如果系统有 XMESA。

OPENGL_GLU_FOUND

是的,如果系统有 GLU。

OpenGL_OpenGL_FOUND

是的,如果系统有 OpenGL 库。

OpenGL_GLX_FOUND

是的,如果系统有 GLX。

OpenGL_EGL_FOUND

是的,如果系统有 EGL。

OPENGL_INCLUDE_DIR

OpenGL 包含目录的路径。

OPENGL_EGL_INCLUDE_DIRS

EGL 包含目录的路径。

OPENGL_LIBRARIES

OpenGL 库、窗口系统库和 GLU 库的路径。在 Linux 上,这假定为 GLX,并且对于基于 EGL 的目标永远不正确。鼓励客户改用 OpenGL::* 导入目标。

在 3.10 版本加入: GLVND 特定库``OpenGL``、EGL 和``GLX`` 的变量。

缓存变量

还可以设置以下缓存变量:

OPENGL_egl_LIBRARY

EGL 库的路径。

OPENGL_glu_LIBRARY

GLU 库的路径。

OPENGL_glx_LIBRARY

GLVND 'GLX' 库的路径。

OPENGL_opengl_LIBRARY

GLVND 'OpenGL' 库的路径

OPENGL_glx_LIBRARY

OpenGL 库的路径。新代码应该更喜欢 OpenGL::* 导入目标。

在 3.10 版本加入: GLVND 特定库``OpenGL``、EGL 和``GLX`` 的变量。

特定于 Linux

一些 Linux 系统使用 GLVND 作为 OpenGL 的新 ABI。 GLVND 将上下文库与 OpenGL 本身分开; OpenGL 存在于“libOpenGL”中,上下文在“libGLX”或“libEGL”中定义。 GLVND 是目前以跨供应商可移植的方式通过 EGL 获得 OpenGL 3+ 功能的唯一方法。项目可以将 GLVND 明确地用于目标 OpenGL::OpenGLOpenGL::GLXOpenGL::EGL

项目可以使用 OpenGL::GL 目标(或 OPENGL_LIBRARIES 变量)来使用遗留的 GL 接口。这些将使用位于 OPENGL_gl_LIBRARY 的遗留 GL 库(如果可用)。如果 OPENGL_gl_LIBRARY 为空或未找到且 GLVND 可用,则 OpenGL::GL 目标将使用 GLVND OpenGL::OpenGLOpenGL::GLX``(以及 ` `OPENGL_LIBRARIES 变量将使用相应的库)。因此,对于非基于 EGL 的 Linux 目标,OpenGL::GL 目标是最可移植的。

可以设置 OpenGL_GL_PREFERENCE 变量来指定在有多种选择的情况下提供遗留 GL 接口的首选方式。该值可能是以下之一:

GLVND

如果 GLVND OpenGL 和 GLX 库可用,请首选它们。这会强制 OPENGL_gl_LIBRARY 为空。

在 3.11 版本发生变更: 这是默认设置,除非策略 CMP0072 设置为 OLD 并且没有请求任何组件(因为组件对应于 GLVND 库)。

遗留的

首选使用旧版 libGL 库(如果可用)。

对于 EGL 目标,客户端必须依赖用户系统上的 GLVND 支持。链接应该使用 OpenGL::OpenGL OpenGL::EGL 目标。理论上可以使用 GLES* 库代替 OpenGL::OpenGL,但该模块目前不支持;欢迎投稿。

OPENGL_egl_LIBRARYOPENGL_EGL_INCLUDE_DIRS 是在 GLVND 的情况下定义的。对于非 GLVND Linux 和其他系统,这些未定义。

macOS 特定

在 OSX 上,FindOpenGL 默认使用 OpenGL 的框架版本。人们必须更改 OPENGL_glu_LIBRARY 和 OPENGL_gl_LIBRARY 的缓存值才能在 OSX 上使用 OpenGL 和 X11。