2014-11-22 60 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();正在调用它们自己。