Frage

GLSL hat einen vollen C-Stil Präprozessor. Das einzige, was nicht funktioniert ist #include. Eines der herausragenden Merkmale ist, dass Sie #ifdef verwendeten Funktionen kommentieren und so eine Shader erstellen, die ausgedünnt werden können, wenn bestimmte Funktionen nicht verwendet werden.

Meine Frage ist:

Gibt es eine Möglichkeit, ein Makro von C-Code zu definieren?

Es scheint keine Möglichkeit, dass mit der openGL Schnittstelle zu tun. Der schnelle Hack ist ein paar Zeilen mit #define FOO vor der Code geladen Formulardatei vorangestellt wird. Aber es scheint Art von rückwärts.

War es hilfreich?

Lösung

Sie brauchen nicht wirklich, um den Code prepend Sie geladen. Aus diesem Grund gibt es mehrere Zeichenfolgen in der glShaderSourceARB API.

So etwas wie die folgenden tut, was Sie suchen:

char *sources[2] = { "#define FOO\n", sourceFromFile };
glShaderSourceARB(shader, 2, sources, NULL);

Andere Tipps

Hier ist, was ich #version Probleme zu vermeiden, verwenden. Es ist Java, und nicht für perfo optimiert, aber es funktioniert perfekt:

// 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");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top