【发布时间】:2014-08-22 03:34:19
【问题描述】:
我的 Android 程序必须使用 glBlitFrameBuffer() 函数来复制 FrameBuffer 对象。但glBlitFrameBuffer() 函数仅在 OpenGL ES 3.0+ 设备上受支持。我想支持 OpenGL ES 2.0+ 设备。
这个功能有什么解决方案/替代方案吗?
【问题讨论】:
标签: android opengl-es opengl-es-2.0 framebuffer
我的 Android 程序必须使用 glBlitFrameBuffer() 函数来复制 FrameBuffer 对象。但glBlitFrameBuffer() 函数仅在 OpenGL ES 3.0+ 设备上受支持。我想支持 OpenGL ES 2.0+ 设备。
这个功能有什么解决方案/替代方案吗?
【问题讨论】:
标签: android opengl-es opengl-es-2.0 framebuffer
【讨论】:
我创建了一个 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 设置为您想要从 复制的纹理,并绑定您想要写入的帧缓冲区,然后您就应该设置好了。
【讨论】: