问题描述
我一直在尝试使用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
的调用中更新面孔的数量,并且有效地限制了可以渲染的面孔的数量。就是这么简单:我更新了面孔数量,现在可以正常使用了。