這是使用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