解决android opengl glReadPixels 慢的问题
由于android的gpu跟cpu内存是分离的,导致数据拷贝的过程中会非常慢,网上资料相对较少,下面是我解决这个问题的一点心的,使用PBO代码如下
1. 初始化纹理方法
public static int loadTexture(final Bitmap img, final int usedTexId, int i) {
if(img == null)
return NO_TEXTURE;
// ByteBuffer img_buffer = ByteBuffer.allocate(img.getByteCount());
// img.copyPixelsToBuffer(img_buffer);
ByteBuffer pbo_point = null;
int textures[] = new int[1];
if (usedTexId == NO_TEXTURE) {
GLES30.glGenTextures(1, textures, 0);
GLES30.glBindTexture(GLES30.GL_TEXTURE_2D, textures[0]);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D,
GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D,
GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_LINEAR);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D,
GLES30.GL_TEXTURE_WRAP_S, GLES30.GL_CLAMP_TO_EDGE);
GLES30.glTexParameterf(GLES30.GL_TEXTURE_2D,
GLES30.GL_TEXTURE_WRAP_T, GLES30.GL_CLAMP_TO_EDGE);
GLES30.glGenBuffers(1, pbo);
GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, pbo.get(0));
GLES30.glBufferData(GLES30.GL_PIXEL_PACK_BUFFER,width*height*4, null, GLES30.GL_DYNAMIC_READ);
GLES30.glBindBuffer(GLES30.GL_PIXEL_PACK_BUFFER, 0);
GLUtils.texImage2D(GLES30.GL_TEXTU