2017-09-06 82 views
-1

这是使用OpenGL我的第一次,所以这可能是一个愚蠢的问题,但我的代码glBegin()glEnd()之间拉动GL_INVALID_OPERATION误差(12180x0502) 。我只打几个简单的命令,但glGetError()在本函数开始时返回0,最后返回1218GL_INVALID_OPERATION错误1218(0x0502)命令glvertex2i,glColor3ub

此函数用于绘制任何简单形状的单个实例,并且在调试器中逐步完成后,这些变量就是我想要的那些变量。还要注意的是,尽管这是一个愚蠢的问题,但我昨天晚上花了几个小时,今天花了几个小时在Google和我的教科书中搜索可能的解决方案,并且由于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(); 
} 

调用此函数如下:

drawShape(GL_LINE, 2, 0, 0, 0, vertex{ 10, 10 }, vertex{ 400, 10 }); 

而且我使用的上下文是FreeGLUT其如下初始化:

// 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(); 
+1

请显示一个最小的,完整的和可验证的例子。你甚至有一个有效的上下文吗?你用哪个参数调用函数? – BDL

+0

您使用的是核心环境吗?其次是当你的函数被调用时,你的OpenGL上下文是“当前”上下文吗? – Robinson

+0

@BDL我打电话的功能如下: 'drawShape(GL_LINE,2, \t \t 0,0,0, \t \t顶点{10,10}, \t \t顶点{400,10}) ; ' – AdumbCopper

回答

2

问题在于调用本身就是glBeginGL_LINE不是该功能的有效参数。因此,之后的所有命令都不会在有效的glBegin/glEnd块中调用。

如果要绘制线条,则正确的参数是GL_LINES

调试不支持调试上下文的OpenGL应用程序时,第一步应始终确定哪个函数调用会产生第一个错误。例如,这可以通过在每次OpenGL调用后调用glGetError(),直到找到有问题的行来完成。还请注意,如果发生多个错误,那么glError将以任意顺序返回错误。

+0

所以我应该简单地将函数调用的第一个参数改为GL_LINES?我试过了,得到了同样的错误。 – AdumbCopper

+0

我调用'drawShape(GL_POLYGON,4时也得到了同样的问题, \t \t 0,50,200, \t \t顶点{10,200}, \t \t顶点{110,200}, \t \t顶点{ 10,400}, \t \t vertex {110,400});' – AdumbCopper

+0

您应该从更改此参数开始,然后确定哪条线确实会导致错误。 – BDL