WebGL と GLSL と for ステートメント
久しぶりに wgld.org を更新したのはいいが、サンプルを作っていて変な GLSL の仕様に悩まされた。
具体的には for ステートメントに関することだ。
まず、wgld.org のほうにも書いたが GLSL の for ステートメントには、初期化に変数が利用できないようだ。つまりは……
for(int i = xxx; i < yyy; i += zzz){ ... }
のように、変数 xxx などを使って for ステートメントを初期化することができないということ。これを動作するようにするためには、スカラ値を使わなくてはならない。
for(int i = 1; i < 10; i += 1){ ... }
こんな感じに。
どうもいただけない感。
要するに、シェーダのコンパイルの段階で、中身が不定な値をステートメントに含めることができないらしい。
さらに言うと、今までそういう認識でコードを書いたことがなかったけれど、初期化ステートメントの中身の書き方も細かいルールがあるようで……
for(int i = 1; 10 > i; i += 1){ ... }
こういう書き方は許されないようだ。
より低級なレベルで動作するプログラムだからこそなのだろうか。高級言語に慣れすぎてしまうと、こういうことが許容できなくなるから困る。