目录
6.4 跳转
以下为跳转关键字:
jump_statement:
continue;
break;
return;
return expression;
discard; // 仅在片元着色器中使用
没有“goto”也没有其他非结构化的控制流程。
continue跳转仅用于循环,它会跳过它内部最内圈的剩余部分。对于while和do-while循环,此跳转使循环进入到下一次condition-expression的计算。对于for循环,将直接跳转到计算expression,然后进入到下一次循环计算condition。
break跳转也只能在循环中使用。 它只是包含break的最内层循环的立即退出。不再执行condition-expression或loop-expression。
discard关键字仅允许在片元着色器中使用。它可以在片元着色器中使用,以放弃对当前片段的操作。 此关键字会导致丢弃该片段,并且不会对任何缓冲区进行更新。它通常用于条件语句中,例如:
if (intensity < 0.0)
discard;
片元着色器可以测试片段的alpha值并根据该测试丢弃片段。但是,应该注意的是,在片段着色器运行之后进行覆盖测试,并且覆盖测试可以更改alpha值。
return跳转会立即退出当前函数。如果它有expression,那么这个expression是函数的返回值。
函数main可以使用return。 这简单地导致main以与到达函数结束时相同的方式退出。它并不意味着在片段着色器中使用discard。在main中定义输出值之前使用return将具有与在定义输出之前到达main的结尾一样的行为(所以在main中不要轻易使用return,尤其是低端的芯片中)。