如何解决使用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 举报,一经查实,本站将立刻删除。