У меня есть фрагментный шейдер (GLSL 4.5), который должен записывать непрозрачные пиксели в кадровый буфер (путем записи в объявленные выходные переменные) и прозрачные пиксели в буфер хранения шейдера для последующей композиции. Для этого я планировал записать прозрачные пиксели в буфер хранения шейдера, а затем вызвать discard
, чтобы предотвратить запись в кадровый буфер.
Теперь я наткнулся на этот раздел OpenGL на khronos.org Wiki (выделено мной):
Команда сброса также предотвратит любые операции сохранения изображений и атома c и записи в объект буфера хранилища шейдеров (, выпущенные до сброса ) от работы.
Я был очень удивлен, увидев это, потому что, если учесть, что различные вызовы шейдеров могут обмениваться информацией, записывая и читая буферы хранения шейдеров, и поэтому они могли бы вести себя по-разному на основе на такой вирт до того, как оператор сброса даже будет достигнут.
Я изучил GLSL 4.5 Спецификация , но я не смог найти ничего, что поддерживает утверждение из вики.
Также: если это так, возможно, более поздние записи в буфер общего хранилища не сбрасываются ред