「Metalのデータ型」の版間の差分
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
| 1行目: | 1行目: | ||
== スカラー型== | ==スカラー型== | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
! 型 | !型 | ||
! 概要 | !概要 | ||
|- | |- | ||
|bool | |bool | ||
| 9行目: | 9行目: | ||
|- | |- | ||
|char | |char | ||
| rowspan="2" |符号付き8ビット整数 | |||
| | |- | ||
|int8_t | |||
|- | |- | ||
|unsigned char | |unsigned char | ||
uchar | | rowspan="3" |符号なし8ビット整数 | ||
|- | |||
uint8_t | |uchar | ||
|- | |||
|uint8_t | |||
|- | |- | ||
|short | |short | ||
| rowspan="2" |符号付き16ビット整数 | |||
| | |- | ||
|int16_t | |||
|- | |- | ||
|unsigned short | |unsigned short | ||
ushort | | rowspan="3" |符号なし16ビット整数 | ||
|- | |||
uint16_t | |ushort | ||
|- | |||
|uint16_t | |||
|- | |- | ||
|int | |int | ||
| rowspan="2" |符号付き32ビット整数 | |||
| | |- | ||
|int32_t | |||
|- | |- | ||
|unsigned int | |unsigned int | ||
uint | | rowspan="3" |符号なし32ビット整数 | ||
|- | |||
uint32_t | |uint | ||
|- | |||
|uint32_t | |||
|- | |- | ||
|long | |long | ||
| rowspan="2" |符号付き64ビット整数 | |||
|符号付き64ビット整数 | |||
Metal 2.2以降 | Metal 2.2以降 | ||
|- | |||
|int64_t | |||
|- | |- | ||
|unsigned long | |unsigned long | ||
| rowspan="2" |符号なし64ビット制す | |||
|符号なし64ビット制す | |||
Metal 2.2以降 | Metal 2.2以降 | ||
|- | |||
|uint64_t | |||
|- | |- | ||
|half | |half | ||
| 57行目: | 65行目: | ||
|- | |- | ||
|size_t | |size_t | ||
|sizeof | |sizeof 演算子の結果を表す符号なし整数型。 | ||
実態は符号なし64ビット整数。 | |||
|- | |- | ||
|ptrdiff_t | |ptrdiff_t | ||
| | |2つのポインタを引き算した結果の符号付き整数型。 | ||
実態は符号付き64ビット整数。 | |||
|- | |- | ||
|void | |void | ||
| 66行目: | 76行目: | ||
|} | |} | ||
=== サフィックス === | ===サフィックス === | ||
* f または F = float, 0.5f | |||
* h または H = half, 0.5h | *f または F = float, 0.5f | ||
* u または U = uint, 2u | *h または H = half, 0.5h | ||
* l または L = long, 2L | *u または U = uint, 2u | ||
*l または L = long, 2L | |||
== ベクトル型 == | ==ベクトル型== | ||
スカラー型名の末尾に数字(ここでは'''n'''とする)を付けるとベクトル型になる。 | スカラー型名の末尾に数字(ここでは'''n'''とする)を付けるとベクトル型になる。 | ||
'''n''' には 2, 3, 4のいづれかの数字が入る。 | '''n''' には 2, 3, 4のいづれかの数字が入る。 | ||
「float2」や「float3」といった感じだ。 | 「float2」や「float3」といった感じだ。 | ||
[[HLSL]]などと同じだな。 | [[HLSL]]などと同じだな。 | ||
=== ベクトル型のサイズは必ず2の乗数=== | *bool'''n''' | ||
*char'''n''' | |||
*short'''n''' | |||
*int'''n''' | |||
*long'''n''' | |||
*uchar'''n''' | |||
*ushort'''n''' | |||
*uint'''n''' | |||
*ulong'''n''' | |||
*half'''n''' | |||
*float'''n''' | |||
===ベクトル型のサイズは必ず2の乗数=== | |||
Metalのベクトル型は「型のサイズは必ず2の乗数」となっている。 | Metalのベクトル型は「型のサイズは必ず2の乗数」となっている。 | ||
たとえば、 | たとえば、 | ||
* int = 4バイト | |||
* int2 = 8バイト | *int = 4バイト | ||
* int3 = '''16バイト''' (12バイトではない) | *int2 = 8バイト | ||
* int4 = 16バイト | *int3 = '''16バイト''' (12バイトではない) | ||
*int4 = 16バイト | |||
[[HLSL]]や[[GLSL]]で[[定数バッファー]]などの[[構造体]]を作る際は、その構造体のサイズを「8バイト単位」や「16バイト単位」にする必要があり、[[シェーダー]]の[[プログラミング]]の際にはその構造体のサイズを手計算で算出して、バイト数が足りない場合はダミーの変数を追加してサイズ調整が必要である。 | [[HLSL]]や[[GLSL]]で[[定数バッファー]]などの[[構造体]]を作る際は、その構造体のサイズを「8バイト単位」や「16バイト単位」にする必要があり、[[シェーダー]]の[[プログラミング]]の際にはその構造体のサイズを手計算で算出して、バイト数が足りない場合はダミーの変数を追加してサイズ調整が必要である。 | ||