Java 快速更新OpenGL纹理

Java 快速更新OpenGL纹理,java,android,opengl-es,Java,Android,Opengl Es,我正在开发的Android应用程序需要渲染一些每帧都在不断更新的大型位图。在过去的一年里,我通过SurfaceView和Canvas渲染它们,但现在由于Galaxy Nexus的巨大屏幕,绘制大型位图的速度非常慢 我正在尝试将渲染切换到openGL,但我无法足够快地更新每个帧的纹理。目前,我正在使用glTexSubImage2d()将位图数据每帧复制到纹理中,但这太慢了。我搜索了一下,很明显,Android实现不接受数据参数 有什么建议可以让我在不延迟的情况下渲染动态纹理吗?我不确定这是否能回答

我正在开发的Android应用程序需要渲染一些每帧都在不断更新的大型位图。在过去的一年里,我通过SurfaceView和Canvas渲染它们,但现在由于Galaxy Nexus的巨大屏幕,绘制大型位图的速度非常慢

我正在尝试将渲染切换到openGL,但我无法足够快地更新每个帧的纹理。目前,我正在使用glTexSubImage2d()将位图数据每帧复制到纹理中,但这太慢了。我搜索了一下,很明显,Android实现不接受数据参数


有什么建议可以让我在不延迟的情况下渲染动态纹理吗?

我不确定这是否能回答您的问题,但我这样做的方式是我在C/C++中分配了一个帧缓冲区,并通过ByteBuffer(jni->NewDirectByteBuffer())将其传递给java。我用它作为纹理,它工作得又快又好。然后,我可以在C/C++中直接修改这个帧缓冲区,在OpenGL上执行渲染后,这些更改立即可见。我目前在使用ICS Galaxy Nexus时遇到问题,因为如果纹理超过2048x2048像素,它将无法正确应用纹理。我假设错误与设备的硬件约束有关,但我仍在进行一些测试。

我发现一个源文件声称调用texImage2d,然后在同一帧中渲染会使GPU暂停,并建议使用双缓冲。但是,我不确定双缓冲会有什么帮助。你在位图上做什么样的更新?如果你能为每一帧更新位图,那就不会有什么大的变化,对吗?我不是想用问题来回答问题,但我只是想讨好…..你是用java还是c/c++?java调用你的opengl?虽然我使用的gl方法应该只调用本机方法。这是一个照片编辑应用程序,因此,它可以是任何东西,从画一条斜线穿过屏幕,或模糊部分,或从层中剪切选择。位图操作很快。问题是它们必须在位图对象上完成,因为我使用画布对象的特性。这听起来非常有趣。我会调查的。你有更多关于你是如何工作的信息吗?(例如,如何使用bytebuffer作为openGL纹理)谢谢!OpenGL方法采用ByteBuffer(或CharBuffer)作为参数。例如,
gl.glTexSubImage2D(GL10.gl\u TEXTURE\u 2D,0,0,textureWidth,texturehight,GL10.gl\u RGBA,GL10.gl\u UNSIGNED\u BYTE,charBuffer)。您可以通过
jni->NewDirectByteBuffer()
方法将此缓冲区从C/C++传递到Java。