关于opengl:是否可以调整vbo的大小

Is it possible to resize a vbo

本问题已经有最佳答案,请猛点这里访问。

我正在使用以下代码初始化一个对象。

1
2
3
4
5
6
std::vector<float> topRightBevelData = draw_circular_bevel(rightWidth, rightHeight, rightTopBevel, 1, 1, iSegmentsRightTop);
glGenVertexArrays(1, &m_VAOTopRightCircle);
glGenBuffers(1, &m_VBOTopRightCircle);
glBindVertexArray(m_VAOTopRightCircle);
glBindBuffer(GL_ARRAY_BUFFER, m_VBOTopRightCircle);
glBufferData(GL_ARRAY_BUFFER, topRightBevelData.size() * sizeof(float), &topRightBevelData[0], GL_DYNAMIC_DRAW);

我会不断更新 VBO。

1
2
3
4
std::vector<float> topRightBevelData = draw_circular_bevel(xWidth / 2.0, 0.0, 0.0, rightWidth, rightHeight, rightTopBevel, 1, 1, iSegmentsRightTop);

    glBindBuffer(GL_ARRAY_BUFFER, m_VBOTopRightCircle);
    glBufferSubData(GL_ARRAY_BUFFER, 0 ,topRightBevelData.size() * sizeof(float), &topRightBevelData[0]);

有时更新 vbo 的数据会大于 VBO 的大小,在这种情况下我可以增加 VBO 的大小吗?


[...] can i increase the size of VBO ?

没有。缓冲区(如顶点缓冲区对象)的大小是不可变的。如果您需要更大尺寸的缓冲区,则必须通过 glBufferData.

重新创建缓冲区对象

我建议在初始化时创建一个足够大的缓冲区。