我正在尝试在Android上构建一个OpenGL ES 2.0渲染系统。 我有一个FloatBuffer,我在其中放置了所有顶点数据。目前,我只是使用大量字节分配它,如果它们会以该大小溢出缓冲区,则忽略绘制调用。 有没有办法动态调整缓冲区大小?如果我只是释放缓冲区并在每次渲染后重新分配它,我想这会非常慢。
答案 0 :(得分:2)
我实际上仍处于学习高性能OpenGL渲染的过程中,但切换到顶点缓冲区对象通常可以实现最高的执行时间。最后,你必须尝试并测试。
以下是进一步阅读的一些资料来源:
Android Lesson Seven: An Introduction to Vertex Buffer Objects (VBOs)
当没有大量数据要传输时,这很好,但正如我们所说的那样 对于更多的对象和三角形,场景变得更复杂,这可以 对CPU和内存使用量施加额外成本。我们能做些什么? 这个?我们可以使用顶点缓冲对象。而不是传递顶点 来自客户端内存的信息每一帧,信息都会 转移一次,然后渲染将从此图形完成 内存缓存。
答案 1 :(得分:1)
有没有办法动态调整缓冲区大小?
没有。你目前的方法看起来很好。您可能希望扩展它,如果数据不适合当前缓冲区,则创建一个新的,更大的数据并用新数据填充它。
不幸的是,OpenGL-ES没有函数as OpenGL-3 does,它允许您在缓冲区对象之间复制数据。使用它可以在完全保留在GPU内存中的BO之间进行复制,这样您就必须只更新缺失的部分。
如果我刚刚释放缓冲区并在每次渲染后重新分配它,我想这会非常慢。
肯定不会提高性能,这是正确的。根据您的实际实施情况,它可能会对性能产生巨大影响,这是正确的。所以我建议不要这样做。