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.