Какую версию OpenGL выбрать для кроссплатформенного настольного приложения - PullRequest
7 голосов
/ 31 марта 2011

Я работаю над кроссплатформенным настольным приложением с тяжелой 2-D графикой.Я использую спецификацию OpenGL 2.0, потому что мне нужны вершинные шейдеры.Мне нравится базовый API 3.2+ из-за его простоты и мощности.Я думаю, что ядро ​​3.2+ может стать выбором на будущее.Но я боюсь, что в настоящее время эта функциональность может быть недоступна на некоторых платформах (я имею в виду старые графические карты и отсутствие (?) Современных драйверов Linux).Может быть, я должен использовать OpenGL ES 2.0-подобный API для удобного портирования в будущем.

Как обстоят дела с ядром 3.2+, картами и драйверами Linux?

Ответы [ 5 ]

6 голосов
/ 16 июня 2011

Вы можете остаться на OpenGL ES 2.0. Даже если ES означает Embed, это хороший подход, потому что он удаляет все фиксированные функции (glBegin и т. Д.): Вы используете подмножество OpenGL 2.x. Так что если вы пишете свое программное обеспечение, думая только об OpenGL ES 2.0, оно будет быстрым и работает на большинстве.

В действительности, OpenGL ES 2.0 и настольный GL могут иметь некоторые различия, но я не думаю, что это будет то, что вы будете использовать. Если расширение GL_ARB_ES2_compatibility поддерживается, у вас есть «настольная» карта, которая поддерживает полное подмножество встраивания. (4 функа и немного конст.)

Теперь реальный вопрос в том, сколько лет аппаратного обеспечения вы хотите поддерживать? Это все еще много очень старого оборудования, которое имеет очень плохую поддержку gl. Лучше всего было бы поддерживать менее старые (OpenGL 2.0 уже старый):)

6 голосов
/ 15 июня 2011

Старые чипы Intel поддерживают только OpenGL 1.5. Более поздние чипы (примерно два года назад) имеют 2,1, но это хуже, чем 1,5. Sandy Bridge утверждает, что поддерживает «OpenGL 3», не уточняя, способен ли он выполнять 3.3 (как предлагает Дэймон), но драйверы для Linux пока только 2.1. Все удаленное оборудование Radeon и Nvidia с драйверами с закрытым исходным кодом поддерживают 3.3 (геометрические шейдеры) и серии 400-500 поддерживают 4.1 (шейдеры тесселяции).

Таким образом, версии, на которые вы хотите ориентироваться, - это 1,5 (если вы заботитесь о дерьме Intel до Sandy-Bridge), 2,1 (почти для всего оборудования), 3,3 (для достойного оборудования и драйверов с закрытым исходным кодом) или 4,1 (кровоточащий край).

У меня есть вершинные и фрагментные шейдеры, написанные с помощью #version 120, и геометрические шейдеры, написанные на #version 330, чтобы упростить восстановление на старом оборудовании.

2 голосов
/ 31 марта 2011

Я бы лично пошел на OpenGL 3.3, опционально с запасным вариантом для расширений 3.2 плюс (что в принципе то же самое). Это наиболее удобный способ использования OpenGL 3.x и широко поддерживаемый.

Таргетинг 3.1 или 3.0 на самом деле больше не стоит, за исключением тех случаев, когда вы действительно хотите работать на песчаном мосту (который по какой-то непонятной причине поддерживает только 3.0, хотя аппаратные средства очень хорошо способны выполнять 3.3). Также в версиях 3.1 и 3.0 внесены очень существенные изменения в код шейдера, что, на мой взгляд, является кошмаром обслуживания, если вы хотите поддерживать много версий (таких проблем нет с 3.2 и 3.3).

Любое оборудование, которое поддерживает 3.2, также может поддерживать 3.3, единственным препятствием может быть то, что IHV не предоставляют недавний драйвер, или пользователь может быть слишком ленив для обновления. Поэтому вы не можете предполагать, что «3.3 работает везде». Тем не менее, старые драйверы в любом случае будут иметь такую ​​же функциональность через расширения ARB.

1 голос
/ 31 марта 2011

Mac OS X в настоящее время не поддерживает контекст GL-3.Этим летом ситуация может измениться, но я бы все же рекомендовал использовать расширения GL-2 plus.

0 голосов
/ 31 марта 2011

Зависит от средней машины вашего целевого рынка. Хотя, если честно, OpenGL 3.2+ довольно распространен в наши дни.

...