Подтвердить что ты не робот

Что плохого в GL_QUADS?

Я слышал, что GL_QUADS будут удалены в версиях OpenGL > 3.0, почему? Станут ли мои старые программы работать в будущем? Я тестировал, и GL_TRIANGLES или GL_QUADS не имеют разницы в скорости рендеринга (возможно, даже быстрее GL_QUADS). Итак, в чем смысл?

4b9b3361

Ответ 1

Дело в том, что ваш графический процессор отображает треугольники, а не квадрациклы. И почти тривиально построить прямоугольник из двух треугольников, поэтому API действительно не нужно обременять возможностью рендеринга квадратов. OpenGL проходит крупный процесс обрезки, сокращая массу функциональности, которая имела смысл 15 лет назад, но больше не соответствует тому, как работает GPU, или как GPU когда-либо будет работать. Полагаю, что конвейер с фиксированной функцией также исчез из последних версий, потому что, опять же, он больше не нужен, и он больше не соответствует тому, как работает GPU (программируемые шейдеры).

Дело в том, что чем меньше и сложнее OpenGL API, тем проще для продавцов писать надежные, высокопроизводительные драйверы, и тем легче научиться правильно и эффективно использовать API.

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

Поэтому они пытаются оптимизировать API.

Ответ 2

Это не "что-то". Как и во многих других функциях, GL_QUADS устарел в версии 3.0 и удален в версии 3.1. Очевидно, что это не имеет значения, если вы создаете контекст совместимости.

Любой ответ, который кто-либо может дать по причине обесценивания, будет явной предпосылкой.

Ответ 3

Люди уже довольно хорошо ответили на ваш вопрос. В дополнение к их ответу, одна из причин того, что GL_QUADS является устаревшей, объясняется природой quads undefined.

Например, попробуйте моделировать квадрат 2d с точками (0,0,0), (1,0,0), (1,1,1), (0,1,0). Это плоский квадроцикл с перетаскиванием одного угла. Таким образом невозможно сделать НОРМАЛЬНЫЙ плоский квадрат. В зависимости от драйверов, он будет разделен на два треугольника, один или другой, который мы не можем контролировать. Такая модель ДОЛЖНА быть смоделирована с двумя треугольниками. - Все три точки треугольника всегда лежат на одной плоскости.