是否可以调整VBO的大小

时间:2020-05-23 12:36:23

标签: opengl glsl

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

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的大小吗?

1 个答案:

答案 0 :(得分:1)

[...]我可以增加VBO的大小吗?

不。缓冲区的大小(如Vertex Buffer Object)是不可变的。如果需要更大的缓冲区,则必须通过glBufferData重新创建缓冲区对象。

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

相关问题