Ceci est ma première fois en utilisant OpenGL, donc cela peut être une question stupide, mais mon code tire une erreur GL_INVALID_OPERATION
(1218
ou 0x0502
) entre glBegin()
et glEnd()
. Je n'appelle que quelques commandes simples, mais glGetError()
renvoie 0
au début de cette fonction et 1218
à la fin.erreur GL_INVALID_OPERATION 1218 (0x0502) lors de l'utilisation de simples commandes OpenGL glVertex2i, glColor3ub
Cette fonction est destinée à être utilisée pour dessiner une seule instance de n'importe quelle forme simple, et après avoir parcouru le débogueur, les variables sont ce que je voulais qu'elles soient. Notez également que, malgré cette question stupide, j'ai passé plusieurs heures hier soir et plusieurs heures aujourd'hui à chercher dans Google et mon manuel des solutions possibles, et n'ai rien trouvé d'utile en raison de la nature vague des erreurs OpenGL.
void drawShape(GLenum type, int numPoints, GLubyte r, GLubyte g, GLubyte b, vertex vertices, ...) {
glBegin(type);
glColor3ub(r, g, b);
// iterate through vertices
va_list vertexList;
va_start(vertexList, vertices); // use vertexList for iteration
for (int i = 0; i < numPoints; ++i) {
vertex point = i == 0 ? vertices : va_arg(vertexList, vertex);
// add a new point at (x, y)
glVertex2i(std::get<0>(point), std::get<1>(point));
}
glEnd();
}
Cette fonction est appelée comme suit:
drawShape(GL_LINE, 2, 0, 0, 0, vertex{ 10, 10 }, vertex{ 400, 10 });
Et le contexte que je utilise est Freeglut qui est initialisé comme suit:
// gross workaround for calling init with no arguments
int argc = 1;
char *argv[1] = { (char*)"" };
glutInitContextVersion(4, 1);
glutInit(&argc, argv);
// RGB window, double buffer
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
// sets values necessary for window initialization
glutInitWindowPosition(INIT_X, INIT_Y);
glutInitWindowSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
// draw the window and create the scene
glutCreateWindow(WORKING_WINDOW_TITLE);
glClearColor(1, 1, 1, 1); // set clear color to white
glutDisplayFunc(render);
glutMainLoop();
Veuillez montrer un exemple minimal, complet et vérifiable. Avez-vous même un contexte valide? Avec quels paramètres appelez-vous la fonction? – BDL
Utilisez-vous un contexte de base? Deuxièmement, le contexte "actuel" de votre contexte OpenGL lorsque votre fonction est appelée? – Robinson
@BDL J'appelle la fonction comme suit: 'drawShape (GL_LINE, 2, \t \t 0, 0, 0, \t \t sommet {10, 10}, \t \t sommet {400, 10}) ; ' – AdumbCopper