我正在用以下代码初始化对象。
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的大小吗?
答案 0 :(得分:1)
[...]我可以增加VBO的大小吗?
不。缓冲区的大小(如Vertex Buffer Object)是不可变的。如果需要更大的缓冲区,则必须通过glBufferData
重新创建缓冲区对象。
我建议创建一个初始化时足够大的缓冲区。