关于统一缓冲区对象的几个问题

时间:2014-01-29 00:19:05

标签: c++ opengl

我有一个着色器和几个对象。 每个对象在每个帧中都有不同的模型矩阵更新。

现在我不知道。我应该只创建一个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);
}

0 个答案:

没有答案