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

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

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

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

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

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

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

//-- 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);
...