У меня возникли трудности с чтением текстуры трафарета глубины в вычислительном шейдере. Мне удалось успешно прочитать цветные текстуры, поэтому я подозреваю, что существует какое-то непонятное мне поведение, касающееся текстуры трафарета глубины в FBO.
#version 430 core
#extension GL_ARB_compute_variable_group_size: enable // Allows this shader to use local_size_variable. So local size can be specified from the cpu
layout (local_size_variable) in;
layout (rgba32f, binding = 0) uniform image2D imgOutput;
layout(r32ui, binding = 1) readonly uniform uimage2D depthStencil;
void main()
{
ivec2 coord = ivec2(gl_GlobalInvocationID.xy);
uint packedValue = imageLoad(depthStencil, coord).r;
uint stencil = packedValue & 0xFF;
vec4 output = vec4(stencil, stencil , stencil , 1.0);
imageStore(imgOutput, coord, output);
}
При такой настройке моя выходная текстура остается пустой, даже когда я записываю значения в текстуру трафарета. Передавая цветные текстуры (обычные или альбедо из gBuffer), я могу успешно прочитать значения и скопировать их в выходную текстуру с помощью вычислительного шейдера. Есть ли что-то, чего мне не хватает для работы с текстурой трафарета глубины?
У меня возникли трудности с чтением текстуры трафарета глубины в вычислительном шейдере. Мне удалось успешно прочитать цветные текстуры, поэтому я подозреваю, что существует какое-то непонятное мне поведение, касающееся текстуры трафарета глубины в FBO. [code]// Create gbuffer framebuffer glGenFramebuffers(1, &gBuffer); glBindFramebuffer(GL_FRAMEBUFFER, gBuffer);
//Create depth - stencil texture glGenTextures(1, &depthStencilTexture); glBindTexture(GL_TEXTURE_2D, depthStencilTexture); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, WINDOW_WIDTH, WINDOW_HIEGHT, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); [/code] Я создаю текстуру FBO и трафарета глубины, а затем связываю изображения: [code]glBindImageTexture(0, outputTexture, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F); glBindImageTexture(1, depthStencilTexture, 0, GL_FALSE, 0, GL_READ_ONLY, GL_R32UI); [/code] Затем попытайтесь считать текстуру трафарета на выходе: [code]computeShader->Use(); glDispatchComputeGroupSizeARB(WINDOW_WIDTH, WINDOW_HIEGHT, 1, 1, 1, 1); glMemoryBarrier(accessBit); [/code] Вычислительный шейдер: [code]#version 430 core #extension GL_ARB_compute_variable_group_size: enable // Allows this shader to use local_size_variable. So local size can be specified from the cpu
imageStore(imgOutput, coord, output); } [/code] При такой настройке моя выходная текстура остается пустой, даже когда я записываю значения в текстуру трафарета. Передавая цветные текстуры (обычные или альбедо из gBuffer), я могу успешно прочитать значения и скопировать их в выходную текстуру с помощью вычислительного шейдера. Есть ли что-то, чего мне не хватает для работы с текстурой трафарета глубины?