Відповіді:
Ви можете визначити деякі функції у файлі заголовка та #include їх у свій шейдер. Це трохи відрізняється від 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);