Android OpenGL动态大小FloatBuffer?

Posted

技术标签:

【中文标题】Android OpenGL动态大小FloatBuffer?【英文标题】:Android OpenGL dynamically size FloatBuffer? 【发布时间】:2013-07-04 18:46:27 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

【参考方案2】:

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

这里有一些资源供进一步阅读:

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

    当没有很多数据要传输时,这很好,但作为我们的 物体和三角形越多,场景就越复杂,这可以 对 CPU 和内存使用造成额外成本。我们能做些什么 这?我们可以使用顶点缓冲对象。而不是转移顶点 每帧都从客户端内存中获取信息,这些信息将是 传输一次,然后将从此图形完成渲染 内存缓存。

    OpenGL Vertex Buffer Object (VBO) -> Updating VBO

    Vertex Specification Best Practices -> Dynamic VBO

【讨论】:

感谢您提供的链接,但它们对解决我的问题没有多大作用。 ://

以上是关于Android OpenGL动态大小FloatBuffer?的主要内容,如果未能解决你的问题,请参考以下文章

Android官方开发文档Training系列课程中文版:OpenGL绘图之添加动态效果

Android使用WallpaperService和openGL ES生成的动态图形设置动态壁纸

OpenGL中的动态VBO

Android openGl开发详解-相机预览

将纹理快速加载到 OpenGL 2.0

如何在Android上使用OpenGL ES 2.0绘制点