воскресенье, 8 ноября 2015 г.

OpenGL 4.4 Instancing. Часть 2.

В предыдущей главе мы рассмотрели несколько типов инстансинга, в частности нас больше всего интересовало рисование посредством glDrawElementsInstanced и glDrawElementsIndirect, а так же их производных – glMultiDrawElementsInstanced и glMultiDrawElementsIndirect. Давайте сравним результаты их работы.

OpenGL 4.4 Instancing. Часть 1.


Как же быстро идет время, казалось бы, еще вчера анонсировали OpenGL 4.4, сел я делать краткий обзор по новинкам и вот уже и 2015-й заканчивается, а Khronos Group уже трубит о Vulkan… Отсутствие свободного времени, а также анонс нового API убавили энтузиазма, и эта статья пропылилась в закромах черновиков два года. Однако, «Рим строился не за один день», и пока Vulkan API мне не удалось даже пощупать, так что эта тема может быть для кого-то все еще актуальна. Переписывать статью уже лень, так что оставил все как было два года назад J 
Итак, в древние времена я выложил несколько статей по инстансингу и выводу GUI средствами OpenGL 2.1. Однако время идет и все меняется, так вот на улице уже откуда ни возьмись 2014 год и OpenGL 4.4, а по всем каналам трубят о том, какая крутая штука этот новый инстансинг. Давайте и мы разберемся какие средства для инстансинга нам предоставляет OpenGL 4.4.

вторник, 8 января 2013 г.

VBO. Обобщенные атрибуты

В предыдущих уроках мы с вами рассмотрели работу со стандартными (встроенными) вершинными атрибутами, устанавливаемыми через gl*Pointer, где вместо "*" мог быть один из стандартных атрибутов - Vertex/Normal/Color/TexCoord и прочие. Однако, в OpenGL3.х+ этот тип атрибутов был объявлен устаревшим и удален, то же самое произошло и в OpenGL ES 2.0/3.0.
К счастью не все так плохо как кажется, во-первых, начиная с OpenGL 3.2 существует два профиля OpenGL - "ядро" и "профиль совместимости". В профиле совместимости вернули весь "устаревший" функционал, в том числе и стандартные вершинные атрибуты, так что, если вы не планируете переходить на "core" версию или переходить на мобильные платформы, то вам бояться нечего. Во-вторых, если вам все же придется в будущем осуществить такой переход, то основы можно заложить уже сегодня, благо обобщенные атрибуты, на которые был осуществлен переход в современных версиях OpenGL (3.x+/ES2.0+) существуют еще с OpenGL 1.3 и с тех пор практически не изменились. О них мы и поговорим в этой части.

вторник, 11 декабря 2012 г.

OpenGL 4.3. Рендеринг в текстуру, альтернативы FBO

Не так давно я привел перевод одной из статей по SSBO (shader_storage_buffer_object), сегодня я решил продолжить рассмотрение нововведений, появившихся в OpenGL 4.2-4.3, в частности  - продолжить знакомство с уже знакомым нам SSBO и clear_buffer_object, а так же рассмотреть появившееся в OpenGL 4.2 расширение shader_image_load_store.
Оба этих расширения предоставляют альтернативный вариант рендеринга в текстуру, но возникает закономерный вопрос о производительности этих подходов. В этой статье я разберу каждый из вариантов и сделаю оценку их производительности.

пятница, 7 декабря 2012 г.

OpenGL 4.3. Shader Storage Buffer Object

В OpenGL 4.3 появился давно ожидаемый новый тип буфера - Shader Storage Buffer Object (сокращенно SSBO), являющийся по существу массивом для произвольного чтения/записи в шейдере, исключающий необходимость использовать для этих целей текстурные буферы совместно с расширением Image Load Store. Вкратце об этом буфере написано в этой статье, здесь я привожу ее перевод с некоторыми дополнениями (взятыми из спецификации).

воскресенье, 22 июля 2012 г.

Инстансинг. Часть вторая, псевдоинстансинг.

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

Инстансинг. Часть первая, прокси и инстансы.

В предыдущих статьях мы с вами рассмотрели способы вывода низкополигональной геометрии и оценили производительность разных подходов. В этих статьях шла речь об объектах, составленных из нескольких полигонов, таких как частицы, буквы, спрайты, элементы GUI и прочее. Так же мы рассмотрели и более сложные случаи - системы частиц, основное отличие которых состояло в их количестве и динамичности. Но есть и другой класс объектов, в него попадают объекты с количеством полигонов более сотни, это могут быть всякие скамейки, столы, вазы, астероиды, столбы, модели в стратегиях, актеры и прочее. В некоторых случаях это могут быть примитивы (шар, тор, цилиндр и прочее), но чаще это отдельные модели. Для начала давайте определим отличительные черты таких объектов, относительно рассмотренных ранее элементов GUI.