Хобрук: Ваш путь к мастерству в программировании

Как привязать GL_TEXTURE_2D_ARRAY к фреймбуферу на GL_COLOR_ATTACHMENT1?

Редактировать: см. ответ @Rabbid76, вопрос на самом деле не был связан с GL_TEXTURE_2D_ARRAY, а только с активацией прикрепления цвета кадрового буфера!

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

glGenTexture(1, tex);
glBindTexture(GL_TEXTURE_2D_ARRAY, tex);
glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA32F, x, y, 2);

glGenFramebuffers(1, &FBO);
glBindFramebuffer(GL_FRAMEBUFFER, FBO);
glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex, 0, 0);
glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, tex, 0, 1);

фраг-шейдер, который пишет:

#version 330

layout(location = 0) out vec4 col1;
layout(location = 1) out vec4 col2;

int main()
{
    col1 = vec4(1.0);
    col2 = vec4(2.0);
}

другой шейдер, который использует результат:

#version 330 core

uniform sampler2DArray tex;

in vec2 Coord;

int main()
{
    vec4 val = texture(tex, vec3(Coord, 0));
    val += texture(tex, vec3(Coord, 1));
}

Проблема в том, что col1 хорошо пишется на layout 0 (независимо от слоя текстуры, glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texDefo, 0, 1); тоже работает), но у меня не получается писать на layout 1 (GL_COLOR_ATTACHMENT1). Я что-то упустил здесь?

Расширенные тесты:

Из того, что я мог сузить, действительно похоже, что layout(location = 1) работает не так, как я ожидал. С предоставленным кодом я получаю

  • val = col1, когда layout(location = 0) out vec4 col1;
  • val = col2, когда layout(location = 0) out vec4 col2; оба независимо от того, к какому слою текстуры я привязал GL_COLOR_ATTACHMENTi, т.е. оба слоя работают в GL_TEXTURE_2D_ARRAY.
24.05.2021

Ответы:


Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..