Shaderi su mali programi koji se nalaze u GPU-u. Oni transformiraju ulaze u izlaze.
Shaderi su također vrlo izolirani programi jer im nije dopušteno međusobno komunicirati.
Jedina komunikacija koju imaju je putem njihovih ulaza i izlaza.
Shaderi su napisani u jeziku poput C GLSL. GLSL je prilagođen za korištenje s grafikom i sadrži korisne značajke
posebno usmjerene na vektorsku i matričnu manipulaciju.
Shaderi uvijek počinju s deklaracijom verzije, nakon čega slijedi popis ulaznih i izlaznih varijabli, uniform varijabli i njihove glavne funkcije.
Ulazna točka svakog shadera nalazi se u njegovoj glavnoj funkciji gdje obrađujemo sve ulazne varijable i
ispisujemo rezultate u njegovim izlaznim varijablama.
Shaderi su lijepi mali programi sami po sebi, ali su dio cjeline i iz tog razloga želimo imati ulaze i izlaze na pojedinačnim shaderima
kako bismo mogli premještati stvari. GLSL je definirao in i out ključne riječi posebno za tu svrhu.
Svaki shader može specificirati ulaze i izlaze koristeći te ključne riječi i gdje god se izlazna varijabla podudara s ulaznom varijablom
sljedeće faze shadera, ona se prosljeđuje.
Vertex shader bi trebao primiti neki oblik unosa inače bi bio prilično neučinkovit.
Vertex shader razlikuje se po svom ulazu, po tome što prima svoj ulaz izravno iz podataka o tjemenu.
Da bismo definirali kako su organizirani podaci o tjemenu, specificiramo ulazne varijable s metapodacima lokacije
kako bismo mogli konfigurirati atribute vrha na CPU-u.
Vertex shader stoga zahtijeva dodatnu specifikaciju izgleda za svoje ulaze kako bismo ga mogli povezati s podacima o tjemenu.