Вычислить шейдеры: ошибка в инициализации текстур

У меня есть image2DArray в моих вычислительных шейдерах с 7 срезами. Я могу написать в нем с помощью функции imageStore без проблем, а также отобразить эти текстуры.

Моя проблема связана с инициализацией, я пытаюсь инициализировать свои текстуры, но не могу. Действительно, я делаю цикл для инициализации:

for(int i=0; i<N; i++){
    imageStore( outputTexture , ivec3(texel, i), vec4(0));
}

Когда N = 7, ничего не отображается, но когда N < 7, все работает хорошо, и мои текстуры инициализированы.

Кто-то может объяснить мне, почему я не могу правильно инициализировать мой image2DArray?

Изменить: Что я тестирую, чтобы увидеть это: попробуйте написать во всех кусках текстуры и отобразить его. Он работает нормально, но данные из предыдущего кадра остаются, если я не инициализирую текстуру. Итак, я инициализирую все пиксели срезов на 0, но больше ничего не отображается, если N=7.

Некоторый код:

#version 430 compatibility

layout(rgba8) coherent uniform image2DArray outputTexture;
...
void main(){
    ivec2 texel = ivec2(gl_GlobalInvocationID.xy);  
    ivec2 outSize = imageSize( outputTexture ).xy;

    if( texel.x >= outSize.x || texel.y >= outSize.y )
        return;  

    initializeMeshSet( meshSet );

    vec4 pWorld = texelFetch(gBuffer[0],texel,0);
    pWorld /= pWorld.w;
    vec4 nWorld = texelFetch(gBuffer[1],texel,0);
    nWorld /= nWorld.w;

    if( length(nWorld.xyz) < 0.1 ){
         for(int i=0; i<4; i++){
            imageStore( outputTexture , ivec3(texel, i), vec4(0));
         }

        return;
    }
    if(nbFrame == 0){           
         float value = treatment(texel, pWorld, nWorld.xyz, outSize.x);
         imageStore( outputTexture, ivec3(texel, 0), vec4(vec3(value),1.0));
         imageStore( outputTexture, ivec3(texel, 1), vec4(0.0,0.0,0.0, 1.0));   
    }
    else if(nbFrame == 1){
         float value = treatment2(texel, pWorld, nWorld.xyz, outSize.x);

         vec3 previousValue = imageLoad(outputTexture, ivec3(texel, 1)).xyz * (nbFrame - 1);
         value += previousValue;
         value /= nbFrame;
         imageStore( outputTexture, ivec3(texel, 1), vec4(vec3(value), 1.0));
    }
  }

0 ответов

Другие вопросы по тегам