glVertexAtsortingbPointer levant GL_INVALID_OPERATION

J’essaie de mettre au point une application très basique OpenGL 3.2 (profil principal). Dans le code suivant, censé créer un VBO contenant les positions des sumts d’un sortingangle, l’appel de glVertexAtsortingbPointer échoue et GL_INVALID_OPERATION erreur OpenGL GL_INVALID_OPERATION . Qu’est-ce que cela signifie et comment puis-je m’y prendre?

 GLuint vbo, atsortingbLocation = glGetAtsortingbLocation(...); glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo); GLfloat vertices[] = { 0, 1, 0, 1, 0, 0, -1, 0, 0 }; glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glEnableVertexAtsortingbArray(atsortingbLocation); // At this point, glGetError() returns GL_NO_ERROR. glVertexAtsortingbPointer(atsortingbLocation, 3, GL_FLOAT, GL_FALSE, 0, 0); // At this point, glGetError() returns GL_INVALID_OPERATION. 

Commençons par les préliminaires:

 glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 

Arrête de faire ça. Vous avez déjà demandé un contexte OpenGL de base. Vous n’avez pas besoin de compatibilité ascendante, et cela ne fait rien pour vous. Il s’agissait d’un ancien drapeau lorsque 3.0 avait obsolète des éléments sans les supprimer. Tu n’en as pas besoin.

Cela ne cause pas votre problème, cependant. C’est:

 glEnableVertexAtsortingbArray(program.getAtsortingb("in_Position")); // A call to getGLError() at this point prints nothing. glVertexAtsortingbPointer(program.getAtsortingb("in_Position"), 3, GL_FLOAT, GL_FALSE, 0, 0); // A call to getGLError() at this point prints "OpenGL error 1282". 

Premièrement, il y a un bogue de pilote évident ici, car glEnableVertexAtsortingbArray aurait également dû émettre une erreur GL_INVALID_OPERATION . Ou vous avez commis une erreur en la vérifiant.

Pourquoi les deux fonctions devraient-elles se tromper? Parce que vous n’avez pas utilisé d’ object Vertex Array . glEnableVertexAtsortingbArray définit l’état dans le VAO actuel. Il n’y a pas de VAO actuel, donc … erreur. Il en va de même pour glVertexAtsortingbPointer . C’est même dans la liste des erreurs pour les deux sur ces pages.

Vous n’avez pas besoin d’un ordinateur VAO dans un contexte de compatibilité, mais dans un contexte de base. Ce que vous avez demandé. Alors … il vous en faut un:

 GLuint vao; glGenVertexArrays(1, &vao); glBindVertexArray(vao); 

Mettez cela quelque part dans votre configuration et votre programme fonctionnera.