Android OpenGL ES 2.0: возможен ли синтаксис" switch-case " в шейдере фрагментов GLSL на Samsung Galaxy S2?


Кто-нибудь знает, как это сделать switch case синтаксис в шейдере фрагментов на Samsung Galaxy S2? Я получаю ошибку компиляции: Expected literal or '(', got 'switch'.

Мой синтаксис выглядит следующим образом:

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

Это прекрасно работает на Nexus 7, но на Galaxy S2 я получаю вышеуказанную ошибку. Есть switch case инструкции просто невозможны на Galaxy S2? Причина, по которой я хочу их использовать, заключается в том, что они, по-видимому, улучшают производительность.if else на Nexus 7. Если они невозможны на Галактике S2, есть ли способ запросить устройство и использовать его switch case Если имеется, и if else иначе?

2 9

2 ответа:

switch оператор не поддерживается в OpenGL ES 2.0. Из OpenGL ES Shading Language 1.0.17 spec 3.7:

Ниже приведены ключевые слова, зарезервированные для дальнейшего использования. Использующий их приведет к ошибке:

Asm class union enum typedef шаблон this упакованный goto переключатель по умолчанию ...

GLSL ES основан на версии 1.10 настольного GLSL, но операторы 'switch case' были добавлены в vesrion 1.30, поэтому вы не можете предположить, что устройство будет поддерживать его.

Также я бы рекомендовал избегать ветвления в шейдере фрагментов, поскольку это плохо влияет на perfomanace.