2016-03-19 39 views
1

我想了解VkFormat枚舉中的項目名稱,到目前爲止,我想我得到所有(非塊)格式的名稱的所有結構,但我無法弄清楚什麼這意味着它們何時具有後綴PACK8PACK16PACK32。如果我合計通道大小,它們總是加起來爲8,16或32,沒有任何不規則,所以我不明白這意味着對這些值進行位打包意味着什麼,因爲它們看起來效率很高,他們所有的位。PACK8/16/32在VKFormat名稱中的含義是什麼?

像往常一樣,the documentation不是很有幫助,只是說這個格式沒有說明什麼意思。

回答

2

包裝領域意味着嚴格的規範說什麼,他們的意思是:

全紋元或屬性被存儲在一個單一的數據元素,而不是佔用一個數據元素

雖然單個組件如果你覺得太混亂,你可以看看實際的格式描述。 Vulkan對它們進行了極爲詳細的描述,以至於不必要的重複。

VK_FORMAT_B8G8R8A8_RGBVK_FORMAT_B8G8R8A8_RGB_PACK32之間的差異是uint8_t[4]uint32_t之間的差異。一個是數組(「單個組件」),另一個是由較小值組成的單個值(「單個數據元素」)。

如果您有一個uint8_t color[4]陣列,其中存儲B8G8R8A8,則color[0]存儲藍色分量。數組中組件的順序由格式名稱中組件的順序來定義。

如果您有一個uint32_t color值,其中存儲B8G8R8A8,那麼(color & 0xFF000000) >> 24將檢索藍色組件。最高的字節是第一個,接着是下一個最高等等。

包裝與未包裝的區別很重要的原因是因爲endian issues。字節數組沒有endian問題。但是打包到16位或32位的值確實存在endian問題。打包格式的末尾始終被認爲是主機的本地端。

相關問題