Android OpenGL动态调整FloatBuffer的大小?

时间:2013-07-04 18:46:28

标签: android opengl-es bytebuffer floatbuffer

我正在尝试在Android上构建一个OpenGL ES 2.0渲染系统。 我有一个FloatBuffer,我在其中放置了所有顶点数据。目前,我只是使用大量字节分配它,如果它们会以该大小溢出缓冲区,则忽略绘制调用。 有没有办法动态调整缓冲区大小?如果我只是释放缓冲区并在每次渲染后重新分配它,我想这会非常慢。

2 个答案:

答案 0 :(得分:2)

我实际上仍处于学习高性能OpenGL渲染的过程中,但切换到顶点缓冲区对象通常可以实现最高的执行时间。最后,你必须尝试并测试。

以下是进一步阅读的一些资料来源:

  1. Android Lesson Seven: An Introduction to Vertex Buffer Objects (VBOs)

      

    当没有大量数据要传输时,这很好,但正如我们所说的那样   对于更多的对象和三角形,场景变得更复杂,这可以   对CPU和内存使用量施加额外成本。我们能做些什么?   这个?我们可以使用顶点缓冲对象。而不是传递顶点   来自客户端内存的信息每一帧,信息都会   转移一次,然后渲染将从此图形完成   内存缓存。

  2. OpenGL Vertex Buffer Object (VBO) -> Updating VBO

  3. Vertex Specification Best Practices -> Dynamic VBO

答案 1 :(得分:1)

  

有没有办法动态调整缓冲区大小?

没有。你目前的方法看起来很好。您可能希望扩展它,如果数据不适合当前缓冲区,则创建一个新的,更大的数据并用新数据填充它。

不幸的是,OpenGL-ES没有函数as OpenGL-3 does,它允许您在缓冲区对象之间复制数据。使用它可以在完全保留在GPU内存中的BO之间进行复制,这样您就必须只更新缺失的部分。

  

如果我刚刚释放缓冲区并在每次渲染后重新分配它,我想这会非常慢。

肯定不会提高性能,这是正确的。根据您的实际实施情况,它可能会对性能产生巨大影响,这是正确的。所以我建议不要这样做。