- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个使用 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/
在android-opengles中,我们知道任何图元都可以通过OnDrawFrame(GL10 gl){.......}这是不断呈现的。就好像我们想画一个在 triangle 类中定义的三角形我们用
我遇到了 GLSurfaceView 的不同行为。据我所知,程序有责任清除每一帧的缓冲区(颜色和深度)。这意味着如果我不清除缓冲区,我会得到最后一帧的内容(或之前的双缓冲帧)。 似乎无论在某些设备上如
我在 OpenGL ES 2.0 中为 android 编写小应用程序。一切都很顺利,但今天我实现了 2D 文本绘图。我只是创建普通的 Canvas ,在上面写文字,然后我只是将这个位图加载为 2D
我有一个使用 GLSurfaceView.Renderer 的 Activity, 在渲染器中,我使用 onDrawFrame 使用 glTexImage2D 在每个触摸事件上绘制新图像,一切都很好,
我在为我的第一个游戏创建游戏循环时遇到了问题。我已经阅读了很多有关它的内容,但仍然无法弄清楚。它基于 OpenGL,所以我将 onDrawFrame 用作游戏循环,它在我的手机上运行良好。问题是 on
我遇到了渲染器对象似乎根本没有调用其 onDrawFrame 的问题。调试器永远不会在函数内部遇到断点。因此,我的方 block 没有绘图。这是代码,如果您需要其他任何东西,请告诉我: public
我正在创建一个游戏循环,我需要能够调用 onDrawFrame(从渲染器内部手动调用)以便在我发现我落后于进程时“跳过帧”。 目前我有一个调用的 GLSurfaceView 类 setRenderer
我刚刚注意到一件奇怪的事情 - 看起来我的 GlSurfaceView.Renderer::onDrawFrame() 很少被调用。至少我希望它是另一种方式: 当前渲染器的 renderMode 设置
我有一个 UI,它有一个显示多边形的 GLSurfaceView。 UI 还有两个按钮 ZoomIn 和 ZoomOut。当用户按下这些按钮时,将调用 myGLSurfaceView 的 zoomIn
我正在 Android 上的 Open GLES 中使用 Java 设计一款游戏。 显然我使用了大量纹理,很快我就会耗尽内存。 我对 Android 和 Java 很陌生,但我认为解决这个问题的最简单
在我的 openGL 游戏中,我通常使用 onDrawFrame() 中的 GLSurfaceView.Renderer 类绘制我的场景。但是,当我显示加载屏幕时,我想在加载每项数据后强制屏幕绘制,以
我们正在构建一个可滚动的背景,目前有一个大的背景图像,我们将其分成 512x512 的图 block ,并希望在需要时加载这些图 block ,而不是在 onDrawFrame 中调用 GLUtils
我正在使用表面纹理作为 mediacodec 的输出,请参阅下面的一些日志,2 个问题: mediacodec多次发布,为什么onFrameAvailable和onDrawFrame只调用一次? 通过
我收到了 Fatal Signal 11 之后 GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4); 在我的 OnDrawFrame 函数中调用。纹
一段时间以来,我的 Android 游戏中运动的 Sprite 间歇性“卡顿”。这是一款非常简单的 2D OpenGL ES 2.0 游戏。 (这是一个持续存在的问题,我已经多次重新访问过)。 在我的
我想控制 GLSurfaceView.Renderer 的渲染速率。我在扩展 GLSurfaceView 的类中实现了一个线程,并在 while(true) 循环中将其定期 hibernate ,这不
我是一名优秀的程序员,十分优秀!