VBO или списки отображения - совместимость GPU - PullRequest
1 голос
/ 04 мая 2011

Я работаю над новым приложением OpenGL и знаю, что списки отображения будут устаревшими в OpenGL 3.1 (наряду со многими другими полезными функциями, которые (для меня) кажутся глупыми) и заменены объектами буфера вершин. Я успешно нарисовал треугольник, используя VBO на карте NVidia, но пример не смог работать на чипе Intel на моем нетбуке, потому что он не поддерживает glGenBuffers. Кажется, в OpenGL есть существенный недостаток (разрыв совместимости между новыми и старыми графическими процессорами / GMA). Для малого бизнеса совместимость с как можно большим количеством систем необходима для моей игры, но я не хочу, чтобы моя программа не работала на более новых видеокартах (из-за зависимости от списков отображения, которые были удалены из OpenGL 4.1 Спецификация). Что дало бы мне самую широкую поддержку на видеокартах (старых и новых). Отображать списки или объекты буфера вершин?

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

Если ваше приложение будет работать на GMA, у вас обязательно будет низкое число поли.Так что неэффективность наличия списков отображения, эмулируемых в драйверах для новых видеокарт, не будет проблемой, они имеют запасную полосу пропускания.

Если вы по-прежнему беспокоитесь об эффективности, обязательно используйте glVertexPointer /glDrawArray, чтобы максимизировать размер партии.Это можно комбинировать со списками отображения, но уменьшает количество отдельных операций в списке и, следовательно, делает эмуляцию менее проблемной.

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

3 голосов
/ 04 мая 2011

Ваша карта Intel поддерживает VBO, но только через интерфейсы ARB.Попробуйте glGenBuffersARB (вместе с преобразованием всего другого кода VBO для использования версий ARB).Он будет работать на nVidia и Intel GMA.

0 голосов
/ 30 июля 2013

В качестве альтернативы вы можете запросить версию OpenGL, поддерживаемую системой, и использовать списки отображения или VBO соответственно вместо того, чтобы полагаться на один метод для совместимости с каждой версией OpenGL. Таким образом, вы можете быть уверены, что используете самый современный, самый эффективный и быстрый способ рисования, какой бы метод (списки отображения / VBO) не поддерживал система.

Кроме того, такая реализация может быть легко расширена для поддержки будущих методов рисования, скажем, в OpenGL 4.4 или OpenGL 5.0. Однако это может привести к тому, что несколько фрагментов кода будут выполнять одно и то же функционально: сообщать графическому процессору, что делать, что может увеличить размер и сложность кода.

...