2016-07-12 9 views
0

knitrrglを使用すると、複数のWebGLシーンを含むドキュメントを別々のディスプレイに書き込むことができます。それらのそれぞれは、キャンバスを作成し、それに関連付けられたWebGLコンテキストを取得し、次にWebGLプロットを行います。コンソールはコンテキストを復元するにはどうすればよいですか?

Exceeded 16 live WebGL contexts for this principal 

が表示されますし、私が取得します(Firefoxで)

ユーザーが単一のHTMLページに表示され、任意の数を求めることができ、最終的に彼らは、コンテキストを使い果たすだろう、とWebGLcontextlostイベント。ページをスクロールすると、初期の表示はすべて空白になり、後の表示のみが表示されます。

現在ウィンドウに表示されているものを復元する方法を聞かれますか?

編集の追加:この質問のバリアント:表示にスクロールしたときに描画するようにキャンバスを設定するにはどうすればよいですか?典型的なケースでは、一度に1つまたは2つのコンテキストしか表示されないので、両方のコンテキストを描画しても問題ありません。しかし、コードはそのことがいつ起こるかを伝える必要があります。

このWebページを:私はWebGLcontextrestoredイベントをトリガする方法を知りませんが、私は私の質問にバリアントに答えることができ

+0

その他の解決策があります。 [1つのキャンバスを使用し、ビューポートをレンダリングする](http://stackoverflow.com/questions/30541121/multiple-webgl-models-on-the-same-page) [1つのWebGLキャンバスと複数の非webglキャンバスの使用](http://stackoverflow.com/questions/15824840/display-different-scenes-sharing-resources-on-multiple-canvases)コンテキストが表示されている場合のみ参照してください。画面上のレンダリングについてのみ、https://github.com/greggman/requestanimationframe-fix.jsを参照してください。 – gman

答えて

0

http://developer.telerik.com/featured/lazy-loading-images-on-the-web/、すなわちそれらだけをロードし、画像の「遅延ロード」を行う方法について説明しますそれらが表示されようとしているとき。アプローチと同じ種類のは、以下の違いで、WebGLのシーンの遅延ロードのために働く:

  • コンテキストはいつでも失われる可能性がありますので、あなたがそれをロードしたら、あなたはリスナーを削除したくありません一度。

  • キャンバスを新しいコンテキストで再初期化する必要があるという事実をWebGLcontextlostイベントで記録します。

  • シーンを再初期化した後に描画する必要があります。

  • (オプション):シーンが常に存在するという錯覚が好きなので、isInBrowserViewportテストでは、シーン全体が表示されるのではなく、表示されているシーンがあるかどうかを確認します。

上記のアプローチはFirefoxでは十分ではありません。そのブラウズでは、キャンバスのWebGLコンテキストを取得すると、そこには永遠に残るように見えます。あなたがあまりに多くの他のものを割り当てたためにコンテキストが失われても、それは決して戻ってこない。そのキャンバスを再び使用できるようにするために私が見つけた唯一の方法は、キャンバスを削除して再作成し、その中に新しいコンテキストを割り当てることです。私はChromeで多くの実験をしていませんが、同じ制限があるようです。

関連する問題