GLSL имеет полный препроцессор C-стиля. Единственной вещью, которая не работает, является #include. Одна из замечательных особенностей - то, что это, Вы можете используемый #ifdef, чтобы прокомментировать функции и таким образом создать одну программу построения теней, которая может быть сокращена, если определенные функции не используются.
Мой Вопрос:
Существует ли способ определить макрос от кода C?
Там не кажется никаким способом сделать это с интерфейсом openGL. Быстрый взлом должен предварительно ожидать несколько строк с #define НЕЧТО, прежде чем код загрузил файл формы. Но это кажется отчасти назад.
На самом деле вам не нужно добавлять его к загруженному коду. Вот почему в API glShaderSourceARB есть несколько строк.
Что-то вроде следующего делает то, что вы ищете:
char *sources[2] = { "#define FOO\n", sourceFromFile };
glShaderSourceARB(shader, 2, sources, NULL);