コンテンツにスキップ

packQuantizedForVertexBuffer()

packQuantizedForVertexBuffer(values, num_points): Uint8Array

Format.QUANTIZED のレコードを頂点バッファのレイアウトへ詰め替える

D3D11 には 3 成分の 8bit / 16bit 正規化頂点フォーマットが無く、Metal は頂点属性の オフセットに 4 バイト境界を要求する。転送形式のまま束縛すると ANGLE がタイルごとに 全点を詰め替えて別バッファを持つため、転送量を削っても GPU 側のメモリと CPU 時間が かえって増える。4 成分かつ 4 バイト境界に揃えて渡すことでこの経路を避ける。

 転送形式                             頂点バッファ
 0      6     9  10 11  12            0      6    8          12
 +------+-----+--+--+--+              +------+----+----------+
 | pos  | col |in|rs|rs|              | pos  |pad | col + in |
 +------+-----+--+--+--+              +------+----+----------+
  u16x3  u8x3  u8 u8 u8                u16x3  u16  u8x4

CPU から読む用途には転送形式のままの Data.body を使う。

Parameters

Parameter Type
values Uint8Array<ArrayBufferLike>
num_points number

Returns

Uint8Array