2013-01-16 79 views
6

Three.jsで失われたコンテキストイベントを処理したいと思います。そのhereについて素敵なドキュメントがありますが、残念ながら私がrenderer.domElementにそれを適用すると動作しません。私はクリックしてコンテキストを失うことを試み、loseContext()の変数は未定義です。Three.jsでwebglコンテキストが失われたイベントを処理するには

Three.jsの構造が異なると思います。どんな専門家?

答えて

7

レンダラが初期化されたことについて、レンダラを保存した変数の名前が「レンダラ」であると仮定して、このようなことができるはずです。

renderer.context.canvas.addEventListener("webglcontextlost", function(event) { 
    event.preventDefault(); 
    // animationID would have been set by your call to requestAnimationFrame 
    cancelAnimationFrame(animationID); 
}, false); 

renderer.context.canvas.addEventListener("webglcontextrestored", function(event) { 
    // Do something 
}, false); 

BTW-loseContextはThree.JSによって定義されておらず、この時点では標準的な方法ではありません。次のようにしてシミュレーションすることができます。

ロードこのスクリプトを、あなたのレンダラを開始した後Three.JS

https://github.com/vorg/webgl-debug

が次にあなたがキャンバスにloseContextをフックすることができます前に。

renderer.context.canvas = WebGLDebugUtils.makeLostContextSimulatingCanvas(renderer.context.canvas); 

loseContextをトリガーするには、これを行います。

renderer.context.canvas.loseContext(); 

また、これを行うことで、設定した回数の呼び出し後に失敗することもあります。

renderer.context.canvas.loseContextInNCalls(5); 
+0

あなたはThree.jsを使用していない場合、どうすればいいか教えてください。つまり、生のWebGL APIを使用している場合です。ありがとうございました。 – HartleySan

+1

non threejsメソッドhttps://www.khronos.org/webgl/wiki/HandlingContextLost – mattdlockyer

+0

ThreeJSで 'webgl-debug.js'を使用しているときに、私は手動で' renderer.context.canvas.getContext( " webgl ");' renderer.context.canvas.loseContext(); 'を使用する前に – sweeds

関連する問題