2017-11-20 5 views
0

デスクトップのOpenGLでは、コンテキストを切り替えるといくつかのオーバーヘッドが発生することはよく知られており、特にメモリ内のオブジェクト(テクスチャなど)を再読み込み/再バインドする必要があります。webglの切り替えキャンバスは、デスクトップOpenGLのような「コンテキストスイッチオーバーヘッド」を課しますか?

WebGLでさまざまなキャンバス要素間を移動すると、同じコンテキスト切り替えペナルティが発生しますか? 1つのページにキャンバス要素間で共有できるwebglオブジェクトがありますか?

+0

"*特に、メモリ内のオブジェクト(テクスチャなど)を再読み込み/再バインドする必要があります。コンテキストは、その中に設定されているすべての状態を保持します。コンテキストが* destroyed *の場合、その状態を復元する必要があります。 –

+1

実際、共有オブジェクトを持つコンテキストは、オブジェクトの状態を共有するため、あらゆる種類の状態の問題を抱えています。私はそれらを回避する必要があったので、私は知っています。また、一部のドライバは内容を切り替える際に重大なオーバーヘッドがあることも知っています。 Chromeのソリューションは、特定のGPUの1つの実際のコンテキストの上に複数のコンテキストを仮想化することだったので、私はそれも知っています。 – gman

答えて

1

カンバスで共有できるWebGLオブジェクトはありません。キャンバスがWebGLオブジェクトを共有する必要がある場合、解決策である1つの大きなキャンバスを使用して複数のキャンバスが表示されるようにするソリューションがあります。 WebGL example,three.js example

少なくともChromeでは、キャンバス間の描画に切り替えるためのオーバーヘッドはありません。まず、フレームごとにキャンバスごとにキャンバスを切り替えることはまずありません。あなたのキャンバスがすべて画面上にある場合、上記の解決方法がそれらをカバーします。より多くのキャンバスを見るためにスクロールしなければならないように、より離れている場合、a solution like thisはスイッチの数を減らします。ほとんどのドライバーではほとんどオーバーヘッドはありませんが。

+0

上記のように、実際にChromeが1つの実際のコンテキストの上に複数のコンテキストを仮想化するため、特にChromeでの切り替えにオーバーヘッドはありませんか?それはElectronでもそうですか? –

関連する問題