0

WebGlで単純な3Dアプリケーションを作成しようとしています。このアプリケーションでは、描画されるすべてのオブジェクトに独自のシェーダーがアタッチされています。しかし、Firefoxでは奇妙な問題があり(Chromeではこれは完全に機能します)、各シェーダーの各マトリックス/サンプラーの均一な場所が適切に保存されません。つまり、現在のシェーダーを変更するたびに、シェーダーが使用するすべてのマトリックスに対してgetUniformLocationを呼び出す必要がありますが、これは少し無駄に思えます。

tmp.pMatrixUniform = this.gl.getUniformLocation(tmp, "uPMatrix"); //perpesctive
tmp.mvMatrixUniform = this.gl.getUniformLocation(tmp, "uMVMatrix");  //world transform
tmp.samplerUniform = this.gl.getUniformLocation(tmp, "uSampler"); //texture sampler

return tmp;

上記のコードは、シェーダーを作成し、複数のオブジェクトで使用するために保存する場所です。tmpシェーダーオブジェクトの参照が正しく保存および変更されていることはわかっています。これらのコード行のすぐ上で、すべての属性の場所を同様の方法で保存し、「現在のシェーダー」を変更するたびにリセットする必要がないためです。 。

私が言ったように、これはFirefoxでのみ機能するわけではないので、FirefoxとChromeは同じ場所を異なる方法で保存していると思います。フレームごとに値を「再取得」する必要がなく、両方のブラウザで機能するようにこれらの値を保存する別の方法を知っている人はいますか?

4

1 に答える 1

2

問題を解決しました。関数自体には問題がなかったことがわかりましたが、新しいシェーダーに切り替えるときは、作成時にのみシェーダーをリンクするのではなく、常にリンクすることになりました。

于 2010-12-04T22:50:19.903 に答える