どくらぼ

言いたいことを言います

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){ ... }

 

こういう書き方は許されないようだ。

より低級なレベルで動作するプログラムだからこそなのだろうか。高級言語に慣れすぎてしまうと、こういうことが許容できなくなるから困る。