GLSL, семафоры?

У меня уже была проблема с тем, что я хотел смешать значения цвета в единицу изображения, выполнив что-то вроде:

vec4 texelCol = imageLoad(myImage, myTexel);
imageStore(myImage, myTexel, texelCol+newCol);

В сценарии, где несколько фрагментов могут иметь одинаковое значение для «myTexel», это, по-видимому, невозможно, поскольку невозможно создать атомарность между командами imageLoad и imageStore, а другие вызовы шейдеров могут изменить цвет текселя между ними.

Сейчас кто-то сказал мне, что poeple обходит эту проблему, создавая семафоры с использованием атомарных команд на текстурах uint, так что шейдер будет как-то ждать в цикле while, прежде чем получить доступ к texel и, как только он будет свободен, атомарно записать его в целочисленная текстура, чтобы заблокировать другие вызовы фрагментного шейдера, обработать цветную тексель и по окончании атомарно освободить целочисленную тексель.

Но я не могу понять, как это действительно может работать и как будет выглядеть такой код?

Разве можно это сделать? можно ли установить фрагментный шейдер GLSL для ожидания в цикле while? Если это возможно, кто-нибудь может привести пример?

Ответы на вопрос(1)

Ваш ответ на вопрос