我正在尝试在 Android 上使用 OpenGL ES 实现离屏渲染。我的最终目标是提高我在普通 java 和 Bitmap/int[] API 中执行的纹理映射的性能。我尝试了 pbuffer 方法,类似于相关论坛线程中的示例代码。它显示出相当低的性能,glReadPixels
在一台设备上调用最多需要 50 毫秒,而在另一台设备上最多需要 15 毫秒。
使用帧缓冲区有更现代的方法。代码示例相当复杂,我预计从帧缓冲区到 Android 位图的传输速度不会比使用 pbuffers 快得多。我的估计是对的吗?
第三种方法是使用像素图。如果我理解正确的文档,他们应该在 OpenGL 和 Dalvik 的内存之间利用比普通副本更复杂的内存共享。问题是 Android SDK 中不存在相关的 API。
Java中没有暴露eglCreateImageKHR
和结构。EGLImageKHR
我能找到的所有 C++ 示例都依赖于它们。
有,eglCreatePixmapSurface
但我无法从文档中弄清楚如何使用它。可能它在参数中接收某种位图句柄native_pixmap
,但我找不到任何方法来创建这样的句柄。搜索“eglCreatePixmapSurface android”只会导致问题报告。
我的主要问题是:我可以在不编写本机代码的情况下通过 Java 在 Android 上使用像素图吗?如果我需要本地化,在深入研究 OpenGL 之前,是否有可以用来评估性能的工作代码?