OpenGL - 切换着色器和制服往往是一个严重的瓶颈吗?

时间:2015-04-30 22:06:35

标签: opengl

我目前正在计划一个渲染器,我有2种不同的方法可以处理着色器。我为他们写了pseduo代码:

示例A

for all models {
  bind all vertex data for the model
  for each shader on this model {
    set shader
    upload uniforms
    draw indicies for this shader
  }
}

例B

for all models {
  collect geometry and seperate it by shader
}
sort geometry by shader into groups
for all shaders {
  set shader
  upload uniforms
  draw geometry group for this shader
}

示例A的优点是我们只需要上传顶点数据一次,并且它共享所有几何体。这样做的缺点是我必须不断更改着色器并将制服上传到它。

示例B的优点是我可以通过着色器对整个场景中的所有几何体进行排序,因此我只需要为整个绘制应用每个着色器1次。这也意味着我会在任何给定的时间在绘图堆栈上有更多,所以空闲时间更少"完成着色器绘制后的时间。

哪种方式最终会在性能上更好?根据我所读到的内容,我倾向于实例B,但我想更多地了解它。

0 个答案:

没有答案