微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用glBufferData编辑OpenGL VBO会删除部分数据

如何解决使用glBufferData编辑OpenGL VBO会删除部分数据

我一直在尝试使用id == '1'编辑和/或更新OpenGL VBO,以将数据发送回缓冲区。在某些情况下,我发送的数据比以前的数据大,但这没关系,因为我正在使用argTypes.value.control.min = 0来覆盖缓冲区的数据,对吧?

好吧,当我运行程序并将更多的面孔添加到缓冲区中时,它会从缓冲区的另一部分中删除面孔,而不是渲染它们。

这是我的缓冲区更新代码

argTypes.value.control.min = -100

我已经检查过,并且export default { argTypes: { id: { control: { type: 'select',options: ['1','2']}},value: { control: {type: 'range',min:0,max: 100,step:10}},} }; const Template = (args) => <MyComponent {...args} />; export const Example = Template.bind({}); Template.args = { id: '1',value: 0,}; 是正确的:问题出在glBufferData上,它在某种程度上受限于缓冲区的大小。 glBufferData一个numpy数组。另外,如果我不更新缓冲区,一切都很好。

当我更新缓冲区时,如果glBufferData大于glBindVertexArray(vao) glBindBuffer(GL_ARRAY_BUFFER,vbo) draw_data = self.generate_vertex_data(data) print(draw_data.size - prevIoUs_draw_data.size) glBufferData(GL_ARRAY_BUFFER,draw_data.nbytes,draw_data,GL_DYNAMIC_DRAW prevIoUs_draw_data = draw_data ,它将渲染新的面孔,但停止渲染其他面孔(我假设要删除的面孔存储在缓存的前面)。

我想知道为什么draw_data显然仅限于缓冲区的大小,即使它应该重新发送整个数据。

解决方法

因此,感谢httpdigest,我现在知道我没有在对glDrawArrays的调用中更新面孔的数量,并且有效地限制了可以渲染的面孔的数量。就是这么简单:我更新了面孔数量,现在可以正常使用了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。