2011-03-02 47 views
2

我使用glTexSubImage2D與GL_LUMINANCE和GL_UNSIGNED_BYTE直接顯示來自攝像頭的原始灰度數據 - 而不是手動將其重新打包爲RGB位圖。Opengl紋理和字節順序

我想在更高分辨率模式下以12或14bits /像素運行相機。

我可以簡單地通過設置GL_SHORT來做到這一點,但相機以big endian方式返回數據,而我的openGL實現似乎是以錯誤的方式繪製它(在x86上)。

有沒有一種簡單的方式告訴openGL紋理是「錯誤」的方式?我想避免手動對數據進行bytewaping,因爲所有其他函數都需要大數據。

回答

6

查看glPixelStore*功能組。

您可能需要使用GL_UNPACK_SWAP_BYTESGL_UNPACK_LSB_FIRST,但仔細檢查您是否使用了正確的GL_UNPACK_ALIGNMENT。默認情況下,解包對齊方式爲4,但如果您使用的是每像素一個字節(lum/ub),則需要將其設置爲1.最近我遇到了這個問題,並且花了我更長的時間比我願意承認:)

+0

如果它讓你感覺更好,我第一次遇到這個問題,我寫了一個簡短的GLSL程序來解決它。當我最終發現GL_UNPACK_ALIGNMENT時,我感到很愚蠢。 – Tommy 2011-03-02 20:58:04

+0

@Tommy這也是opengl.org常見陷阱列表中的#8。 http://www.opengl.org/resources/features/KilgardTechniques/oglpitfall/愚蠢的我們。 – luke 2011-03-02 21:01:48

+1

優秀 - 'glPixelStorei(GL_UNPACK_SWAP_BYTES,1);'它是。這是openGL的偉大之處,有人已經解決了它 - 你只需要知道在哪裏。 – 2011-03-02 21:06:16