如何强制 GLSL 分支?

Ite*_*tor 5 opengl opengl-es glsl hlsl glsles

我正在研究片段着色器。它可以工作,但仍然需要一些优化。

据我所知,GLSL中的大多数情况分支都是扁平化的,因此两种情况都被执行。我已经消除了大部分 if-else 条件,但其中一些条件必须保持原样,因为这两个分支的执行成本都很高。我知道,在 HLSL 中有一个[branch]针对此问题的关键字。但如何才能解决它呢GLSL?

我的代码如下所示(条件不统一,它们的结果取决于着色器中的计算):

if( condition ) {
    expensive calculations...
}

if( condition2 ) {
    expensive calculations...
}

if( condition3 ) {
    expensive calculations...
}

...
Run Code Online (Sandbox Code Playgroud)

一项“昂贵的计算”可以修改条件所依赖的变量。有可能执行多个计算。

我知道,有些较旧的或移动 GPU 根本不支持分支。在这种情况下,与此问题无关

Nic*_*las 4

GLSL 没有强制分支(或强制压平分支)的机制。