Я испытываю расширение ARB_fragment_shader_interlock в OpenGL 4.5 и не могу заставить шейдер скомпилировать при попытке использовать pixel_interlock_ordered.
#version 430
#extension GL_ARB_shading_language_420pack : require
#extension GL_ARB_shader_image_load_store : require
#extension GL_ARB_fragment_shader_interlock : require
layout(location = 0, rg8, pixel_interlock_ordered) uniform image2D image1;
void main()
{
beginInvocationInterlockARB();
ivec2 coords = ivec2(gl_FragCoord.xy);
vec4 pixel = imageLoad(image1, coords);
pixel.g = pixel.g + 0.01;
if (pixel.g > 0.5)
pixel.r = pixel.r + 0.01;
else
pixel.r = pixel.r + 0.02;
imageStore(image1, coords, pixel);
endInvocationInterlockARB();
}
Следующий шейдер не скомпилируется с:
0(6) : error C7600: no value specified for layout qualifier 'pixel_interlock_ordered'
Какую же ошибку вы получите для любого случайного имени вместо pixel_interlock_ordered.Я предполагаю, что синтаксис каким-то образом отличается, но спецификация (https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_fragment_shader_interlock.txt) называется «классификатором макета».
Поиск в гугле «pixel_interlock_ordered») содержит только ссылки на официальные спецификации, поэтомуЯ не могу найти пример. Какой правильный синтаксис?