PACK フィールドは、仕様が意味することを正確に意味します。
個々のコンポーネントが 1 つのデータ要素を占有するのではなく、全体のテクセルまたは属性が 1 つのデータ要素に格納されます。
わかりにくい場合は、実際のフォーマットの説明を参照してください。Vulkan は、それらについての耐え難いほどの詳細を、不必要に繰り返すところまで説明します。
との違いは、 aと a の違いVK_FORMAT_B8G8R8A8_RGB
とVK_FORMAT_B8G8R8A8_RGB_PACK32
同じです。1 つは配列 (「個々のコンポーネント」) で、もう 1 つはより小さい値で構成される単一の値 (「単一のデータ要素」) です。uint8_t[4]
uint32_t
uint8_t color[4]
を格納する配列がある場合は、青色のコンポーネントB8G8R8A8
を格納します。color[0]
配列内のコンポーネントの順序は、フォーマット名のコンポーネントの順序によって定義されます。
uint32_t color
を格納する値がある場合はB8G8R8A8
、(color & 0xFF000000) >> 24
青色のコンポーネントを取得します。最上位のバイトが最初で、次に上位のバイトが続きます。
パックされたものとパックされていないものの区別が重要な理由は、エンディアンの問題によるものです。バイト配列にはエンディアンの問題はありません。ただし、16 ビットまたは 32 ビットにパックされた値には、エンディアンの問題があります。パック形式のエンディアンは、常にホストのネイティブ エンディアンであると見なされます。