Spec-Zone.ru › CMake 3.29

FindOpenGL

FindModule для OpenGL и OpenGL Utility Library (GLU).

Изменено в версии 3.2: X11 больше не добавляется как зависимость для систем Unix/Linux.

Добавлена в версии 3.10: Поддержка GLVND на Linux. См. раздел Специфичный для Linux ниже.

Необязательные компоненты

Добавлена в версии 3.10.

Этот модуль учитывает несколько необязательных компонентов:

EGL

Интерфейс EGL между OpenGL, OpenGL ES и базовой системой окон.

GLX

Расширение для X, которое обеспечивает интерфейс между OpenGL, OpenGL ES и системой окон X.

OpenGL

Многоплатформенный API для 3D-графики.

GLES2

Добавлена в версии 3.27.

Подмножество API OpenGL для систем встраиваемой разработки с ограниченными возможностями.

GLES3

Добавлена в версии 3.27.

Подмножество API OpenGL для систем встраиваемой разработки с более расширенными возможностями.

Импортируемые цели

Добавлена в версии 3.8.

Этот модуль определяет IMPORTED цели:

OpenGL::GL

Определяется для платформ-зависимых библиотек OpenGL, если на системе есть OpenGL.

OpenGL::GLU

Определяется, если на системе есть OpenGL Utility Library (GLU).

Добавлена в версии 3.10: Кроме того, определяются следующие цели библиотек, специфичные для GLVND:

OpenGL::OpenGL

Определяется для libOpenGL, если система основана на GLVND.

OpenGL::GLX

Определяется, если на системе есть OpenGL Extension для X Window System (GLX).

OpenGL::EGL

Определяется, если на системе есть EGL.

OpenGL::GLES2

Добавлена в версии 3.27.

Определяется, если на системе есть GLES2.

OpenGL::GLES3

Добавлена в версии 3.27.

Определяется, если на системе есть GLES3.

Переменные результатов

Этот модуль устанавливает следующие переменные:

OPENGL_FOUND

Истина, если на системе есть OpenGL и все компоненты найдены.

OPENGL_XMESA_FOUND

Истина, если на системе есть XMESA.

OPENGL_GLU_FOUND

Истина, если на системе есть GLU.

OpenGL_OpenGL_FOUND

Истина, если на системе есть библиотека OpenGL.

OpenGL_GLX_FOUND

Истина, если на системе есть GLX.

OpenGL_EGL_FOUND

Истина, если на системе есть EGL.

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 в качестве нового ABI для OpenGL. GLVND разделяет библиотеки контекстов от самого OpenGL; OpenGL находится в "libOpenGL", а контексты определяются в "libGLX" или "libEGL". GLVND в настоящее время является единственным способом получения функциональности OpenGL 3+ через EGL, сохраняя переносимость между поставщиками. Проекты могут явно использовать GLVND с целью OpenGL::OpenGL и либо OpenGL::GLX, либо OpenGL::EGL.

Проекты могут использовать цель OpenGL::GL (или переменную OPENGL_LIBRARIES) для использования устаревших интерфейсов GL. Эти интерфейсы будут использовать устаревшую библиотеку GL, расположенную по адресу OPENGL_gl_LIBRARY, если она доступна. Если OPENGL_gl_LIBRARY пуста или не найдена, а GLVND доступен, цель OpenGL::GL будет использовать GLVND OpenGL::OpenGL и OpenGL::GLX (и переменная OPENGL_LIBRARIES будет использовать соответствующие библиотеки). Таким образом, для целей Linux, не основанных на EGL, цель 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. Для систем Linux, не использующих GLVND, и других систем они остаются неопределёнными.

Специфичное для macOS

В macOS этот модуль по умолчанию использует версию OpenGL, реализованную в рамках macOS. Чтобы использовать версию OpenGL из X11 в macOS, можно отключить поиск фреймворков. Например:

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.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.29/module/FindOpenGL.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API