2013-03-05 47 views
1

The specification爲OpenGL方法glTexImage2D()給出了一個可接受的internalFormat參數的大表。我想知道,不過,如果它真的很重要我設置這個參數爲,因爲醫生說正確使用OpenGL方法glTexImage2D()?

如果應用程序需要紋理存儲在某個 分辨率或在一定的格式,它可以請求分辨率爲 ,格式爲internalFormat。 GL將選擇一個內部 表示形式,它非常接近internalFormat所要求的表示形式,但 它可能不完全匹配。

這使得它看起來好像OpenGL只是要挑選它想要的東西。我應該打擾獲取圖像位深度,並將internalFormat設置爲GL_RGBA8GL_RGBA16?我見過的所有代碼示例僅使用GL_RGBA ...

+0

參考手冊*不是OpenGL規範*。這只是一個網頁。 – 2013-03-05 03:11:27

回答

2

這使得它看起來好像OpenGL只是要挑選它想要的東西。

這是非常誤導。

有很多格式的實現是required to support more or less exactly as described。實際上允許將它們存儲在更大的存儲空間中。但與他們相比,他們不允許失去精確度。使用它們有很多優點(除了明確知道你正在獲得什麼)。

首先,它允許您使用像GL_RGB10_A2這樣的specialized formats,這在某些情況下很方便(爲延遲渲染等存儲線性顏色值)。其次,宗教組織都需要支持的圖像格式的任意組合,但只有如果所有這些圖像格式從何而來required color formats for textures/renderbuffers (but not the texture-only).列表如果您使用任何其它內部格式,宗教組織可以在你扔GL_FRAMEBUFFER_UNSUPPORTED

三,immutable texture storage functions要求使用大小的內部格式。而且你應該在他們可用時使用它們。

通常,您應該始終使用大小適中的內部格式。沒有理由使用通用的。

0

使用通用內部格式OpenGL將選擇最喜歡的任何「喜歡」,並告訴它你不關心。使用明確的內部格式,您告訴OpenGL,您確實關心內部表示(很可能是因爲您需要精度)。雖然如果無法實現精確匹配,實現可以自由升級或降級,但通常的回退是升級到更高的格式精度,以滿足請求的要求。

如果我懶得得到一個圖像比特深度和設置internalFormat

如果你絕對需要的精度,然後是。如果您的擔心更多地關注性能,那麼作爲常見的OpenGL實現的默認設置,如果沒有請求特定格式,則選擇內部格式以獲得最佳性能。