首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL VAO VBO调整尺寸

OpenGL VAO VBO调整尺寸
EN

Stack Overflow用户
提问于 2018-05-26 21:41:36
回答 1查看 847关注 0票数 1

我遇到了一个问题,就是将不同大小的新内容上传到缓冲区,会导致VAO的行为难以预料。导致我的对象看起来好像缓冲区大小设置得不正确。

1)我为对象生成VAO和VBO

代码语言:javascript
复制
glGenVertexArrays(1, &_vao); // Generate 1 VAO
glGenBuffers(1, &_vbo); // Generate 1 VBO

2)获得均匀变量和属性的位置。

3)像这样设置绑定:

代码语言:javascript
复制
glBindBuffer(GL_ARRAY_BUFFER, _vbo); // Bind VBO first
glBindVertexArray(_vao); // Bind VAO properties to VBO
{
    GLsizei packSize = DIM * sizeof(GLfloat) * 2;

    glEnableVertexAttribArray(_position);
    glVertexAttribPointer(_position, DIM, GL_FLOAT, GL_FALSE, packSize, (GLvoid*)0);

    // And so on ...
}
glBindVertexArray(0); // Unbind VAO
glBindBuffer(GL_ARRAY_BUFFER, 0); // Unbind VBO

4)然后加载我的数据:

代码语言:javascript
复制
glBindBuffer(GL_ARRAY_BUFFER, _vbo);
glBufferData(GL_ARRAY_BUFFER, _vertices.size() * sizeof(float),
                              _vertices.data(), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

问题当我尝试加载不同大小的的新数据时,就开始了

代码语言:javascript
复制
glBindBuffer(GL_ARRAY_BUFFER, _vbo);

glBufferData(GL_ARRAY_BUFFER, _vertices.size() * sizeof(float),
                              _vertices.data(), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

而我的缓冲区大小似乎保持不变。

不过,如果我再次定义vao并将其绑定到vbo (类似于3-d步骤)

代码语言:javascript
复制
glDeleteBuffers(1, &_vbo); 
glGenBuffers(1, &_vbo);
// glBindBuffer... See step 3
// ...

它起作用了。

是否有可能避免重新创建新缓冲区?什么是比较喜欢的调整大小的方式?

调整屏幕截图

它为什么表现得这样?

我使用OpenGL版本4.2.0构建10.18.10.3379

EN

回答 1

Stack Overflow用户

发布于 2018-05-26 22:16:57

什么是比较喜欢的调整大小的方式?

调整缓冲区对象大小的首选方法是不调整它们的大小。我是认真的。

OpenGL ARB创建了一个为缓冲区分配存储的整个替代方式,唯一的目的是以后不可能重新分配它们。好的,如果您想要具有技术性,不可变存储的目的是允许持久化映射,这需要不可变,但是如果他们只是想要持久映射缓冲区,他们可以将新的API限制在那些。

找出您的数据的最大大小(或您想要支持的最大值),预先分配它,以及任何您想要的部分。

从技术上讲,你的代码应该有效。按照标准,如果调整缓冲区对象的大小,引用的对象应该能够看到大小调整的存储。但是由于实现不希望您调整它们的大小,所以高性能的应用程序不会调整它们的大小。因此,该代码很少在实际应用程序中进行测试,而且bug可能会持续很长一段时间。

别这么做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50547217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档