2017-07-02 82 views
0

glTexImage2D函數接受,除其他外,所謂的「鹼內部格式」列出如下:基本內部格式如何工作?

GL_DEPTH_COMPONENT 
GL_DEPTH_STENCIL 
GL_RED 
GL_RG 
GL_RGB 
GL_RGB 

這些似乎缺乏任何類型或尺寸的信息。引用文檔:

如果應用程序想要以某種分辨率或某種格式存儲紋理,它可以使用internalFormat請求分辨率和格式。 GL將選擇與internalFormat所要求的內部表示非常接近的內部表示,但它可能不完全匹配。 (由GL_REDGL_RGGL_RGB規定的表示,和GL_RGBA必須完全匹配。)

這些格式文檔中沒有對glTexStorage2D上市了,我找不到任何更精確的瞭解他們。我顯然通過愚蠢的運氣使GL_RGBA工作,但我想更好地瞭解我在這裏做什麼。

當我使用基本內部格式時會發生什麼?
如何選擇存儲的類型,大小和佈局?
我是否希望事後查詢選定的格式並調整我的程序的其餘部分,例如GLSL採樣器類型?

回答

1

原因glTexStorage*不允許「基本內部格式」是因爲你不應該正在使用它們。它只支持具有明確定義行爲的內部格式。

當我使用基本內部格式時會發生什麼?

你得到的圖像格式,無論是司機想給你,下面列出的範圍之內。

如何選擇存儲的類型,大小和佈局?

這種紋理的「類型」將始終是無符號的,標準化的整數。它將至少具有基本內部格式的頻道。

其他一切都完全取決於驅動程序。如果駕駛員想要添加比您指定的更多的頻道,則可以這樣做。如果驅動程序想要爲您提供每通道16位的格式,則可以這樣做。

難道我預計以後查詢所選擇的格式和調整我的程序的其他部分,如GLSL採樣類型?

有沒有什麼要查詢,因爲它們始終是無符號,規範化的圖像。所以你在着色器中使用sampler*而不是usampler*isampler*

+0

謝謝!只是要清楚,我最好始終遠離這些格式,對吧? – Quentin