Что такого плохого в GL QUADS?


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

3 60

3 ответа:

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

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

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

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

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

например, попробуйте смоделировать 2d квадрат с точками (0,0,0), (1,0,0), (1,1,1), (0,1,0). Это плоский квадроцикл с одним углом, подтянутым вверх. Невозможно нарисовать нормальный плоский квадрат таким образом. В зависимости от драйверов, он будет разбит на 2 треугольника либо так, либо иначе - что мы не можем контролировать. Такая модель должна быть смоделирована с двумя треугольниками. - Все три точки треугольника всегда лежат на одной плоскости.

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

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