gpt4 book ai didi

java - OpenGL ES、onDrawFrame 性能

转载 作者:太空宇宙 更新时间:2023-11-04 14:17:41 25 4
gpt4 key购买 nike

我有一个使用 GLSurfaceView.Renderer 的 Activity, 在渲染器中,我使用 onDrawFrame 使用 glTexImage2D 在每个触摸事件上绘制新图像,一切都很好,但是当更改 onDrawFrame 上的图像时,屏幕会暂停大约 1/2 秒谁能帮忙解决这个问题吗?

Activity :

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);
}

最佳答案

您可能会受益于将图像加载到 native 代码中的纹理中,即使用 NDK 并调用 glTexImage2D。 GLUtils.texImage2D 可能会执行额外的每像素工作,将 java 位图转换为 OpenGL 纹理,您可以在 native 代码中避免或加速。

glTexImage2D 传统上并不是一个快速操作。这对你来说可能有点过头了,但如果你愿意走出 OpenGL 的领域,你可以通过获取底层纹理数据的地址并直接加载到其中来在速度上击败 glTexImage2D。在 Android 上(同样在 native 代码中),您可以使用名为 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)

关于java - OpenGL ES、onDrawFrame 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27530104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com