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.
Означает ли это, что если расширение texture_barrier доступно, я могу визуализировать объект в FBO, а затем отображать полноэкранный квадрат с тем же FBO с помощью фрагментарного шейдера, который получает привязку цвета этого FBO в виде текстуры (gl_FragCoord. xy) для реализации полноэкранного эффекта, и мне не нужно вызывать glTextureBarrier перед рисованием полноэкранного квадранта? Или мне нужен glTextureBarrier уже в этом случае? – user1282931
Кроме того, что именно означает один «проход чтения/изменения/записи»? если текстура представляет собой текстуру с несколькими образцами, разрешено ли читать все образцы исходного текста тесселя или это не будет считаться одним прочтением? – user1282931