我正在用下面的代码初始化一个对象。
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。
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的大小吗?
[...] 我可以增加VBO的大小吗?
不可以,一个缓冲区的大小(就像一个缓冲区的大小一样)。顶点缓冲对象)是不可改变的。如果你需要一个更大的缓冲区,那么你必须通过以下方法重新创建缓冲区对象 glBufferData
.
我建议在初始化时创建一个足够大的缓冲区。