2010-05-28 105 views
1

我不知道簡單代碼有什麼問題。該函數用於python和ctypes。OpenGL GL_LINE_STRIP在glEnd後給出錯誤1281(無效值)

extern "C" void add_lines(bool antialias,GLdouble coordinates[][2],int array_size,GLdouble w,GLdouble r,GLdouble g, GLdouble b,GLdouble a){ 
    glDisable(GL_TEXTURE_2D); 
    if (antialias){ 
     glEnable(GL_LINE_SMOOTH); //Enable line smoothing. 
    } 
    glColor4d(r,g,b,a); 
    glLineWidth(w); 
    glBegin(GL_LINE_STRIP); 
    for (int x = 0; x < array_size; x++) { 
     glVertex2d(coordinates[x][0],coordinates[x][1]); 
    } 
    glEnd(); 
    std::cout << glGetError(); 
    if (antialias){ 
     glDisable(GL_LINE_SMOOTH); //Disable line smoothing. 
    } 
    glEnable(GL_TEXTURE_2D); 
} 

的std :: COUT < < glGetError();每次發出1281次。

謝謝。

+0

在函數的開頭添加一個類似的cout以確保錯誤發生在它的內部。它可能是早期操作的結果(例如glTexImage2d)。在你的代碼中,如果w小於或等於0,glLineWidth可以產生該錯誤。 – 2010-05-28 14:05:38

+0

是的,你是對的。由於某種原因,GLdouble接近於零。在python腳本中,它通常是1,但總是會變成一個非常小的數字。我會檢查其他的雙重值。 – 2010-05-28 14:21:30

+0

是的,他們都很小。我會看看是否真的需要事先將它們轉換成ctypes。我認爲ctypes自動轉換數字。 – 2010-05-28 14:23:29

回答

4

很粘:一旦錯誤被某些函數設置,它將保持在錯誤值,直到您致電glGetError()。所以,錯誤很可能是其他地方引起的。在函數入口處檢查glGetError()的值,然後在每次函數調用後查找它的設置位置。

+0

閱讀我爲最後一個答案寫的內容,但我會再次檢查它。 – 2010-05-28 14:13:45

+0

哎呦,我在glEnd之後得到它,但也在glLineWidth之後 – 2010-05-28 14:17:02

+0

「width - 1.08222e-31」 我有這個問題我想我會看看我能做什麼 – 2010-05-28 14:18:51

0

你確定在glEnd之前沒有觸發錯誤嗎? glGetError會報告上次GL程序執行時可能引起的最後一個GL錯誤。

+0

謝謝您的輸入,我在任何地方都使用了cout,然後發現它是在glEnd之後產生的 – 2010-05-28 14:13:09

相關問題