是否可以调整vbo[重复]的大小?

问题描述 投票:0回答:1

我正在用下面的代码初始化一个对象。

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

opengl glsl
1个回答
1
投票

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

不可以,一个缓冲区的大小(就像一个缓冲区的大小一样)。顶点缓冲对象)是不可改变的。如果你需要一个更大的缓冲区,那么你必须通过以下方法重新创建缓冲区对象 glBufferData.

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

© www.soinside.com 2019 - 2024. All rights reserved.