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?

Answers


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.


Need Your Help

jQuery animate not working properly

javascript jquery html css

I'm trying to animate a content using jQuery. But not working properly.

Automatically update version info in wix installer

wix installer windows-installer version

Hi I have a C/C++ Header file with my products version info init as follows:

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.