Powinieneś być w stanie zrobić coś takiego na temat renderera, który został zainicjowany i zakładając oczywiście, że zmienna, w której zapisałeś renderer, nazywa się "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);
BTW - lostContext nie jest zdefiniowany przez Three.JS i nie jest standardową metodą od tego czasu. Możesz go symulować, wykonując następujące czynności.
obciążenia skrypt przed Three.js
https://github.com/vorg/webgl-debug
Następnie po tym, jak zaczął swoją renderujący można zaczepić loseContext na płótnie.
renderer.context.canvas = WebGLDebugUtils.makeLostContextSimulatingCanvas(renderer.context.canvas);
Aby wywołać metodę lostContext, należy to zrobić.
renderer.context.canvas.loseContext();
Można również ustawić opcję niepowodzenia po określonej liczbie wywołań.
renderer.context.canvas.loseContextInNCalls(5);
Czy możesz mi powiedzieć, jak byś to zrobił, jeśli nie używasz Three.js. Innymi słowy, jeśli używasz surowego API WebGL. Dziękuję Ci. – HartleySan
metoda non threejs https://www.khronos.org/webgl/wiki/HandlingContextLost – mattdlockyer
Podczas używania 'webgl-debug.js' z ThreeJS, stwierdziłem, że musiałem ręcznie wywołać' renderer.context.canvas.getContext (" webgl ");' przed użyciem 'renderer.context.canvas.loseContext();' – sweeds