简体   繁体   中英

Android OpenGL ES 2.0: Is “switch-case” syntax possible in GLSL fragment shader on Samsung Galaxy S2?

Does anybody know how to do switch case syntax in the fragment shader on the Samsung Galaxy S2? I get the compilation error: Expected literal or '(', got 'switch' .

My syntax is as follows:

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

This works fine on the Nexus 7, but on the Galaxy S2 I get the above error. Are switch case instructions simply impossible on the Galaxy S2? The reason why I want to use them is they appear to give a performance improvement over if else on the Nexus 7. If they are impossible on the Galaxy S2, is there a way to query the device and use switch case if available, and if else otherwise?

switch statement is not supported in OpenGL ES 2.0. From the OpenGL ES Shading Language 1.0.17 spec 3.7:

The following are the keywords reserved for future use. Using them will result in an error:

asm class union enum typedef template this packed goto switch default ...

GLSL ES is based on version 1.10 of the desktop GLSL, but 'switch case' statements were added in vesrion 1.30, so you cannot assume device will support it.

Also I would recommend avoiding branching in fragment shader as it hits perfomanace badly.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM