FAQ OpenGL Consultez toutes les FAQ

Nombre d'auteurs : 9, nombre de questions : 74, dernière mise à jour : 5 février 2020 

 
OuvrirSommaireProblèmes

Les fonctions OpenGL ne retournent pas de code d'erreur. Toutefois, il est possible de savoir si la dernière commande a rencontré une erreur avec la fonction glGetError(). Ainsi, pour chaque appel OpenGL, il est nécessaire d'appeler cette fonction et de vérifier sa valeur de retour afin de savoir si l'un de vos appels a provoqué une erreur.

À travers l'extension KHR_debug, il est possible d'avoir des fonctionnalités avancées pour la détection des erreurs lors de l'exécution. Notamment, cette extension ajoute la possibilité qu'un callback soit appelé lors d'une erreur.

Créé le 8 avril 2016  par LittleWhite

Généralement, c'est que la texture est mise en mode REPLACE au lieu de MODULATE.
En mode REPLACE, OpenGL ne prend en compte lors de l'affichage que la couleur de la texture, alors qu'en mode MODULATE, la couleur de la texture est multipliée par la couleur du polygone.

Pour définir le mode d'utilisation de la texture, il faut utiliser le code suivant :

 
Sélectionnez
glBindTexture(/* binding de la texture dont on veut modifier les paramètres */);
            glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, parametre);

parametre vaut GL_REPLACE ou GL_MODULATE, selon ce que l'on veut réaliser.

Créé le 22 janvier 2006  par bafman

Comme toute bibliothèque, OpenGL nécessite d'être liée à votre programme si vous souhaitez l'utiliser, sans quoi l'éditeur de liens ne trouvera pas les fonctions correspondantes, et vous jettera à la figure des messages tels que celui-ci :

 
Sélectionnez
undefined reference to `glViewport@16'
...

Il faut donc lier avec les bibliothèques que vous utilisez.

Avec Visual C++ : il faut aller dans les propriétés du projet, « édition de liens », « entrée », et y ajouter les fichiers .lib correspondant aux bibliothèques GL que vous utilisez (opengl32.lib pour OpenGL, glu32.lib pour GLU, et glut32.lib pour GLUT). Vous pouvez également lier en ajoutant la directive #pragma comment(lib, « xxx.lib ») dans l'un de vos fichiers source.

Avec MinGW : il faut également aller dans les propriétés du projet, « édition de liens », et ajouter les fichiers adéquats (libopengl32.a pour OpenGL, libglu32.a pour GLU, et libglut32.a pour GLUT). Vous pouvez également ajouter directement à la ligne de commande « -lxxx » pour lier avec la bibliothèque libxxx.a.

À noter que sous Windows vous aurez également besoin de lier avec GDI (libgdi32.a ou gdi32.lib), pour tout ce qui est création du contexte d'affichage.

Avec gcc : de la même manière qu'avec MinGW, il faut ajouter dans la ligne de commande « -lgl », « -lglu » ou « -lglut » pour utiliser ces bibliothèques.

Dernières remarques : vérifiez d'une part que tous ces fichiers sont dans des répertoires prédéfinis de l'éditeur de liens, et d'autre part… assurez-vous que vous les avez bien installés !

Créé le 17 mai 2006  par Laurent Gomila

La fonction glGetUniformLocation() retourne -1 en cas d'erreur. Tout d'abord, il faut s'assurer que le nom passé en argument est bien identique à celui du code shader.

Si cela est le cas, vérifiez que votre variable est utilisée, ou que son résultat est utilisé dans le shader. En effet, le compilateur optimise et supprime les variables inutiles, faisant que le programme OpenGL ne voit plus celles-ci.

Dans ce cas, référez-vous à la question « Comment s'assurer qu'une variable du shader sera effectivement dans le code compilé ? »

Créé le 12 mars 2012  par LittleWhite

Lien : Comment s'assurer qu'une variable du shader sera effectivement dans le code compilé ?
Lien : Documentation glGetUniformLocation()
Lien : Documentation glGetAttribLocation()

Une variable est supprimée du shader compilé lorsque celle-ci n'est pas utilisée. Cela pourra entraîner des messages d'avertissement dans votre programme C++. C'est pourquoi il est intéressant de forcer la présence de la variable.

La solution pour s'assurer de sa présence est de l'utiliser dans le calcul d'une des variables de sortie (généralement, la couleur).
Afin que cela n'altère pas votre rendu, vous pouvez stocker votre variable dans le canal alpha de la couleur. Ainsi, le code suivant force la présence de la myDummyVariablecelle-ci.

 
Sélectionnez
gl_FragColor = vec4(color.rgb, 1 + myDummyVariable);

L'utilisation du 1 + permet de s'assurer que dans tous les cas, le canal alpha sera à 1.

Créé le 12 mars 2012  par LittleWhite
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005-2012 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.