2014-11-22 61 views
0

我正在使用Qt Creator(C++),並且正在創建一個GLWidget。我需要使用一些紋理。在Qt中最簡單的方法是使用QGLWidget函數bindTexture(QImage)。當我嘗試使用這種方法綁定紋理時,我的QGLWidget行爲異常 - 它什麼也沒有顯示(儘管我多次調用updateGL()),但它的顏色清晰。當我添加一個具有以前綁定紋理的項目時,它開始正常工作。這是我如何initialiazing紋理:Qt 5 OpenGL綁定紋理導致werid bug

void GLWidget::initializeGL() 
{ 
    qglClearColor(Qt::white); 
    glEnable(GL_BLEND); 
    glEnable(GL_TEXTURE_2D); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

    generateGrid(0.025); 

    //**deleting lines below solves this problem... but then I can't use textures!** 
    mvTextureID.push_back(bindTexture(QImage("and.png"))); 
    mvRedTextureID.push_back(bindTexture(QImage("and_red.png"))); 
    mvTextureID.push_back(bindTexture(QImage("nand.png"))); 
    mvRedTextureID.push_back(bindTexture(QImage("nand_red.png"))); 

} 

我濫用方法bindTexture?爲什麼在GLWidget開始執行之前,我必須實際使用綁定紋理之一?

回答

0

簡單的錯誤 - 問題是我在開始使用函數(我不需要這個函數)glEnable(GL_TEXTURE_2D);,直到創建第一個紋理對象時,我才禁用它。這兩個功能也是不必要的

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEARES 

因爲Qt的bindTexture();正在調用它們自己。