【问题标题】:Qt/OpenGL : Program crashes with glTexImage2DQt/OpenGL:程序崩溃与 glTexImage2D
【发布时间】:2016-08-04 14:27:46
【问题描述】:

我在加载纹理时遇到问题。

这是一种工作方式:

作品

QImage t = QImage("/home/renaud/Desktop/img.jpg",0);           //LOAD IMAGE
t.convertToFormat(QImage::Format_RGBA8888, Qt::AutoColor);     //CONVERT TO RGBA
t = t.mirrored();                                              //MIRROR

t.save("image2.jpg", 0, -1);                                   //IMAGE SEEMS FINE

glBindTexture(GL_TEXTURE_2D, tex);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());
glBindTexture( GL_TEXTURE_2D, 0);

我保存图像只是为了检查,一切都很好。

现在,我尝试从缓冲区加载图像,然后当我使用 glTexImage2D 加载它时它崩溃了。这是代码:

崩溃

QImage img = QImage(<Buffer containing the data>, 1920, 1080, QImage::Format_RGB888);
img.convertToFormat(QImage::Format_RGBA8888, Qt::AutoColor);     
QImage t = img.mirrored();  

t.save("image2.jpg", 0, -1); //IMAGE SEEMS FINE

glBindTexture(GL_TEXTURE_2D, tex);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());
glBindTexture( GL_TEXTURE_2D, 0);

所以在第二种情况下,我之前保存了图像,以便我可以检查它并且图像是完美的。

你知道为什么它会在glTexImage2D 上崩溃,因为我保存它时图像看起来很好?

编辑:

如果我将GL_RGBA 更改为GL_RGB,问题就解决了,即使在保持QImage 转换sur RGBA 的情况下也是如此。为什么 ?

【问题讨论】:

  • GL_TEXTURE_2D, 0, 3 请停止使用整数作为图像格式。如果您需要 3 通道格式,ask for one by name

标签: c++ qt opengl


【解决方案1】:

QImage::convertToFormat返回转换后的新图片,但不要修改图片本身。

用途:

img = img.convertToFormat(QImage::Format_RGBA8888, Qt::AutoColor);

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多