C/C++ では、"sequence points"/"sequenced before" 関係を定義する明確なルールがあるため、たとえば次の式
int k = i-- * i;
int p = j-- + --j;
未定義の動作を呼び出します。
さて、GLSL でこのような式を管理する規則は何なのだろうかと思います。The OpenGL Shading Language (4.40) 仕様には、シーケンス ポイント/sequenced before relationship に似た概念を定義するものは見つかりませんでした。
セクション「5.9式」では、それは言うだけです
プレインクリメントとプレデクリメントは、演算対象の式の内容に 1 または 1.0 を加算または減算し、プレインクリメントまたはプレデクリメント式の値は、その変更の結果の値です。ポスト インクリメントおよびポスト デクリメント式は、演算対象の式の内容に 1 または 1.0 を加算または減算しますが、結果の式には、ポスト インクリメントまたはポスト デクリメントが実行される前の式の値が含まれます。
しかし、たとえば他の部分式との関係でポストインクリメントが実際にいつ発生するかについては言及されていません。
1/ GLSL で式の順序付けがどのように定義されているかについて、仕様または合意はありますか?
2/i-- * ++i
有効な/明確に定義された GLSL 式ですか? もしそうなら、最初に持っていたときのその価値は何i=1
ですか?