这是使用OpenGL我的第一次,所以这可能是一个愚蠢的问题,但我的代码glBegin()
和glEnd()
之间拉动GL_INVALID_OPERATION
误差(1218
或0x0502
) 。我只打几个简单的命令,但glGetError()
在本函数开始时返回0
,最后返回1218
。GL_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();
请显示一个最小的,完整的和可验证的例子。你甚至有一个有效的上下文吗?你用哪个参数调用函数? – BDL
您使用的是核心环境吗?其次是当你的函数被调用时,你的OpenGL上下文是“当前”上下文吗? – Robinson
@BDL我打电话的功能如下: 'drawShape(GL_LINE,2, \t \t 0,0,0, \t \t顶点{10,10}, \t \t顶点{400,10}) ; ' – AdumbCopper