Есть ли способ обмена данными между кадровыми буферами в webgl2? (попытка многоступенчатой ​​обработки изображений)

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

для каждого кадра: 1) установить видеоизображение потока камеры в качестве текстуры 2) применить некоторые эффекты в буфере первого кадра 3) установить результат в качестве текстуры в буфере второго кадра 3) применить некоторые эффекты в буфере второго кадра 4) установить результат в качестве текстуры в буфере третьего кадра 5) применить некоторые эффекты в буфере третьего кадра... последний шаг) установить нулевой буфер кадра и нарисовать на холсте с финальными эффектами.

примечание: эффекты являются прогрессивными и основаны на законченном результате предыдущего эффекта

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

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

код выглядит примерно так:

//-- Load video frame and snapshot
refresh_texture();

//-- use first buffer to draw
GL.bindFramebuffer(GL.FRAMEBUFFER, framebuffers[0]);
GL.uniform1f(_stageNumber, 0);
GL.drawElements(GL.TRIANGLES, 6, GL.UNSIGNED_SHORT, 0);
////////////////////////////////////////////////////////////////////////////////

// for the next draw, use the texture we just rendered to.
GL.bindTexture(GL.TEXTURE_2D, textures[0]);
GL.uniform1f(_stageNumber, 1);
//-- use second buffer to draw
GL.bindFramebuffer(GL.FRAMEBUFFER, framebuffers[1]);
GL.drawElements(GL.TRIANGLES, 6, GL.UNSIGNED_SHORT, 0);

0 ответов

Другие вопросы по тегам