Каков синтаксис для 'pixel_interlock_ordered' в GLSL? - PullRequest
0 голосов
/ 15 февраля 2019

Я испытываю расширение 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») содержит только ссылки на официальные спецификации, поэтомуЯ не могу найти пример. Какой правильный синтаксис?

1 Ответ

0 голосов
/ 15 февраля 2019

Определители макета в GLSL немного странные.Они обычно применяются к декларациям, но некоторые из них эффективно применяются к шейдеру в целом.Такие квалификаторы в основном специфичные для шейдера опции , которые вы устанавливаете из шейдера.

Квалификаторы блокировки - это такие квалификаторы.Вы не говорите, что эта переменная будет доступна через блокировку, потому что это не то, что означает блокировка.Это означает, что выполнение связанного с блокировкой кода будет иметь определенное свойство относительно выполнения связанного с блокировкой кода при других вызовах того же шейдера.Квалификатор определяет подробности ограничения выполнения.

Квалификаторы, которые применяются к шейдеру в целом, грамматически определены как квалификаторы для in или out (большинство таких классификаторов используют in, но несколькоиспользуйте out):

layout(pixel_interlock_ordered) in;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...