Ответы:
Вы можете определить некоторые функции в заголовочном файле и включить их в свой шейдер. Он немного отличается от C / C ++ в том, что вы помещаете тела своих функций в заголовки, а не только их прототипы (поскольку у шейдеров нет концепции раздельной компиляции и компоновки), но в остальном это похоже на C / C ++. заголовки.
Если #include недоступно, вы можете использовать аргументы glShaderSource для указания общего содержимого. Пример:
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);