Czy ktoś wie, jak wykonać switch
case
składnię w module cieniowania fragmentów na Samsung Galaxy S2? Pojawia się błąd kompilacji: Expected literal or '(', got 'switch'
.Android OpenGL ES 2.0: Czy w gps GLSL na Samsung Galaxy S2 możliwa jest składnia "switch-case"?
Moja składnia jest następująca:
switch(i){
case 0: x = alphas[0]; break;
case 1: //...etc.
}
Działa to dobrze na Nexusa 7, ale na Galaxy S2 otrzymuję powyższy błąd. Czy na Galaxy S2 instrukcje są po prostu niemożliwe? Powodem, dla którego chcę ich użyć, wydaje się, że poprawiają wydajność w stosunku do if
else
na Nexusie 7. Jeśli nie są możliwe w Galaxy S2, czy istnieje sposób na zapytanie urządzenia i użycie switch
case
, jeśli to możliwe, i if
else
inaczej?
Jak można uniknąć rozgałęzienia, jeśli konieczne animowanie barwy poszczególnych obiektów tego modułu fragmentów i GPU nie obsługuje dostęp do tablicy o zmiennej (tylko stałe kompilacji) ? – Navigateur
Możesz spróbować przygotować różne shadery dla różnych typów obiektów (bez _switch_, z kodem dla właściwego _case_ inlined) i wywoływać glUseProgram (GLint aObjectShaderID) przed rysowaniem, gdy zmiany typu. Właśnie tego teraz używam, przyspieszenie zależy od tego, jak często muszę zmieniać shadery (obiekty do narysowania powinny być sortowane przez shadery, aby zminimalizować zmiany shaderów) i jak złożone są rozgałęzienia, ale złotą zasadą jest unikanie rozgałęzień za wszelką cenę i proflie po wdrażanie każdej optymalizacji. – zombo
zombo, czy to wymaga osobnego wywołania 'drawElements' na program, tak? Czy nie wiąże się to z kosztami własnymi i skąd wiadomo, że nie jest droższa niż rozgałęzienie w module cieniowania fragmentów? – Navigateur