C++ Qt OpenGL纹理赢得';不出现

C++ Qt OpenGL纹理赢得';不出现,c++,qt,opengl,C++,Qt,Opengl,我正在使用Qt用OpenGL创建一个简单的sprite编辑器,但是图像并没有显示出来,只是屏幕上有一个白色的四边形 我已经检查了我的代码,我认为一切都是正确的。四边形与图像大小相同,纹理id不是0 这是我的密码: 初始化: glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_CULL_FACE); glViewport(0, 0,

我正在使用Qt用OpenGL创建一个简单的sprite编辑器,但是图像并没有显示出来,只是屏幕上有一个白色的四边形

我已经检查了我的代码,我认为一切都是正确的。四边形与图像大小相同,纹理id不是0

这是我的密码:

初始化:

glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_CULL_FACE);

glViewport(0, 0, width, height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, win_width, win_height, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
纹理加载:

QImage b = QImage(filename);
m_texture = QGLWidget::convertToGLFormat(b);

glGenTextures(1, &m_id);
glBindTexture(GL_TEXTURE_2D, m_id);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
             m_texture.width(),
             m_texture.height(),
             0, GL_RGBA, GL_UNSIGNED_BYTE,
             m_texture.bits());
呈现:

glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glBindTexture(GL_TEXTURE_2D, m_id);

glBegin(GL_QUADS);

glTexCoord2f(0.0f, 0.0f);
glVertex2i(0, 0);

glTexCoord2f(1.0f, 0.0f);
glVertex2i(m_texture.width(), 0);

glTexCoord2f(1.0f, 1.0f);
glVertex2i(m_texture.width(), m_texture.height());

glTexCoord2f(0.0f, 1.0f);
glVertex2i(0, m_texture.height());

glEnd();

glBindTexture(GL_TEXTURE_2D, 0);
到目前为止,我得到的是:
尝试手动将OpenGL版本设置为3.2

QGLFormat glFormat;
glFormat.setVersion(3, 2);
glFormat.setProfile(QGLFormat::CoreProfile);
QGLFormat::setDefaultFormat(glFormat);
完成此操作后,使用glGetString()打印OpenGL版本

如果您仍然使用2.1,那么您没有在正确的OpenGL上下文中设置它。我不确定您是如何进行OpenGL调用的,但我使用的是QT Creator Designer,并在主窗口中嵌入了一个QGLWidget。因此,通过在主窗口构造函数中设置OpenGL版本,我成功地设置了OpenGL版本

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    QGLFormat glFormat;
    glFormat.setVersion(3, 2);
    glFormat.setProfile(QGLFormat::CoreProfile);
    QGLFormat::setDefaultFormat(glFormat);
    ui->setupUi(this);
}

尝试手动将OpenGL版本设置为3.2

QGLFormat glFormat;
glFormat.setVersion(3, 2);
glFormat.setProfile(QGLFormat::CoreProfile);
QGLFormat::setDefaultFormat(glFormat);
完成此操作后,使用glGetString()打印OpenGL版本

如果您仍然使用2.1,那么您没有在正确的OpenGL上下文中设置它。我不确定您是如何进行OpenGL调用的,但我使用的是QT Creator Designer,并在主窗口中嵌入了一个QGLWidget。因此,通过在主窗口构造函数中设置OpenGL版本,我成功地设置了OpenGL版本

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    QGLFormat glFormat;
    glFormat.setVersion(3, 2);
    glFormat.setProfile(QGLFormat::CoreProfile);
    QGLFormat::setDefaultFormat(glFormat);
    ui->setupUi(this);
}

打印opengl版本时会显示什么?i、 e.glGetString(GL_版本)和glGetString(GL_SHADING_LANGUAGE_版本)@faraza
版本:2.1.0-Build 8.15.10.2900
SHADING LANGUAGE版本:1.20-Intel Build 8.15.10.2900
是的,问题可能是您使用的是较旧版本的opengl。我猜你在Mac上?除非您明确地将OpenGL版本设置为3+,否则在我使用PC.Windows时,您将默认为2.1。我的“图形卡”只支持OpenGL 2.1和3.2的一些功能。这很奇怪,因为它只在Qt之外工作,我有很多应用程序使用现代OpenGL。编辑:如果我手动设置OpenGL版本,我会得到:
version:(null)Shading Language version:(null)
打印OpenGL版本时它会说什么?i、 e.glGetString(GL_版本)和glGetString(GL_SHADING_LANGUAGE_版本)@faraza
版本:2.1.0-Build 8.15.10.2900
SHADING LANGUAGE版本:1.20-Intel Build 8.15.10.2900
是的,问题可能是您使用的是较旧版本的opengl。我猜你在Mac上?除非您明确地将OpenGL版本设置为3+,否则在我使用PC.Windows时,您将默认为2.1。我的“图形卡”只支持OpenGL 2.1和3.2的一些功能。这很奇怪,因为它只在Qt之外工作,我有很多应用程序使用现代OpenGL。编辑:如果我手动设置OpenGL版本,我会得到:
version:(null)着色语言版本:(null)