Opengl 我可以在GLSL着色器中使用if-else吗?

Opengl 我可以在GLSL着色器中使用if-else吗?,opengl,glsl,Opengl,Glsl,使用if-else会在多大程度上影响顶点和片段着色器的性能? 我知道顶点着色器是为每个顶点调用的,它们可能并不多,使用if-else不太可能导致性能问题 但是片段着色器是为每个像素调用的,这意味着有很多调用,在我看来,使用if-else可能会对性能产生不良影响。 我希望能够使用统一变量配置着色器,如果不是,是否正确? 关于这一点,你能说些什么?据我所知,引入分支确实会产生影响。关于这个和这个有很多讨论 简言之,这似乎取决于两个因素:gpu的年龄/品牌以及您的if声明: gpu时代/制造:gpu上

使用if-else会在多大程度上影响顶点和片段着色器的性能? 我知道顶点着色器是为每个顶点调用的,它们可能并不多,使用if-else不太可能导致性能问题

但是片段着色器是为每个像素调用的,这意味着有很多调用,在我看来,使用if-else可能会对性能产生不良影响。 我希望能够使用统一变量配置着色器,如果不是,是否正确?
关于这一点,你能说些什么?

据我所知,引入分支确实会产生影响。关于这个和这个有很多讨论

简言之,这似乎取决于两个因素:gpu的年龄/品牌以及您的if声明:

gpu时代/制造:gpu上的编译器将以不同的方式处理分支。它可能能够进行优化或假设,或者再次强制执行所有分支,然后选择哪一个是有效的——因此您可以想象,在这种情况下,许多分支确实开始影响性能

“if”语句:如果您正在检查一个统一的值,那么在着色器程序的所有执行中,该值的计算结果都是相同的,那么性能影响相对较小。但是,如果您正在检查这个顶点/片段代码执行的计算值,那么性能的影响很大

我也会考虑:

每个配置设置一个着色器,在应用程序代码中执行if/else检查,选择适当的着色器,在没有任何着色器分支的情况下运行

和/或,研究分支的替代方案,例如制服,如果设置为特定值,它们实际上不会改变任何视觉效果。例如,将最终结果着色的blendColor,如果设置为白色,实际上不会更改您已经计算的任何内容


但根据我的经验,没有什么比尝试和分析更好的了。

据我所知,引入分支确实会产生影响。关于这个和这个有很多讨论

简言之,这似乎取决于两个因素:gpu的年龄/品牌以及您的if声明:

gpu时代/制造:gpu上的编译器将以不同的方式处理分支。它可能能够进行优化或假设,或者再次强制执行所有分支,然后选择哪一个是有效的——因此您可以想象,在这种情况下,许多分支确实开始影响性能

“if”语句:如果您正在检查一个统一的值,那么在着色器程序的所有执行中,该值的计算结果都是相同的,那么性能影响相对较小。但是,如果您正在检查这个顶点/片段代码执行的计算值,那么性能的影响很大

我也会考虑:

每个配置设置一个着色器,在应用程序代码中执行if/else检查,选择适当的着色器,在没有任何着色器分支的情况下运行

和/或,研究分支的替代方案,例如制服,如果设置为特定值,它们实际上不会改变任何视觉效果。例如,将最终结果着色的blendColor,如果设置为白色,实际上不会更改您已经计算的任何内容

但根据我的经验,没有什么比尝试和分析更有效的了