J'avais un code 3D que j'ai remarqué qui ne s'afficherait pas dans un profil de base strict, mais dans un contexte de profil «normal» (pas explicitement demandé-comme-seul-noyau). Pour isoler le problème, je l'ai écrit le dessin du programme OpenGL plus simple possible le plus petit juste un triangle et un rectangle:Comment est-ce que je fais ce code OpenGL simple (fonctionne dans un profil "indulgente" 3.3 et 4.2) fonctionne dans un profil de noyau strict 3.2 et 4.2?
J'ai posté ce programme OpenGL as a Gist here.
Avec la useStrictCoreProfile variable initialisée à false, le programme délivre aucun message d'erreur sur la console et dessine un quad et un triangle comme par la capture d'écran ci-dessus, à la fois sur un OpenGL Intel HD 3.3 et sur une GeForce avec OpenGL 4.2 .
Cependant, avec useStrictCoreProfile valeur true, il efface la couleur d'arrière-plan, mais ne tire pas le quad tri &, la sortie de la console est la suivante:
GLCONN: OpenGL 3.2.0 @ NVIDIA Corporation GeForce GT 640M LE/PCIe/SSE2 (GLSL: 1.50 NVIDIA via Cg compiler)
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.VertexAttribPointer()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step 'render.DrawArrays()': GL_INVALID_OPERATION
LASTERR: OpenGL error at step '(post loop)': GL_INVALID_OPERATION
EXIT
... si un 4.2 noyau stricte le profil est demandé au lieu de 3.2, même problème. S'applique à 3 GPU nvidia différents donc je suppose que je ne suis pas conforme au profil de base strict correctement. Qu'est-ce que je faisais de mal, et comment puis-je résoudre ce problème?
Note, vous ne trouverez pas un glEnableVertexAttribArray appel dans le Gist ci-dessus, comme il est inside the glutil package que je importe - mais cela ne se dit que la dernière étape compileShaders de l'essentiel() fonct.
Avez-vous essayé d'utiliser l'extension GL_ARB_debug_output pour obtenir des messages d'erreur plus utiles que « GL_INVALID_OPERATION »? C'est un peu compliqué à mettre en place, mais ça vaut vraiment le coup. – postgoodism
+1 pour avoir partagé un exemple du plus petit programme OpenGL possible pour Go – ANisus
Bien, pour être honnête, ce n'est pas * vraiment * le "plus petit programme OpenGL pour Go", pour être honnête ... on pourrait le réduire ;) – metaleap