关于着色器的一些问题

时间:2018-04-09 06:01:02

标签: opengl opengl-es glsl shader

我正在使用opengl着色器。

  1. 制服的数量会影响着色器的性能吗?如果我通过5件制服或50件会有什么关系吗?

  2. 每个着色器是否都有自己的工作区域?或者每个着色器可以在我的应用程序的任何位置绘制?

  3. 我经常创建顶点着色器,只是为了将属性传递给片段着色器。顶点着色器有什么好处,为什么不直接传递片段中的属性?

1 个答案:

答案 0 :(得分:1)

  1. 我猜它不会(如果确实如此,只是非常小的一个)。但我没有任何证据,所以我可能错了。这几乎肯定是特定于驱动程序的。

  2. 着色器不会绘制任何内容。着色器只处理数据。在管道中,光栅化器会生成由您的形状覆盖的碎片。这些是你可以吸引到的碎片。片段着色器计算颜色(可能还有深度),管道的其余部分决定如何处理结果(更新帧缓冲区,混合或完全丢弃它)。每次绘制调用都可能在任何地方产生帧缓冲更新,而不仅仅是在某些特定位置。

  3. 如果应用程序需要它,这是完全正常的。主要区别在于顶点着色器处理顶点和片段着色器处理片段。通常,碎片比顶点多得多,因此碎片着色器比顶点着色器更常被调用。因此,您应该尽可能多地在顶点着色器中完成工作。当然,有些东西在顶点着色器中无法计算。