Qualcuno sa come fare la sintassi switch
case
nello shader di frammenti sul Samsung Galaxy S2? Ottengo l'errore di compilazione: Expected literal or '(', got 'switch'
.Android OpenGL ES 2.0: la sintassi "switch-case" è possibile nello shader del frammento GLSL su Samsung Galaxy S2?
mia sintassi è la seguente:
switch(i){
case 0: x = alphas[0]; break;
case 1: //...etc.
}
Questo funziona bene sul Nexus 7, ma sul Galaxy S2 ottengo l'errore precedente. Le istruzioni switch
case
sono semplicemente impossibili sul Galaxy S2? Il motivo per cui voglio usarli è che danno un miglioramento delle prestazioni rispetto a if
else
sul Nexus 7. Se sono impossibili sul Galaxy S2, c'è un modo per interrogare il dispositivo e usare switch
case
se disponibile, e if
else
altrimenti?
Come è possibile evitare ramificazione se devo animare i colori di oggetti separati nello shader frammento e la GPU non supporta l'accesso array variabile (solo costanti in fase di compilazione) ? – Navigateur
È possibile provare a preparare diversi shader per diversi tipi di oggetto (senza _switch_, con codice per _case_ appropriato allineato) e chiamare glUseProgram (GLint aObjectShaderID) prima del disegno, quando il tipo cambia. Questo è quello che uso in questo momento, l'accelerazione dipende da quanto spesso devo cambiare shader (gli oggetti da disegnare dovrebbero essere ordinati dagli shader per minimizzare i cambiamenti degli shader) e quanto è complessa la ramificazione, ma la regola d'oro è di evitare la ramificazione a tutti i costi e profi implementando ogni ottimizzazione. – zombo
zombo, questo richiede una chiamata 'drawElements' separata per programma, sì? Questo non ha i suoi costi e come fai a sapere che non è più costoso della ramificazione nello shader di frammenti? – Navigateur