La risposta di mh01 ha coperto molte delle basi, quindi aggiungerò alcuni supplenti.
OpenGL ES
Parliamo di ES 2.0 rispetto al desktop GL 2.1 rispetto al desktop GL 3.3. Ai fini di questa discussione, il termine "GL XY" farà riferimento alla versione desktop OpenGL XY, mentre "ES XY" farà riferimento a OpenGL ES XY
Strutturalmente , ES 2.0 ha più cose in comune con il core GL 3.3 che con GL 2.1. GL 3.3 ed ES 2.0 sono entrambi a base di shader puro. Sono entrambi basati su oggetti buffer puri. Ecc. GL 2.1 ha molte trappole di prestazioni e codifica che semplificherebbero la scrittura di un'app GL 2.1 che non sarebbe facilmente trasportabile su ES 2.0.
Tuttavia, in termini di sintassi del linguaggio di shading , GLSL ES 1.00 (mappatura su ES 2.0) assomiglia molto più a GLSL di GL 2.1 che a GL 3.3. Le parole chiave attribute
e varying
non esistono in 3.3 core; utilizza in
e out
, che è molto più coerente e ragionevole quando si ha a che fare con più di 2 livelli di shader (motivo per cui ES 3.0 ha adottato la sintassi GL 3.3).
È facile mappare i concetti appresi in GL 3.3 a ES 2.0. Quindi, se impari GL 3.3 per uno dei vari strumenti per farlo, capirai come lavorare nel mondo ES 2.0. Dovrai capire dov'è il sottoinsieme, ovviamente (cioè: le cose che GL 3.3 può fare che ES 2.0 non può), ma i concetti sono gli stessi.
Mappare la sintassi di GLSL, in modo da poter copiare shader dall'uno all'altro, è un po 'più difficile. Ma davvero, tutto ciò che serve è qualche #define nei posti giusti. Inoltre, GLSL 3.30 ha alcune funzionalità di compatibilità ES, come highp
e così via (che non fanno nulla in GLSL desktop).
Quindi ottieni qualcosa per ES 2.0 imparando da GL 3.3 invece di GL 2.1.