在项目中需要动态修改物体颜色,但在修改颜色时,有串色的bug,在此记录一下。
创建一个vbo缓存,并传入顶点属性。由于修改的频率不高,所以使用GL_STATIC_DRAW。
glBindBuffer(GL_ARRAY_BUFFER, id);
glBufferData(GL_ARRAY_BUFFER, size_in_byte, data,
GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
当需要修改颜色时,新数据为newData,使用如下方法直接修改
glBindBuffer(GL_ARRAY_BUFFER, id);
glBufferData(GL_ARRAY_BUFFER, size_in_byte, newData,
GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
但出现了一种奇怪的现象,其他物体会短暂地变成这个新颜色,然后恢复正常。将glBufferData换成glBufferSubData后没有了这个bug。
glBindBuffer(GL_ARRAY_BUFFER, id);
glBufferSubData(GL_ARRAY_BUFFER, 0,size_in_byte, newData);
glBindBuffer(GL_ARRAY_BUFFER, 0);
当使用vao时,不需要管vao,直接绑定需要修改数据的id即可。