Альтернатива для glBlitFrameBuffer () в OpenGL ES 2.0

Моя программа для Android должна использовать glBlitFrameBuffer() для копирования объекта FrameBuffer . Но glBlitFrameBuffer() поддерживается только на устройствах OpenGL ES 3.0+. Я хочу поддерживать устройства OpenGL ES 2.0+.

Существует ли какое-либо решение / альтернатива для этой функции?

Solutions Collecting From Web of "Альтернатива для glBlitFrameBuffer () в OpenGL ES 2.0"

  1. Свяжите текстуру, которая используется в качестве вложения для размещения на буфере исходного кадра
  2. Привязать фреймбуфер назначения
  3. Нарисуйте полноэкранный квадрат (если вам нужно растянуть или смещать чтение с помощью координат вершин / текс)
  4. Извлеките данные из связанной текстуры в фрейм-шейдер и поместите ее в gl_FragColor

Я создал CopyShader, который просто использует шейдер для копирования из текстуры в фреймбуфер.

 private static final String SHADER_VERTEX = "" + "attribute vec4 a_Position;\n" + "varying highp vec2 v_TexCoordinate;\n" + "void main() {\n" + " v_TexCoordinate = a_Position.xy * 0.5 + 0.5;\n" + " gl_Position = a_Position;\n" + "}\n"; private static final String SHADER_FRAGMENT = "" + "" + "uniform sampler2D u_Texture;\n" + "varying highp vec2 v_TexCoordinate;\n" + "void main() {\n" + " gl_FragColor = texture2D(u_Texture, v_TexCoordinate);\n" + "}\n”; 

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