OpenGL - это не библиотека с разными номерами версий и тому подобное. Это один большой стандарт, который графические драйверы должны поддерживать сами. Следовательно, некоторые графические карты могут не поддерживать последние версии OpenGL, в то время как в будущем некоторые карты могут не поддерживать более старые версии.
Вам не нужно включать другой заголовок или ссылку на другую библиотеку, если вы используете OpenGL 1.0 или OpenGL 4.0. Однако, чтобы использовать OpenGL 4.0, вы должны определить, поддерживается ли он на машине, на которой работает ваша программа. На данный момент только самые последние графические процессоры поддерживают OpenGL 4.0. У вас может быть больше шансов с OpenGL 3.0
Если вы работаете в Windows, включите "gl / gl.h" и свяжите вашу программу с "OpenGL32.lib"
После запуска вашей программы вы можете определить версию OpenGL, поддерживаемую графическим процессором, или включить расширение, используя glString и wglGetProcAddress. Однако я настоятельно советую вам использовать стороннюю библиотеку ( GLee - моя любимая).
Программирование с OpenGL отличается от программирования с DirectX. DirectX гарантированно поддерживает все функции версии, которую вы используете. Когда вы что-то кодируете с помощью OpenGL, вы должны определять каждую функциональность отдельно.
Например, скажем, вы хотите использовать буфер вершин. Ваш код должен быть таким:
- если версия OpenGL> = 2, используйте glGenBuffers, glBindBuffer и т. Д.
- еще, распределять и заполнять данные в оперативной памяти
Вы можете увидеть некоторые примеры на странице GLee, на которую я ссылался выше
Конечно, вы не можете сделать это для всего. Например, шейдеры не могут быть выполнены без определенного расширения, и вы должны просто отобразить сообщение об ошибке, если они недоступны.
Более сложный : начиная с OpenGL 3, некоторые функции устарели. Теперь у вас есть два способа инициализации OpenGL:
- новый способ (wglCreateContextAttribsARB в Windows), где вы указываете минимальную версию OpenGL, которую вы хотите
- старый способ (wglCreateContext), который запрашивает минимум OpenGL 1.1 (также доступны последние версии)
Если вы запрашиваете версию, превосходящую OpenGL 3, устаревшие функции теоретически доступны только благодаря расширению ARB_compatibility, которое может поддерживаться или не поддерживаться картой. На данный момент ARB_compatibility поддерживается всеми существующими графическими процессорами, но в будущем это может быть уже не так.
Если вы запрашиваете версию, уступающую OpenGL 3, эти функции не считаются устаревшими, но инициализация завершится ошибкой, если они больше не поддерживаются картой.