替代OpenGL ES 2.0中的glBlitFrameBuffer()

时间:2014-08-22 03:34:19

标签: android opengl-es opengl-es-2.0 framebuffer

我的Android程序必须使用glBlitFrameBuffer()函数来复制FrameBuffer对象。但只有OpenGL ES 3.0+设备支持glBlitFrameBuffer()功能。我想支持OpenGL ES 2.0+设备。

这个功能有什么解决方案/替代方案吗?

2 个答案:

答案 0 :(得分:2)

  1. 绑定在源帧缓冲区上用作collor附件的纹理
  2. 绑定目标帧缓冲区
  3. 绘制全屏四边形(如果需要使用顶点/ tex坐标进行拉伸或偏移读取操作)
  4. 从frament着色器中的绑定纹理中获取数据并将其放入gl_FragColor

答案 1 :(得分:0)

我创建了一个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设置为要从复制的纹理,并绑定要写入的帧缓冲区,然后设置。