2016-05-25 1 views
5

glMemoryBarrier доступна в GL 4.2 и выше, в то время как glTextureBarrier доступен в GL 4.5разница между glTextureBarrier() и glMemoryBarrier (GL_TEXTURE_FETCH_BARRIER_BIT)

glTextureBarrier позволяет одновременно визуализации в одной и той же текстуры в то время как фрагмент шейдера извлечения из него, IFF каждый текст текстуры попадает в textfetches ровно один раз.

Интересно, позволяет ли это glMemoryBarrier (GL_TEXTURE_FETCH_BARRIER_BIT)? Если нет, существует ли эквивалент OpenGL ES для glTextureBarrier?

ответ

3

glTextureBarrier позволяет одновременно визуализировать в одну и ту же текстуру, в то время как фрагментарный шейдер извлекает из нее, IFF каждый текст текстуры попадает в textfetches ровно один раз.

Нет, это не так.

glTextureBarrier - это функция. ARB_texture_barrier - это расширение (и часть GL 4.5). Как часть изменений спецификации, расширение ARB_texture_barrier допускает одно чтение/изменение/запись по прикрепленному изображению.

Теперь, позвонив по телефону glTextureBarrier, вы получите второй прочесть/изменить/написать пропуск. И вы можете снова позвонить ему, чтобы получить еще один пропуск. Но glTextureBarrier сам по себе не дает вам права на чтение/изменение/запись. Это расширение в целом.

Также обратите внимание, что эти две функции не имеют ничего общего.

glMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT) относится только к статьям incoherent memory operations (SSBOs/загрузка/хранение изображений). Этот конкретный барьер бит означает, что некогерентные записи, выпущенные до того, как эта функция станет видимой для операций с образцами текстур, выданных после этой функции.

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

Если нет, то существует ли эквивалент OpenGL ES для glTextureBarrier?

Пока что нет. И учитывая тот тип оборудования, который имеет тенденцию к внедрению ES, вряд ли он когда-либо появится. Хотя общая идея имеет смысл для стилистов на основе стилей, это просто неправильная абстракция для них.

Вводные приспособления Vulkan и барьеры трубопровода намного лучше подходят для такого рода вещей в TBR.

+1

Означает ли это, что если расширение texture_barrier доступно, я могу визуализировать объект в FBO, а затем отображать полноэкранный квадрат с тем же FBO с помощью фрагментарного шейдера, который получает привязку цвета этого FBO в виде текстуры (gl_FragCoord. xy) для реализации полноэкранного эффекта, и мне не нужно вызывать glTextureBarrier перед рисованием полноэкранного квадранта? Или мне нужен glTextureBarrier уже в этом случае? – user1282931

+0

Кроме того, что именно означает один «проход чтения/изменения/записи»? если текстура представляет собой текстуру с несколькими образцами, разрешено ли читать все образцы исходного текста тесселя или это не будет считаться одним прочтением? – user1282931