Чтение текстуры трафарета в вычислительном шейдере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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Работа с буфером вершин с несколькими потоками в вычислительном шейдере
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • OpenGL Ray Tracer и BVH в вычислительном шейдере
    Anonymous » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Рендеринг в 2 закадровые текстуры одновременно в шейдере фрагмента металла.
    Anonymous » » в форуме IOS
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Текстура OpenGL показывает сплошной цвет текстуры, а не всей текстуры.
    Anonymous » » в форуме C++
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Почему мое видео не соответствует размеру текстуры, когда я меняю размер текстуры
    Anonymous » » в форуме Android
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

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