opengl - programacion - que es un preprocesador en informatica
Definir externamente las macros del preprocesador en GLSL (2)
Aquí está lo que uso para evitar problemas de #version
. Es Java, y no está optimizado para perfo, pero funciona perfectamente:
// extract shader sourcecode from file
StringBuilder shaderSource = Tools.readTextRessource(shaderSrcFile.url);
// apply defined values
int versionIndex = shaderSource.indexOf("#version");
if(versionIndex == -1) err("missing #version xxx in shader "+shaderSrcFile.name());
int defineInsertPoint = shaderSource.indexOf("/n", versionIndex)+1;
for (int i = defined.size() - 1; i >= 0; --i)
shaderSource.insert(defineInsertPoint, "#define " + defined.get(i) + "/n");
GLSL tiene un preprocesador de estilo C completo. Lo único que no funciona es #incluir. Una de las excelentes características es que puede usar #ifdef para comentar las funciones y así crear un sombreado que se puede reducir si no se usan ciertas características.
Mi pregunta es:
¿Hay una manera de definir una macro de código C?
Parece que no hay manera de hacerlo con la interfaz openGL. El truco rápido es añadir algunas líneas con #define FOO antes de que el código cargue el archivo de formulario. Pero parece un poco al revés.
Realmente no necesitas añadirlo al código que cargaste. Es por eso que hay múltiples cadenas en la API glShaderSourceARB.
Algo como lo siguiente hace lo que buscas:
char *sources[2] = { "#define FOO/n", sourceFromFile };
glShaderSourceARB(shader, 2, sources, NULL);