2013-01-16 9 views
6

Voglio gestire un evento di contesto perso in Three.js. C'è una bella documentazione su quello here ma sfortunatamente non funziona quando lo applico al mio renderer.domElement. Cerco di perdere il contesto facendo clic e alcune variabili in loseContext() non sono definite.Come gestiamo gli eventi persi del contesto Webgl in Three.js

Suppongo che la struttura sia diversa in Three.js. Qualche esperto?

risposta

7

Si dovrebbe essere in grado di fare qualcosa del genere sul renderer è stato inizializzato e presupponendo naturalmente che la variabile in cui è stato salvato il renderer sia denominata 'renderer'.

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); 

proposito - loseContext non è definita da Three.js e non è un metodo standard di questo tempo. Puoi simularlo facendo quanto segue.

caricare questo script prima Three.js

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

Poi, dopo aver iniziato la tua renderer è possibile agganciare il loseContext alla tela.

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

Per attivare il comando loseContext lo si farebbe.

renderer.context.canvas.loseContext(); 

E si può anche avere un errore dopo un numero impostato di chiamate facendo questo.

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

Potresti dirmi come faresti se non stai usando Three.js. In altre parole, se si utilizza l'API WebGL non elaborata. Grazie. – HartleySan

+1

metodo non threejs https://www.khronos.org/webgl/wiki/HandlingContextLost – mattdlockyer

+0

Durante l'utilizzo di 'webgl-debug.js' con ThreeJS, ho scoperto che dovevo chiamare manualmente' renderer.context.canvas.getContext (" webgl ");' prima di usare 'renderer.context.canvas.loseContext();' – sweeds