初期化
int a[2] = {1,2};
int a[2][1] = {{1},{2}};
float2 a[1] = {float2(1,1)};
float2 a[1][1] スカラーは多次元配列の初期化が出来るが、ベクトルは無理っぽい
返り値の指定
void xtest(out float2 a[1])
void xtest(out float a[1])
はout記法を使って記述する
ベクトルでもスカラーでも通常の場所には書くと、エラー文の出ないエラーになる。
一度これを書くと、
// Upgrade NOTE: excluded shader from DX11, OpenGL ES 2.0 because it uses unsized arrays
#pragma exclude_renderers d3d11 gles
というコードが自動的にコードに挿入されてエラーが出ないようになるので注意
また、
float2 a[2] = {float2(1,1),float2(2,2)};
は可能だが
float2 b[2];
b = {float2(1,1),float2(2,2)};
は出来ない。
こういうときは
a = bと
新しく配列を作成してその変数を代入する形にすると動く
また
a[num]のように配列数に変数を使用することは出来ない(固定長配列)
defineも無理
大規模な配列を使うと以下のようなエラーが出る
Sum of temp registers and indexable temp registers exceeds limit of 4096
配列の数を4096以下にすればいいわけではない