因此,我正在自学GLSL,并试图弄清为什么它比固定功能管道更快。
我遇到问题的原因是,据我了解,您创建的着色器正在替换之前存在的管道部分。那么,如何简单地提供自己的版本来加快速度呢?
我唯一能想到的是,如果您以前尝试提供自己的照明方程式,则必须在CPU上进行计算,但是现在您可以在GPU上进行计算,这会更快。
我理解正确吗?
因此,我正在自学GLSL,并试图弄清为什么它比固定功能管道更快。
我遇到问题的原因是,据我了解,您创建的着色器正在替换之前存在的管道部分。那么,如何简单地提供自己的版本来加快速度呢?
我唯一能想到的是,如果您以前尝试提供自己的照明方程式,则必须在CPU上进行计算,但是现在您可以在GPU上进行计算,这会更快。
我理解正确吗?
Answers:
您创建的着色器将不再是您自己的固定功能管线(FFP)版本,而是自定义的顶点和像素操纵操作,以实现复杂而又酷的效果。
您通过可编程管线(PP)进行的许多操作将比其可能的FFP实施更快,因为PP减少了在FFP中呈现这些假设的事物所需的通过次数或组合器和立方体贴图的魔力。
想象一下实现如此常见的事情,例如在FFP中仅使用插值的顶点数据和手中的采样纹理在FFP中实现每像素照明。甚至不可能“诚实”地做到这一点,只有针对特殊情况的黑客程序才取决于忠实的预先计算的立方体贴图和一些严重的融合。使用PP成为在光方向和顶点法线之间着色点积的问题。
总而言之,PP将缓慢而不可能的事情变成快速而可能的事情。但是,如果您决定编写一个着色器以实现FFP中使用的相同算法,则会发现FFP会稍快一些,因为它是非常硬件优化的。
就是这样,您的着色器正在替换管道的一部分。但是,您的着色器通常专门针对您要实现的特定效果,并且无法处理可能会激活的所有可能的特殊功能,因此比模拟完整的固定功能管线的着色器更简单。固定功能路径必须考虑到很多事情和OpenGL功能,您可能只是不想使用(甚至根本没有听说过)。
在特殊硬件(与完全可编程的硬件相反)上完成固定功能的日子已经过去,当您使用固定功能管线时,可能会发生的情况是,驱动程序仅加载自己的特殊着色器,以实现固定功能路径。但是,要提供固定功能管道提供的每个功能,这些功能可能非常复杂。