我有一个Activity,我使用GLSurfaceView.Renderer, 在渲染器中我使用onDrawFrame在每个触摸事件上使用glTexImage2D绘制新图像, 一切都很好,但在更改图像onDrawFrame时屏幕暂停约1/2秒 任何人都可以帮助解决这个问题吗?
活动:
onCreate(){..
glSurfaceView.setRenderer(renderer);
...
private Renderer renderer = new Renderer() {
...
渲染器:
onSurfaceCreated(){..
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
渲染器:
onDrawFrame(){..
if(mytoucheventFired){
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, anotherBitmap, 0);
}
答案 0 :(得分:0)
您可能会受益于在本机代码中将图像加载到纹理中,即使用NDK,并调用glTexImage2D。 GLUtils.texImage2D可能正在进行额外的逐像素工作,将java Bitmap转换为OpenGL纹理,您可以在本机代码中避免或加速。
glTexImage2D传统上不是快速操作。这对你来说可能有些过分,但如果你愿意超越OpenGL领域,你可以通过获取底层纹理数据的地址并直接加载到其中来快速击败glTexImage2D。在Android上(再次在本机代码中),您可以使用名为EGL_KHR_image_base的EGL扩展来获取地址:
您需要的一些关键功能是:
EGLImageKHR eglCreateImageKHR(
EGLDisplay dpy,
EGLContext ctx,
EGLenum target,
EGLClientBuffer buffer,
const EGLint *attrib_list)
EGLBoolean eglDestroyImageKHR(
EGLDisplay dpy,
EGLImageKHR image)
和
void glEGLImageTargetTexture2DOES(
GLenum target,
GLeglImageOES image)