OpenGL 更新不同大小的 VBO 数据
Posted
技术标签:
【中文标题】OpenGL 更新不同大小的 VBO 数据【英文标题】:OpenGL Updating VBO Data with a different size 【发布时间】:2014-02-16 18:13:20 【问题描述】:我正在使用 OpenGL 在屏幕上显示来自位图字体的文本,我正在为顶点创建一个 VBO,另一个用于索引,一个用于 UV。
我得到一个字符串值,然后从所有字符创建一个顶点、uv 和索引数据,所以我只有 1 个绘图调用。
现在我想弄清楚当该字符串发生变化时该怎么做。 如果和前面的字符串长度一样,我可以使用glBufferData()和glBufferSubData(),但是如果大小不同怎么办?
我可以绑定 VBO,调用不同大小的 glBufferData() 并上传新数据吗? 还是我应该删除 VBO 并创建一个新的?
处理这个问题的正确方法是什么?
【问题讨论】:
没有唯一正确的方法。您可以创建一个具有新大小的新缓冲区(最好使用空指针使旧缓冲区无效),或者您可以从头开始创建一个更大的缓冲区并映射子范围,这样就无需驱动程序进行分配。可以对一个大缓冲区的子范围进行非同步映射,并且可以从 COPY_READ_BUFFER 目标的某些子范围复制缓冲区到实际缓冲区。每个作品。更复杂的方法会更快一些,但很可能没有太大区别。 【参考方案1】:分配比您需要的更大的缓冲区并映射子范围,这样驱动程序就不必在每次字符串更改时重新分配内存。
【讨论】:
以上是关于OpenGL 更新不同大小的 VBO 数据的主要内容,如果未能解决你的问题,请参考以下文章
Open GL:多线程 glFlushMappedBufferRange?