OpenGL ES 2.0 中 glBlitFrameBuffer() 的替代方法

12
我的Android程序必须使用glBlitFrameBuffer()函数来复制FrameBuffer对象。但是,glBlitFrameBuffer()函数只支持OpenGL ES 3.0及以上版本的设备。我想要支持OpenGL ES 2.0及以上版本的设备。
有没有任何解决方案或替代函数?
2个回答

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

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设置为您想要从中复制的纹理,并绑定要写入的帧缓冲区,您就可以开始了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接