Используя загрузку изображения и магазин, я хотел бы сделать следующее в GLSL 4.2:GLSL нагрузки 4.2 Изображение и магазин & MemoryBarrier
vec3 someColor = ...;
vec4 currentPixel = imageLoad(myImage, uv);
float a = currentPixel.a/(currentPixel.a+1.0f);
vec4 newPixel = vec4(currentPixel.rgb*a+someColor*(1.0f-a),currentPixel.a+1.0f);
imageStore(myImage, uv, newPixel);
значение для «уф» может быть одинаковым для нескольких растровых точек. Чтобы получить правильный результат, я, конечно, не хочу, чтобы никакие другие shaderexecution не записывали в мой пиксель между вызовами imageLoad() и imageStore();
Возможно ли это как-то с памятью Barrier? если да, то как это должно быть использовано в этом коде?
хорошо - уже thoght так. Большое спасибо за разъяснения. да, я пытаюсь сделать смешение. Я мог бы использовать ImageAtomicAdd (.., vec4 (someColor, 1.0f)) и при чтении пикселов, делящихся на их значение .a, но проблема в том, что пиксели изначально уже имеют цвет, а также вес, и этот вес где-то между 0 и 1 – user1282931
@ user1282931: Если вы пытаетесь сделать смешение, почему у вас есть несколько фрагментов, записывающих одно значение? –
Это своего рода обратный просвет на карте отражения. представленное отражение присутствует, а также перпендикуляр объектных номенклатур, и из этого следует обратить внимание на карту отражения - так что множественные фрагменты могут отображаться на один и тот же отражающий тексель и во избежание шума, я хочу использовать смешение – user1282931