Qt 5 OpenGL绑定纹理导致奇怪的错误

Qt 5 OpenGL binding textures causing werid bug

本文关键字:错误 OpenGL 绑定 纹理 Qt      更新时间:2023-10-16

我正在使用Qt Creator(C++),我正在创建一个GLWidget。我需要使用一些纹理。在Qt中最简单的方法是使用QGLWidget函数bindTexture(QImage)。当我尝试使用此方法绑定纹理时,我的 QGLWidget 表现得很奇怪 - 它什么也没显示(即使我多次调用 updateGL() ),但它的颜色很清晰。当我添加具有先前绑定纹理之一的项目时,它开始正常工作。这就是我初始化纹理的方式:

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")));
}

我是否滥用了方法绑定纹理?为什么我必须在 GLWidget 开始按预期运行之前实际使用其中一个绑定纹理?

简单的错误 - 问题是我在开始时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();是自己打电话给他们的。