2017-09-06 76 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