2013-05-19 7 views

答えて

9

WebGLはOpenGL ES 2.0の動作を強制し、WebGLアプリケーションがアクセスできないデータにアクセスするのを防止する必要があります。これを行うには、WebGLの実装では、読み込まれるすべてのテクスチャが、OpenGL ES 2.0仕様に従って拡張子なしで読み込み可能であることを含め、多くのことを検証する必要があります。

したがって、すべてのテクスチャがすべての必要条件を満たしているかどうかを確認する必要があります。これには、「キューブ完了」および「ミップマップ」であるキューマップの場合、テクスチャフィルタリングが正しく設定されているなどの2のべき乗の次元でない場合は、「キューブ完了」となります。これらの条件のいずれかが満たされない場合、WebGL実装は透過的な黒いテクスチャに置き換えられ、デバイス間で一貫性があります。

これらのチェックは高価なので、WebGLの実装では、テクスチャがレンダリング不可能かどうかを追跡することができます。テクスチャがレンダリング不能でない場合、描画時にチェックは必要ありません。上記の警告は、基本的にWebGLがこの高価なチェックをすべて行う必要があることを伝えているテクスチャがレンダリング不可能であることです。すべてのテクスチャがレンダリング可能であることを確認した場合、WebGLはこのチェックをスキップしてアプリをより速く実行できます。 「完全な質感」、「完全なキューブ」などの定義について

... OpenGL ES 2.0 spec section 3.7.10

+6

で修正されました。このテクスチャを持つメッシュをシーンに追加する前に、loadTextureコールバックを待つ必要があります。 – dIsoVi

+0

@dIsoVi Bravo!私が今までに見たすべての例では、コールバックを使用していないので、非同期であることはわかりませんでした。ありがとう! – krb686

+0

私はThree.JSの詳細はわかりませんが、シーンにメッシュを追加する前にテクスチャが読み込まれるのを待つのではなく、通常、1x1ピクセルのテクスチャを作成し、そのテクスチャに画像を読み込みます。そうすれば、1x1ピクセルのテクスチャがすべてのレンダリング要件を満たしているので、私はすぐにメッシュを描画できます。画像がロードされると、画像データでテクスチャを更新し、フィルタリングを設定したり、mipを生成したりします。そうすれば、すぐにレンダリングを始めることができます。そのソリューションがあなたのアプリに合っているかどうかはあなた次第です。 – gman

3

を参照してくださいまた、これは、クロム28のバグの結果である可能性があり:http://code.google.com/p/chromium/issues/detail?id=242321私は、このメッセージも、私のWebGLのスクリプトを得ましたテクスチャをまったく使用していませんでした。

は、それはあなたがThree.jsを使用している場合、それはTHREE.ImageUtils.loadTextureの間違った使い方が原因で発生することができクローム29

関連する問題