Réponses:
Vous pouvez définir certaines fonctions dans un fichier d'en-tête et #les inclure dans votre shader. C'est un peu différent de C / C ++ en ce que vous mettriez le corps de vos fonctions dans les en-têtes, pas seulement leurs prototypes (car les shaders n'ont pas de concept de compilation et de liaison séparées), mais à part ça, c'est comme C / C ++ en-têtes.
Si #include n'est pas disponible, vous utiliseriez les arguments de glShaderSource pour spécifier le contenu partagé. Exemple:
char *sharedcode = "...shared code here...";
char *fs1 = "...fragment shader 1...";
char *fs2 = "...fragment shader 2...";
char *awesomeeffect1[] = {sharedcode, fs1};
char *awesomeeffect2[] = {sharedcode, fs2};
glShaderSource (shader1, 2, awesomeeffect1, NULL);
glShaderSource (shader2, 2, awesomeeffect2, NULL);