2016-12-07 13 views
4

WebGLには8つのテクスチャの制限があることは知っています。WebGLのテクスチャの最大数は?

私の質問は、ということである制限は、グローバル8である、または賢明なシェーダ/プログラムあたり?

1シェーダ/プログラムの限界に達していれば、1シェーダのユニフォームにテクスチャをロードすると、他のシェーダのためにこれらのスロットを再利用することができますか? 1つの図形にTEXTURE0を使用したとします。別の図形でTEXTURE0を使用できますか?

答えて

10

制限はドローコールごとです。ドローコールを行い、特定のシェーダープログラムを呼び出すと、限界に拘束されますが、次のドローコールでは同じアニメーションフレーム内で全く異なるテクスチャを使用できます。

また、8は最低保証にすぎません。システムは、少なくとも8つをサポートする必要があります。はWebGL準拠と見なされます。しかし、より良いグラフィックスカードは8つ以上をサポートします。あなたは、このようにしているプラ​​ットフォーム用の画像テクスチャの最大数を照会することができます

var maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); 

ます。また、頂点テクスチャを探すことができます。

gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS) 

または両者の組み合わせ:

gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS) 

WebGL Report(免責事項、私は投稿したことがある人)のサイトを使用して、プラットフォームのこの統計情報を参照することもできます(Fragment Shader - > Max Texture Units)。

また、最大画像テクスチャのサポートのグラフを見ることWebGL Statsを確認することができます。グラフのMAX_TEXTURE_IMAGE_UNITSグラフには、最大16のイメージテクスチャのサポートがかなり一般的であり、現代のブラウザで約95%のサポート率を享受していることが示されています。

+0

テクスチャを先にアップロードするのではなく、各描画呼び出しの間でテクスチャを切り替える必要があるということですか?これは別の質問をもたらします。描画呼び出しごとにユニフォームをアップロードする必要がありますか(テクスチャ以外のもの)?ユニフォームはプログラムにアップロードされていますか? –

+0

描画コールが以前の描画呼び出しと異なるテクスチャを使用する場合は、描画呼び出しの間にテクスチャを再バインドする必要があります。非テクスチャ制服に関する質問は、別の質問のように聞こえるかもしれません。多分、それに焦点を当てた新しい質問を投稿してください。 – emackey