Библиотека OpenGL включает каталог, который не нужно указывать в настройках в Visual Studio? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть программа OpenGL, которая работает, и я только что понял, что даже не указал каталог include, содержащий библиотеку OpenGL. Как это может быть? Я слышал, что «библиотека OpenGL поставляется с Microsoft SDK» (я не знаю, что такое SDK), но означает ли это, что «Microsoft SDK» по умолчанию является дополнительным каталогом include?

1 Ответ

1 голос
/ 18 июня 2020

В отличие от Vulkan (на данный момент), библиотека OpenGL долгое время приземлялась в Windows систему как go, так что opengl32.dll является системной библиотекой и необходим Файлы разработки (GL/gl.h и opengl32.lib ) поставляются с Windows SDK , который является неотъемлемой частью установки и разработки Visual Studio для платформы Windows.

Так что, действительно, обычно вам нечего устанавливать, кроме Windows SDK (ранее называвшегося Platform SDK) для запуска с использованием OpenGL . Обратите внимание, что, в отличие от OpenGL, библиотеки разработки Direct3D долгое время распространялись отдельно через DirectX SDK, но они также становятся частью Windows SDK, начиная с Windows 8 .

Если вы взглянет на настройки проекта VS, вы найдете такие переменные, как WindowsSDK_IncludePath: VC++ directories

Обычно Visual Studio устанавливается с Windows SDK и автоматически добавляет необходимые пути поиска ко всем проектам. Но также возможен сбой с этими настройками при локальной установке VS (или в конкретном проекте c путем переопределения флажков «наследовать от родительских или проектных значений по умолчанию»), или установщик VS может испортить пути при установке нескольких версий VS в параллельно и опираясь на разные версии Windows SDK.

Следует отметить, что opengl32.dll, идущий с Windows, является не чем иным, как прокси-DLL, загружающим библиотеки OpenGL, установленные с драйверами графического процессора.

Что вам может понадобиться в помощи, так это файлы справки, такие как glext.h, содержащие определения для функций OpenGL, представленных в OpenGL 1.2+, поскольку системные заголовки и библиотека предоставляют только функции OpenGL 1.1, в то время как более новые функции должны динамически извлекаться через wglGetProcAddress().

Аналогично Android, где Android NDK поставляется вместе с библиотеками и заголовками OpenGL ES, но сопровождается glext.h некоторой ревизии, а также имеет GLES 1 / 2/3, чтобы приложение могло избежать динамической загрузки функций, если оно использоваться на новых Android устройствах без обратной совместимости.

То же самое с macOS / iOS SDK , которые также включают платформу OpenGL / OpenGL ES в качестве часть SDK платформы. В отличие от других систем, macOS не предоставляет никаких GetProcAddress () для получения указателей функций OpenGL, поэтому для более новых версий OpenGL требуется более новая версия самой macOS или используются трюки, связанные с c компоновщиком macOS. Хотя OpenGL был помечен как устаревший в последних версиях пакетов SDK для macOS, так что в будущем macOS может отказаться от любых средств открытых многоплатформенных API, а разработчики pu sh пишут приложения исключительно для своей платформы с использованием проприетарных стандартов. Тем не менее, все еще возможно, что будет представлена ​​внешняя библиотека OpenGL, разработанная на собственных API-интерфейсах macOS (например, MoltenVK для Vulkan поддержки).

Это немного отличается для настольных Linux платформ, где библиотеки OpenGL устанавливаются как отдельные пакеты разработки, такие как libgl1-mesa-dev в Debian. Они также предоставляют определение более новых версий OpenGL, так что можно избежать glXGetProcAddress() / eglGetProcAddress() в случае, если совместимость со старыми Linux версиями не требуется.

...