我有2个关于glsl效率的问题。
在完全由用户定义的着色器管道
中vs - > tcs - > tes - > gs - > FS
前4个阶段可以用于这样的操作:
gl_Position = MPV_matrices * vec4(in_pos, 1);
哪个阶段对此更有效?它是硬件还是版本依赖?
许多关于使用 GLSL 的教程都显示了在着色器之间传递顶点位置而不是仅使用内置变量gl_Position
的示例。
在效率方面是否有意义?
谢谢!
答案 0 :(得分:1)
此类转换通常用于VS
这是因为几何和teselation通常不用于基本着色器。而在Fragment中,这意味着你需要在每个片段的基础上进行乘法运算,这比每个顶点要多得多,因此性能下降......所以人们习惯于将这种变换放入VS而不考虑太多。
自定义输入/输出变量
我们有时需要在多个坐标系中使用顶点,并且使用内置插值器通常比在每个片段基础上进行变换更快。
例如,我有时需要同时使用3个坐标系(屏幕,世界,TBN)才能在FS中进行正确的计算。
要考虑的另一件事是准确性: