Есть ли способ обмена данными между кадровыми буферами в 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);