Чтение текстуры трафарета в вычислительном шейдереC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Чтение текстуры трафарета в вычислительном шейдере

Сообщение Anonymous »

У меня возникли трудности с чтением текстуры трафарета глубины в вычислительном шейдере. Мне удалось успешно прочитать цветные текстуры, поэтому я подозреваю, что существует какое-то непонятное мне поведение, касающееся текстуры трафарета глубины в FBO.

Код: Выделить всё

// 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);
Я создаю текстуру FBO и трафарета глубины, а затем связываю изображения:

Код: Выделить всё

glBindImageTexture(0, outputTexture, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F);
glBindImageTexture(1, depthStencilTexture, 0, GL_FALSE, 0, GL_READ_ONLY, GL_R32UI);
Затем попытайтесь считать текстуру трафарета на выходе:

Код: Выделить всё

computeShader->Use();
glDispatchComputeGroupSizeARB(WINDOW_WIDTH, WINDOW_HIEGHT, 1,
1, 1, 1);
glMemoryBarrier(accessBit);
Вычислительный шейдер:

Код: Выделить всё

#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), я могу успешно прочитать значения и скопировать их в выходную текстуру с помощью вычислительного шейдера. Есть ли что-то, чего мне не хватает для работы с текстурой трафарета глубины?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ute-shader
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»