Чем же отличается OpenGL 3.x? - PullRequest
14 голосов
/ 16 августа 2010

В последнее время я искал книгу по OpenGL и заметил, что руководство по программированию OpenGL (2010) устарело. Чем же отличается OpenGL 3.x от 2.x?

Ответы [ 2 ]

29 голосов
/ 16 августа 2010

Редактировать: Основные изменения и некоторые лучшие аргументы, которые ускользали от многих, в том числе и от меня долгое время.Точнее, короче.

До OpenGL 3.0 не было возможности выбрать конкретную версию OpenGL.Вы всегда получаете самую высокую версию, поддерживаемую вашим драйвером и возможностями графического адаптера.Это означало, что новые основные функции должны были быть совместимы со старыми функциями из предыдущих версий, иначе старые приложения могли бы сломаться при работе в более поздней версии OpenGL.Побочным эффектом от невозможности внесения изменений в предыдущие версии было то, что OpenGL постепенно начал страдать от ползучести функций.Функциональность была добавлена ​​вместо усиления того, что уже существовало.Если вы посмотрите на OpenGL 2.1, то хорошим примером будет большое количество различных вызовов отрисовки.

Новый вызов создания контекста, представленный в OpenGL 3.0 , наконец, позволяет вам выбрать конкретную версию OpenGL для вашего контекста , а также если вы хотите использовать устаревшую функциональность или нет. Это означает, что OpenGL может, наконец, модифицировать старую базовую функциональность , и это подразумевает нечто большее, чем просто удаление функций, которые, как я видел, некоторые люди используют в качестве контраргумента для изменений.Это также означает изменение семантики функций без их удаления. Пример - сделать функции glGen .. обязательными для генерации имен объектов, а также сделать обязательными шейдеры и объекты массива вершин.(Последнее не рекомендуется в OpenGL 3.3, не применяется).

Теперь, когда это возможно, можно наконец-то исправить 14 лет ползучести и плохих дизайнерских решений.Что имело смысл, когда OpenGL 1.1 был представлен в 1996 году, не обязательно имеет смысл сейчас в 2010 году. Старые функции, которые не являются оптимальными на современном оборудовании, были удалены, а некоторые были удалены, чтобы сделать API более общим.Примером этого является удаление вызовов gl..Pointer, таких как glVertexPointer, в пользу glVertexAttribPointer.OpenGL 3.x, наконец, не помечает ваши данные шейдера как «это» и «это»;Вам решать.Также были внесены изменения в существующую функциональность, поэтому они отличаются по семантике от предыдущих версий.Шейдеры были сделаны обязательными, удалив шейдерную программу по умолчанию 0, которая использовалась для обозначения «шейдеры отключены / используют фиксированную функциональность».Поскольку вызовы draw, такие как glDrawElements, возвращают GL_INVALID_OPERATION, когда привязана недопустимая шейдерная программа, вы фактически вынуждены сначала создать шейдер.

Но все не может быть изменено в одночасье, поэтому OpenGL 3.x представилмодель амортизации.Функциональность не рекомендуется по крайней мере для одной версии, прежде чем она будет удалена в более поздних версиях.Удаленная функциональность была перемещена в расширение OpenGL под названием GL_ARB_compatibility.Вы можете включить эту функцию, создав профиль совместимости, а не профиль ядра.Это флаг в вызове создания нового контекста, который принимается в OpenGL 3.1 и более поздних версиях (не в 3.0).Устаревшая функциональность может быть отключена путем создания совместимого с форвардом контекста.Опять же, это флаг создания контекста.

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

3 голосов
/ 16 августа 2010

Многие вещи, на самом деле.Немедленный режим устарел.Чтобы получить функции OpenGL 3.0, вы должны явно создать контекст OpenGL 3.0 (существующие программы OpenGL 2.0 этого не сделают, поэтому они получают контекст, совместимый с 2.0).API также был расширен (см. http://www.opengl.org).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...