FindOpenGL¶
用於尋找 OpenGL 和 OpenGL Utility Library (GLU) 的 FindModule。
在 3.2 版本變更: 在 Unix/Linux 系統上不再加入 X11 作為依賴項。
在 3.10 版本加入: Linux 上的 GLVND 支援。請參閱下方的 Linux 專用 章節。
選用 COMPONENTS¶
在 3.10 版本加入。
此模組支援數個選用 COMPONENTS
EGL
OpenGL、OpenGL ES 和底層視窗系統之間的 EGL 介面。
GLX
X 的擴充功能,可將 OpenGL、OpenGL ES 與 X 視窗系統連接。
OpenGL
用於 3D 圖形的跨平台 API。
GLES2
在 3.27 版本加入。
適用於功能受限的嵌入式系統的 OpenGL API 子集。
GLES3
在 3.27 版本加入。
適用於功能較強的嵌入式系統的 OpenGL API 子集。
匯入目標¶
在 3.8 版本加入。
此模組定義了 IMPORTED
目標
OpenGL::GL
如果系統有 OpenGL,則定義為平台特定的 OpenGL 程式庫。
OpenGL::GLU
如果系統有 OpenGL Utility Library (GLU),則定義此項。
在 3.10 版本加入: 此外,還定義了以下 GLVND 特定的程式庫目標
OpenGL::OpenGL
如果系統是基於 GLVND 的,則定義為 libOpenGL。
OpenGL::GLX
如果系統具有 OpenGL Extension to the X Window System (GLX),則定義此項。
OpenGL::EGL
如果系統具有 EGL,則定義此項。
OpenGL::GLES2
在 3.27 版本加入。
如果系統具有 GLES2,則定義此項。
OpenGL::GLES3
在 3.27 版本加入。
如果系統具有 GLES3,則定義此項。
結果變數¶
此模組設定以下變數
OPENGL_FOUND
如果系統具有 OpenGL 且找到所有組件,則為 True。
OPENGL_XMESA_FOUND
如果系統具有 XMESA,則為 True。
OPENGL_GLU_FOUND
如果系統具有 GLU,則為 True。
OpenGL_OpenGL_FOUND
如果系統具有 OpenGL 程式庫,則為 True。
OpenGL_GLX_FOUND
如果系統具有 GLX,則為 True。
OpenGL_EGL_FOUND
如果系統具有 EGL,則為 True。
OpenGL::GLES2
如果系統具有 GLES2,則定義此項。
OpenGL::GLES3
如果系統具有 GLES3,則定義此項。
OPENGL_INCLUDE_DIR
OpenGL 包含目錄的路徑。建議使用
OPENGL_INCLUDE_DIRS
變數。OPENGL_EGL_INCLUDE_DIRS
EGL 包含目錄的路徑。
OPENGL_LIBRARIES
OpenGL 程式庫、視窗系統程式庫和 GLU 程式庫的路徑。在 Linux 上,這假設為 GLX,並且對於基於 EGL 的目標永遠不正確。建議客戶端改用
OpenGL::*
匯入目標。OPENGL_INCLUDE_DIRS
在 3.29 版本加入。
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_gl_LIBRARY
OpenGL 程式庫的路徑。新程式碼應優先使用
OpenGL::*
匯入目標。OPENGL_gles2_LIBRARY
在 3.27 版本加入。
OpenGL GLES2 程式庫的路徑。
OPENGL_gles3_LIBRARY
在 3.27 版本加入。
OpenGL GLES3 程式庫的路徑。
OPENGL_GLU_INCLUDE_DIR
在 3.29 版本加入。
OpenGL GLU 包含目錄的路徑。
在 3.10 版本加入: 用於 GLVND 特定程式庫 OpenGL
、EGL
和 GLX
的變數。
Linux 專用¶
某些 Linux 系統利用 GLVND 作為 OpenGL 的新 ABI。GLVND 將上下文程式庫與 OpenGL 本身分開;OpenGL 位於 "libOpenGL" 中,而上下文在 "libGLX" 或 "libEGL" 中定義。GLVND 是目前透過 EGL 以跨供應商可移植的方式獲得 OpenGL 3+ 功能的唯一方法。專案可以使用目標 OpenGL::OpenGL
和 OpenGL::GLX
或 OpenGL::EGL
明確使用 GLVND。
專案可以使用 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 程式庫)。LEGACY
如果舊版 libGL 程式庫可用,則優先使用它。
對於 EGL 目標,客戶端必須依賴使用者系統上的 GLVND 支援。連結應使用 OpenGL::OpenGL OpenGL::EGL
目標。理論上可以使用 GLES* 程式庫代替 OpenGL::OpenGL
,但此模組目前不支援;歡迎貢獻。
OPENGL_egl_LIBRARY
和 OPENGL_EGL_INCLUDE_DIRS
在 GLVND 的情況下定義。對於非 GLVND Linux 和其他系統,這些保持未定義狀態。
macOS 專用¶
在 macOS 上,此模組預設為使用 macOS 原生框架版本的 OpenGL。若要在 macOS 上使用 X11 版本的 OpenGL,可以停用框架搜尋。例如
find_package(X11)
if(APPLE AND X11_FOUND)
set(CMAKE_FIND_FRAMEWORK NEVER)
find_package(OpenGL)
unset(CMAKE_FIND_FRAMEWORK)
else()
find_package(OpenGL)
endif()
建置此專案的最終使用者可能需要將 CMake 指向他們的 X11 安裝,例如,使用 -DOpenGL_ROOT=/opt/X11
。