我有一个着色器和几个对象。 每个对象在每个帧中都有不同的模型矩阵更新。
现在我不知道。我应该只创建一个UBO并做这样的事情吗?
// initialization
create_ubo();
// in main loop
update_only_ubo(first_object);
render_first_object();
update_only_ubo(second_object);
render_second_object();
这里我遇到了问题因为我只看到一个物体。 (opengl同步问题?我没有像Direct3D中的常量缓冲区这样的问题) 当我添加丑陋的glFinish()时,它也适用于英特尔(HD2500和最新的驱动程序)。 (通常nVidii没有问题)
或者我应该为每个对象创建UBO吗?
create_ubo();
...
update_first_ubo();
render_first_object();
update_second_ubo();
render_second_object();
这种方式我没有问题,但我也想知道第一种方式
我想使用UBO,因为我真的不喜欢单独更新每个制服......
修改
update_only_ubo() {
glBindBuffer(GL_UNIFORM_BUFFER, global_ubo);
glBufferData(GL_UNIFORM_BUFFER, sizeof(ubostruct), 0, GL_DYNAMIC_DRAW);
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(ubostruct), &newdata);
}