ChromeのGLSLコンパイラを使用すると面白い効果があります。声明WebGLは同じグラフィックススタック上のOpenGLプリプロセッサとは異なります
#define addf(index) if(weights[i+index]>0.) r+=weights[i+index]*f##index(p);
は、##
構文がサポートされていないようです
preprocessor command must not be preceded by any other statement in that line
述べコンパイルされません。 しかし、同じプラットフォーム(Linux 64ビット、Nvidia GPUなど)では、同じシェーダがコンパイルされて正常に動作します。なぜこれ?私は、シェーダコンパイラがGPUドライバスタックの一部であり、どちらの場合でも使用されると考えました。なぜこの別の経験ですか?
実際には標準に正しく従っていることを知っているので、これはChromeのGLSLコンパイラのバグであると誤解されています。それとは別に、私はこの質問をupvoteします。 – LarsH
これは誤解されていますが、GPUベンダーのドライバスタック内にコンパイラが1つしかないと思っていたので、ChromeのGLSLコンパイラにバグがあるとは思いません。しかし、1つ以上のプロファイルがあるようですが、ベンダースタックにまだ残っているかもしれません。私が直面していた問題は、WebGLの仕様によって '## '演算子が明示的に禁止されているため、WebGLのバグは全くありません。しかし、私はまだ他のGLアプリがそれを引き起こさない間にこのエラーがどのように起こるかをまだわかっていないので、この異なる挙動がどのように起こるのか不思議です。 – dronus
OK、「Chromeで使用されているWebGL GLSLコンパイラのバグ」が「ChromeのGLSLコンパイラ」の「バグ」を意味しているとは思いません。コンパイラーがクロムかどうかという疑問があるのでしょうか?しかし、とにかく言葉を削除しました...ありがとう。 +1 – LarsH