9

有人知道如何switch case在三星 Galaxy S2 的片段着色器中执行语法吗?我得到编译错误:Expected literal or '(', got 'switch'.

我的语法如下:

switch(i){
    case 0: x = alphas[0]; break;
    case 1: //...etc.
}

这在 Nexus 7 上运行良好,但在 Galaxy S2 上出现上述错误。switch caseGalaxy S2 上的指令是不可能的吗?我想使用它们的原因是它们似乎if else在 Nexus 7 上提供了性能改进。如果它们在 Galaxy S2 上是不可能的,有没有办法查询设备并switch case在可用时使用,if else否则?

4

2 回答 2

8

switchOpenGL ES 2.0 不支持该语句。来自OpenGL ES Shading Language 1.0.17规范 3.7:

以下是保留供将来使用的关键字。使用它们会导致错误:

asm 类联合枚举 typedef 模板这个打包的 goto开关默认...

于 2013-04-14T18:10:16.497 回答
6

GLSL ES 基于桌面 GLSL 的 1.10 版,但在 1.30 版中添加了“switch case”语句,因此您不能假设设备会支持它。

另外我建议避免在片段着色器中进行分支,因为它会严重影响性能。

于 2013-04-14T18:04:44.160 回答