Sto cercando di far funzionare questo shader su un iDevice davvero vecchio, e alla fine anche sugli androidi.
Anche quando riduco il codice fino a 2 funzioni seno per frammento, lo shader funziona a circa 20 fps.
Ho pensato di prendere una foglia dal libro delle vecchie tecniche di shading e creare un array che contiene un mucchio di valori di trigge predefiniti e in qualche modo usarli per approssimare lo shader.
Nello shader che ho collegato sopra sto già simulando che arrotondando i valori inviati alla funzione trig più il mouse a sinistra (mentre in basso) va meno qualità dello shader. In realtà è piuttosto bello perché molto vicino al lato sinistro sembra uno shader completamente diverso e piuttosto bello.
Comunque ho due dilemmi:
- Non so quale sia il modo più efficiente per avere una matrice di valori come 360 in uno shader GLSL, costante o uniforme?
Non riesco a capire come inserire un numero in un intervallo come di solito se volessi un angolo compreso tra 0 e 360 (sì, so che le GPU usano i radianti) lo farei così.
func range(float angle) { float temp = angle while (temp > 360) {temp -= 360;} while (temp < 0) {temp += 360;} return temp; }
Tuttavia GLSL non consente loop durante o funzioni ricorsive.
mod
funzione integrata è ciò che desideri. Scriveresti mod(angle, 360.0)
.