2013-02-27 67 views
2

爲什麼glTexImage1D,glTexImage2D和glTexImage3D函數需要內部格式(即GL_RGBA8,GL_R32UI等)和像素格式? (GL_RGBA,GL_RED_INTEGER)glTexImage * D參數冗餘?

在我看來,像素格式可以很容易地從內部格式來解釋。我問這不只是出於好奇,而是因爲我確保我寫的OpenGL紋理對象和幀緩衝對象包裝(從內部格式推斷像素格式)能夠正確提取所有內部格式的像素格式。

回答

6

像素格式是您提供紋理數據的格式,內部格式是OpenGL將如何在內部存儲它的格式。 OpenGL將自動處理轉換。

man page for glTexImage2D有一組很好的內部格式佈局表格,也解釋了每種格式如何轉換。例如,如果您的像素格式爲GL_RG,內部格式爲GL_COMPRESSED_RGBA,則GL會將整個藍色通道填充爲0,alpha通道填充爲1,然後進行自己的內部壓縮。

每個元素是一個紅色/綠色的雙。 GL將其轉換爲浮點,並通過將0連接到藍色,將1連接到alpha來將其組裝到RGBA元素中。然後將每個分量乘以帶符號的比例因子GL_c_SCALE,並將其添加到帶符號的偏差GL_c_BIAS中,然後鉗位到範圍[0,1]。

+0

很好的解釋!這是一個很大的幫助。 – 2013-02-27 20:30:54