WebGL は、レンダリング コマンドの長いリストを完了するのを待たずに送信できるという点で、非同期で優れています。ただし、何らかの理由でレンダリングが完了するまで待機する必要がある場合は、 と同期して行う必要がありますgl.finish()
。gl.finish
コールバックを受け取ってすぐに戻った方がいいのではないでしょうか?
質問:これを確実にエミュレートする方法はありますか?
使用例:多数の頂点を大きなオフスクリーン キャンバスにレンダリングしてdrawImage
から、この大きなキャンバスのセクションをページ上の小さなキャンバスにコピーするために使用しています。私は実際に使用していませんが、同様の効果gl.finish()
があるようです。drawImage()
私のアプリケーションでは、再レンダリングはユーザーがアクション (ボタンのクリックなど) を実行したときにのみトリガーされ、数百ミリ秒かかる場合があります。レンダリング中にブラウザがまだ応答していて、スクロールなどを許可していればいいのですが、特にChromeソリューションを探していますが、FirefoxやSafariでも機能するものが良いでしょう.
考えられる (悪い) 答え:レンダリングにかかる時間を試して見積もり、 への呼び出しで始まるタイムアウトを設定することができますgl.finish()
。ただし、すべてのサイズの頂点バッファーとすべてのユーザーに対してこの推定を確実に行うことは、かなりトリッキーで不正確になります。
可能な(非)回答: requestAnimationFrame
私が探しているものはありますか...そうではありませんか?
2018 年に考えられる答え:おそらくImageBitmap
API がこの問題を解決します - MDN docsを参照してください。