CNLの型とデータ#
CNLは、値の種類と、その値が画像や時間列として広がっているかを区別します。正式な定義は型形式にあります。
値の種類#
| Value型 | 用途 |
|---|---|
| Boolean | 真・偽 |
| Integer | 整数 |
| Float | 実数の計算 |
| Vector | 三つのFloat成分 |
| Color | RGBAの四つのFloat成分 |
| String | UTF-8の文字列 |
| Enum | 名前と選択肢が決まった選択値 |
Float32・Int32・Boolなどは現在の処理系に残る表記です。vec2・vec4やComplex、sampler、byte Bufferなども一部の座標計算・実行契約にありますが、公開Value型がその数だけ増えるという意味ではありません。論理的な型と実行Precisionも別に扱います。
StringとEnum#
function main(name: String): String {
const prefix = literal(String, "こんにちは、");
return string_concat(prefix, name);
}
Enumは単なるIntegerと追加の隠し情報ではなく、選択肢の定義を型に含む名義型です。型の名前、選択肢名、安定したコードを指定します。コードの順番から、異なるEnum同士の対応を推測しません。
function main(mode: Enum<"Blend", "normal"=0, "screen"=7>): Enum<"Blend", "normal"=0, "screen"=7> {
return mode;
}
同じ数値コードでも、異なるEnum型は同じ選択値にはなりません。AEのDropdownを接続する境界では、その対応を明示します。String・Enumのuniform値を扱えても、可変長Stringの全Field実行が完成したわけではありません。
Fieldと付随情報#
Gridは一般データ、Imageは画像、Videoは時間を含む画像列を表すField形式です。たとえばImage<Color,2>は二次元のColor画像です。Video<Color,3>は時間を含みます。関数の型に書けることと、すべての実行経路が対応していることは区別します。
Shape、座標、Attributeは、データの構造や解釈を表します。別の公開Value型ではありません。演算の途中で、勝手に解像度をそろえたりAttributeを引き継いだりしません。詳しくはFieldとAttributeを参照してください。