2011-07-16 58 views
4

我使用QImage加載圖像,然後將圖像用作OpenGL中的紋理。 問題是顏色組件在QImage和OpenGL中有不同的順序。 目前我在OpenGL中使用GL_RGBA格式,在Qt中使用QImage::Format_ARGB32。 因此,在OpenGL中創建紋理之前,我必須爲加載圖像的每個像素手動交換字節。而且,爲了正確地交換字節,我需要知道機器的字節順序。如何將QImage格式轉換爲OpenGL支持的格式

有沒有人知道更好的解決方案呢?至少,是否有任何方法可以使這種轉換字典無關?

謝謝。

回答

5

glTex(Sub)Image的最後三個參數定義了pixel transfer to OpenGL如何發生。如果你有4個8位值,順序,在ARGB順序,那麼我會建議如下:

glTexImage2D(..., GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, *); 

爲了應對尾數轉換問題,使用glPixelStore參數。具體來說,GL_UNPACK_SWAP_BYTES。以上是爲小端機器設計的,所以如果你在一個大端機器上,你應該在調用這個函數之前調用glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE);,然後把它設置回GL_FALSE


注:我知道你沒有提到它,但如果你正在考慮的移動平臺,請記住,OpenGL ES的是的OpenGL。桌面OpenGL要求實現能夠處理傳輸操作中的各種像素安排。 GL ES授權幾乎相反。像素傳輸格式必須與恰好匹配紋理的內部格式。所以如果你在做GL ES開發,你必須自己做字節交換。

相關問題