Сбой в тестировании глубины при использовании постобработки вычислительного шейдераJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сбой в тестировании глубины при использовании постобработки вычислительного шейдера

Сообщение Anonymous »

Я создал программу, которую можно было легко реализовать с помощью пользовательских классов и шейдеров.
Затем я добавил простой этап постобработки с использованием вычислительных шейдеров, что привело к сбою тестирования глубины, хотя все остальное работает. Если просто удалить постобработку, тестирование глубины снова заработает.
Вот основной метод рендеринга:

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

    public void render() {
post.start();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_DEPTH_TEST); // Breaks when using post processing
for (Mesh m : meshes) {
if (m.doDepthTest()) {
ShaderProgram p = m.getShader();
p.use();
uploadUniform(p);
m.render();
p.unuse();
}
}
glDisable(GL_DEPTH_TEST);
for (Mesh m : meshes) {
if (!m.doDepthTest()) {
ShaderProgram p = m.getShader();
p.use();
uploadUniform(p);
m.render();
p.unuse();
}
}
post.runPostProcess();
glfwSwapBuffers(window);
glfwPollEvents();
}
Метод start очень прост и только связывает фреймбуфер и устанавливает размер области просмотра:

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

    public void start() {
glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
glViewport(0, 0, width, height);
}
Это основной этап постобработки, на котором визуализируется результат:

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

    public void runPostProcess() {
computeProgram.use();
glBindImageTexture(0, renderedTexture, 0, false, 0, GL_READ_ONLY, GL_RGBA32F);
glBindImageTexture(1, processedTexture, 0, false, 0, GL_WRITE_ONLY, GL_RGBA32F);

glDispatchCompute((int) Math.ceil(width / 16.0), (int) Math.ceil(height / 16.0), 1);
glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
computeProgram.unuse();

glBindFramebuffer(GL_FRAMEBUFFER, 0);
glClear(GL_COLOR_BUFFER_BIT);
quadProgram.use();
glBindTexture(GL_TEXTURE_2D, processedTexture);
renderFullscreenQuad();
quadProgram.unuse();
}
Я не понимаю, в чем проблема. Я использовал Nsight, чтобы проверить, есть ли видимая проблема. Но кроме вызовов, не меняющих состояние, ничего не было.
Я пробовал менять местами при использовании шейдеров, при очистке буфера глубины и при привязке фреймбуфера, но ничего не помогло.

Подробнее здесь: https://stackoverflow.com/questions/787 ... processing
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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