2013-02-08 157 views
2

我已經看過一大堆關於OpenGL的文章和SO問題,不是繪圖,常見的錯誤等等。這個問題困擾着我。QGLWidget拒絕繪製任何東西

我試過glOrtho的幾個不同的設置,不同的頂點位置,顏色等,都無濟於事。

可以確認 OpenGL的狀態是有效的,因爲清晰顏色代碼紫色(指窗口紫色)。 gDEBugger也在確認幀正在更新(Fraps也是如此)。

這是代碼。標記爲「沒有幫助」的線條原本並不存在,並且是我嘗試失敗的東西。

QTWindow::QTWindow() 
{ 
    // Enable mouse tracking 
    this->setMouseTracking(true); 
} 

void QTWindow::initializeGL() 
{ 
    // DEBUG 
    debug("Init'ing GL"); 
    this->makeCurrent(); ///< Didn't help 
    this->resizeGL(0, 0); ///< Didn't help 
    glDisable(GL_CULL_FACE); ///< Didn't help 
    glClearColor(1, 0, 1, 0); 
} 

void QTWindow::paintGL() 
{ 
    // DEBUG 
    debug("Painting GL"); 
    this->makeCurrent(); ///< Didn't help 
    glLoadIdentity(); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(0,1,1); 
    glBegin(GL_TRIANGLES); 
    glVertex2f(500,100); 
    glVertex2f(100,500); 
    glVertex2f(0,0); 
    glEnd(); 
    this->swapBuffers(); ///< Didn't help 
} 

void QTWindow::resizeGL(int width, int height) 
{ 
    // DEBUG 
    debug("Resizing GL"); 
    this->makeCurrent(); ///< Didn't help 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, 1000, 0, 1000, -1, 1); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
} 

即使關閉剔除,該三角形也不會被顯示。但是,所有三個調試日誌都被稱爲它們應該如何。

我錯過了什麼?

+0

所以基本上,你會得到一個紫色的屏幕(作爲'glClearColor'和'glClear'的結果),但沒有三角形繪圖?只是想澄清... – Aaron

+0

正確。我已經嘗試過四邊形,而且我現在只是在嘗試不同的東西,沒有韻律或理由。我刪除了對'makeCurrent'的調用,並將'updateGL'改爲'update'。依然沒有。 – Qix

回答

0

問題最終成爲版本。與glGetString(GL_VERSION)一起返回的版本字符串表示正在使用4.2兼容性上下文。由於三角形調用paintGL方法在3.1中被刪除(如果我沒記錯的話),這顯然是爲什麼他們沒有繪製任何東西。此外,沒有錯誤,因爲它是在compat。模式。

因爲我無法在QGLWidget下將版本降低到3.0以下(由於QT需要2.1,因爲我在另一個留言板上被通知),所以我將版本設置爲3.0,並嘗試使用一些3.0繪圖電話,它結束了工作。

0

嘗試調用glViewport()函數在QTWindow :: resizeGL的開始()函數:

glViewport(0, 0, width, height); 

永遠別稱resizeGL()與寬度高度設置爲0;)除此之外,無需調用resizeGL(),因爲每當窗口被調整大小時,它都會被Qt調用。

您可以刪除所有對swapBuffers()函數的調用 - 它由Qt在內部調用。

makeCurrent()函數應在所有其他GL調用之前調用,所以最好在initializeGL()中調用它,但不必在paintGL()函數中調用它(除非paintGL ()被另一個線程調用,但我敢打賭它不在你的代碼中)。

+0

所有這些都是調試代碼來使某些工作。我意識到使用0,0來調整GL的大小。我知道glViewport。我知道關於makeCurrent。我在OP中提到了所有這些。 – Qix