2013-12-19 5 views
2

Я обновил драйвер своей видеокарты для поддержки openGL 4, так что устаревшие функции, такие как glBegin, не будут работать. Однако, когда я запускаю простую программу треугольников, glBegin по-прежнему работает, как раньше. Является ли glBegin все еще поддерживаемым openGL 4 или я пропустил какой-то шаг в обновлении до openGL 4?Confused about openGL version

ответ

5

Простое использование драйвера, поддерживающего OpenGL 4.x, не означает, что вы потеряете функциональность более ранних версий. Начиная с OpenGL 3.2 концепция Core и Совместимость были представлены профили, и именно здесь вступает в действие разделение между современными и устаревшими.

В профиле Core темы, упомянутые вами как glBegin, недействительны. Однако в профиле Compatibility вы можете продолжать смешивать устаревшие части API с новыми частями. Подавляющее большинство новых функций OpenGL не гарантируют работу в сочетании с устаревшими частями API, во многом потому, что большинство новых функций связаны с GLSL и программируемым конвейером каким-то образом.

Теперь все становится немного сложнее, когда вы обсуждаете платформу, такую ​​как Mac OS X. Начиная с OS X 10.7, Apple начала поддерживать OpenGL 3.2. Тем не менее, они разработали их реализацию таким образом, чтобы получить доступ к функции OpenGL 3.2 ТОЛЬКО, чтобы получить профиль Core. Они продолжают поддерживать устаревшую реализацию OpenGL 2.1, так что старое программное обеспечение не нужно переписывать, но для того, чтобы использовать любые функции OpenGL 3.2+ в OS X, вы должны указать все устаревшие функции.


На самом деле, платформы, как правило, разработаны таким образом, что вы на самом деле нужно сделать дополнительную работу во время создания контекста для того, чтобы получить сердечника профиль. Если вы специально не запросите Core, вы получите Совместимость (или в случае OS X, реализация OpenGL 2.1). Это способ сделать всю модель устаревания максимально безболезненной для существующего программного обеспечения.

2

«устаревший» не обязательно означает, что «это не сработает», это означает «вы не должны использовать его, потому что стандарт говорит так», продавец может реализовать то, что он хочет продать с помощью аппаратного обеспечения; и многие бренды по-прежнему предлагают устаревшие контексты и функции OpenGL в своих собственных библиотеках.