2016-08-04 73 views
0

加載紋理時出現問題。Qt/OpenGL:程序崩潰與glTexImage2D

這裏有一個工作方式:

作品

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_RGBAGL_RGB

問題解決了,甚至同時保持QImage的轉換河畔RGBA。爲什麼?

+1

'GL_TEXTURE_2D,0,3'請停止使用整數作爲圖像格式。如果您需要3通道格式,請[按名稱詢問](https://www.opengl.org/wiki/Image_Format)。 –

回答

0

QImage::convertToFormat返回已轉換的新圖像,但不要修改圖像本身。

用途:

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