2013-07-04 44 views
2

我想在Android上构建一个OpenGL ES 2.0渲染系统。 我有一个FloatBuffer,我把所有的顶点数据。目前,我只是分配大量的字节,并忽略绘图调用,如果他们将溢出缓冲区的大小。 有没有办法动态调整缓冲区大小?如果我在每次渲染之后释放缓冲区并重新分配缓冲区,我想这会很慢。Android OpenGL动态调整大小FloatBuffer?

回答

1

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

编号您目前的方法看起来不错。您可能需要扩展它,如果数据不适合当前缓冲区,则创建一个新的更大的数据并填充新数据。

不幸的是,OpenGL-ES没有函数as OpenGL-3 does它允许您在缓冲区对象之间复制数据。使用它可以在完全停留在GPU内存的BO之间进行复制,因此您只需更新缺少的部分。

如果我只是释放缓冲区并在每次渲染后重新分配缓冲区,我想这会很慢。

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

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

+0

谢谢你的链接,但他们没有太多的解决我的问题。 :/ – chimitos