我正在开发的Android应用程序需要渲染一些每帧都在不断更新的大位图。在过去的一年里,我通过SurfaceView和Canvas渲染它们,但现在Galaxy Nexus的屏幕尺寸很大,绘制一个大的位图非常慢。
我正在尝试将渲染交换为openGL,但我无法在每帧中更快地更新纹理。目前我正在使用glTexSubImage2d()将每个帧中的位图数据复制到纹理中,但这太慢了。我已经搜索了一下,显然glCopyTexSubImage is somewhat faster,但Android实现不接受数据参数。
有关如何在没有延迟的情况下渲染动态纹理的任何建议吗?
答案 0 :(得分:0)
我不确定这会回答你的问题,但我这样做的方式是我在C / C ++中分配了一个帧缓冲区,并通过ByteBuffer(jni-> NewDirectByteBuffer())将其传递给java。我正在使用它作为纹理,它工作得很快很好。然后,我可以直接在C / C ++中修改这个帧缓冲区,并且在OpenGL sufrace上执行渲染后,这些更改是可见的。我目前遇到ICS Galaxy Nexus的问题,因为如果纹理超过2048x2048像素,它不能正确应用纹理。我假设错误与设备的硬件约束有关,但我仍在进行一些测试。