C++ OpenGL更新具有不同大小的VBO数据

C++ OpenGL更新具有不同大小的VBO数据,c++,opengl,C++,Opengl,我正在用OpenGL在屏幕上显示位图字体中的文本,我正在为顶点创建一个VBO,为索引创建一个VBO,为UV创建一个VBO 我得到一个字符串值,然后从所有字符创建一个顶点、uv和索引数据,所以我只有一个绘图调用 现在我想知道当字符串改变时该怎么做。 如果它与前面的字符串长度相同,我可以使用glBufferData()和glBufferSubData(),但是如果它的大小不同,我该怎么办 我可以绑定VBO,调用不同大小的glBufferData()并上载新数据吗? 还是应该删除VBO并创建一个新的V

我正在用OpenGL在屏幕上显示位图字体中的文本,我正在为顶点创建一个VBO,为索引创建一个VBO,为UV创建一个VBO

我得到一个字符串值,然后从所有字符创建一个顶点、uv和索引数据,所以我只有一个绘图调用

现在我想知道当字符串改变时该怎么做。 如果它与前面的字符串长度相同,我可以使用glBufferData()glBufferSubData(),但是如果它的大小不同,我该怎么办

我可以绑定VBO,调用不同大小的glBufferData()并上载新数据吗? 还是应该删除VBO并创建一个新的VBO


处理这个问题的正确方法是什么?

分配一个更大的缓冲区,然后您需要并映射子范围,这样驱动程序就不必在每次字符串更改时重新分配内存。

没有唯一正确的方法。您可以创建具有新大小的新缓冲区(最好使用空指针使旧缓冲区无效),也可以从开始创建更大的缓冲区并映射子范围,这样就不需要驱动程序进行分配。可以对一个大缓冲区的子范围进行非同步映射,也可以将复制\读取\缓冲区目标的某些子范围复制到实际缓冲区。每种方法都有效。更复杂的方法要快一点,但很可能没有太大区别。