Чем отличается OpenGL 3 от других. x?

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

14
задан Stephen Melvin 16 August 2010 в 11:40
поделиться

2 ответа

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

До 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, которая использовалась для обозначения «шейдеры отключены / используются фиксированные функции». Поскольку такие вызовы отрисовки, как glDrawElements , возвращают GL_INVALID_OPERATION, когда привязана неверная программа шейдера, вы фактически вынуждены сначала создать шейдер.

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

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

30
ответ дан 1 December 2019 в 08:15
поделиться

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

3
ответ дан 1 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: