私はプログラムで使用されているフレグシェーダシェーダを交換しようとしています。フラグメントシェーダはすべて同じ変数を持ち、異なる計算だけです。私は下位レベルのハードウェアに代替シェーダを提供しようとしています。webglプログラムシェーダの置き換え
私は最終的に(テクスチャの代わりに)単一のカラー出力を得ることになりますが、誰かが私が間違っていてもいいアイデアはありますか?シェーダが使用されているのは、それに応じて色が変化するためです。
//if I don't do this:
//WebGL: INVALID_OPERATION: attachShader: shader attachment already has shader
gl.detachShader(program, _.attachedFS);
//select a random shader, all using the same parameters
attachedFS = fragmentShaders[~~(Math.qrand()*fragmentShaders.length)];
//attach the new shader
gl.attachShader(program, attachedFS);
//if I don't do this nothing happens
gl.linkProgram(program);
//if I don't add this line:
//globject.js:313 WebGL: INVALID_OPERATION: uniform2f:
//location not for current program
updateLocations();
既存のシェーダープログラムのシェーダーを変更しないで、おそらく複数のシェーダープログラムを作成する必要があります。使用する機能の組み合わせごとにシェイダープログラムを作成します。 – gman