Question

J'ai un projet qui utilise des shaders GLSL.

Ce projet est conçu pour ne rien imprimer sur stdout sauf en cas de problème ou si vous activez explicitement une sortie de débogage supplémentaire.

Quand une compilation de shader échoue, la longueur du journal donnée par glGetProgramInfoLog est > 0, et parfois quand elle réussit son > 0, et donne à la place warnings . Lorsque vous avez un shader qui compile parfaitement la longueur du journal est & Lt; 1 ... voici comment cela fonctionne sur ma carte NVidia sur ma machine de développement.

Pour mes péchés, je fais aussi du développement sur un ordinateur portable avec une carte graphique intégrée Intel. Le code fonctionne correctement, mais chaque fois que je fais un shader, le journal contient:

& "; shader a été compilé avec succès pour fonctionner sur du matériel &";

Ce qui est très ennuyeux, car je n'ai maintenant aucun moyen de décider si je devrais imprimer la chaîne, à part une sorte d'analyse de chaîne, par exemple:

strstr("successfully",log)

Espérons que la raison pour laquelle cela n’est pas souhaitable est évidente. Comment puis-je savoir, le cas échéant, si un message mérite d’être imprimé avec l’API OpenGL?

EDIT:

Si j'utilise glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);, les avertissements de compilation ne sont pas générés, mais les erreurs

.
Était-ce utile?

La solution

Voilà:

glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
if(!err) { /* now print out the error log */ }

Ceci est le seul statut de compilation que vous obtenez; Je n'ai trouvé aucun moyen portable pour déterminer si vous avez des avertissements. (Le journal de compilation peut contenir tout ce que l’implémentation souhaite mettre en place, y compris la notification de succès.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top