查找OpenGL¶
FindModule for OpenGL 和 OpenGL Utility Library (GLU)。
在 3.2 版本发生变更: X11 不再添加为对 Unix/Linux 系统的依赖。
在 3.10 版本加入: Linux 上的 GLVND 支持。请参阅下面的 特定于 Linux 部分。
可选组件¶
在 3.10 版本加入.
该模块涉及几个可选组件:EGL、GLX 和 OpenGL。这些标志中的每一个都有相应的导入目标。
进口目标¶
在 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_DIROpenGL 包含目录的路径。
OPENGL_EGL_INCLUDE_DIRSEGL 包含目录的路径。
OPENGL_LIBRARIESOpenGL 库、窗口系统库和 GLU 库的路径。在 Linux 上,这假定为 GLX,并且对于基于 EGL 的目标永远不正确。鼓励客户改用
OpenGL::*导入目标。
在 3.10 版本加入: GLVND 特定库``OpenGL``、EGL 和``GLX`` 的变量。
缓存变量¶
还可以设置以下缓存变量:
OPENGL_egl_LIBRARYEGL 库的路径。
OPENGL_glu_LIBRARYGLU 库的路径。
OPENGL_glx_LIBRARYGLVND 'GLX' 库的路径。
OPENGL_opengl_LIBRARYGLVND 'OpenGL' 库的路径
OPENGL_glx_LIBRARYOpenGL 库的路径。新代码应该更喜欢
OpenGL::*导入目标。
在 3.10 版本加入: GLVND 特定库``OpenGL``、EGL 和``GLX`` 的变量。
特定于 Linux¶
一些 Linux 系统使用 GLVND 作为 OpenGL 的新 ABI。 GLVND 将上下文库与 OpenGL 本身分开; OpenGL 存在于“libOpenGL”中,上下文在“libGLX”或“libEGL”中定义。 GLVND 是目前以跨供应商可移植的方式通过 EGL 获得 OpenGL 3+ 功能的唯一方法。项目可以将 GLVND 明确地用于目标 OpenGL::OpenGL 和 OpenGL::GLX 或 OpenGL::EGL。
项目可以使用 OpenGL::GL 目标(或 OPENGL_LIBRARIES 变量)来使用遗留的 GL 接口。这些将使用位于 OPENGL_gl_LIBRARY 的遗留 GL 库(如果可用)。如果 OPENGL_gl_LIBRARY 为空或未找到且 GLVND 可用,则 OpenGL::GL 目标将使用 GLVND OpenGL::OpenGL 和 OpenGL::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_LIBRARY 和 OPENGL_EGL_INCLUDE_DIRS 是在 GLVND 的情况下定义的。对于非 GLVND Linux 和其他系统,这些未定义。
macOS 特定¶
在 OSX 上,FindOpenGL 默认使用 OpenGL 的框架版本。人们必须更改 OPENGL_glu_LIBRARY 和 OPENGL_gl_LIBRARY 的缓存值才能在 OSX 上使用 OpenGL 和 X11。