2013-01-16 17 views
6

Tôi muốn xử lý sự kiện ngữ cảnh bị mất trong Three.js. Có một tài liệu hay về số here nhưng tiếc là nó không hoạt động khi tôi áp dụng nó cho số renderer.domElement của mình. Tôi cố gắng để mất bối cảnh bằng cách nhấp vào và một số biến trong loseContext() là không xác định.Làm cách nào để chúng tôi xử lý sự kiện bối cảnh webgl bị mất trong Three.js

Tôi đoán cấu trúc khác trong Three.js. Có chuyên gia nào không?

Trả lời

7

Bạn sẽ có thể làm điều gì đó như thế này về trình kết xuất đã được khởi tạo và giả sử tất nhiên biến mà bạn đã lưu trình kết xuất vào được đặt tên là 'trình kết xuất'.

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 không được định nghĩa bởi Three.JS và nó không phải là phương pháp chuẩn tại thời điểm này. Bạn có thể mô phỏng nó bằng cách làm như sau.

tải kịch bản này trước khi Three.js

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

Sau đó, sau khi bạn đã bắt đầu renderer của bạn, bạn có thể treo các loseContext vào khung.

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

Để kích hoạt LossContext, bạn sẽ thực hiện việc này.

renderer.context.canvas.loseContext(); 

Và sau đó bạn cũng có thể bị lỗi sau khi thực hiện một số cuộc gọi bằng cách thực hiện việc này.

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

Bạn có thể vui lòng cho tôi biết bạn sẽ làm điều này như thế nào nếu bạn không sử dụng Three.js. Nói cách khác, nếu bạn đang sử dụng API WebGL thô. Cảm ơn bạn. – HartleySan

+1

phương thức nonjjs https://www.khronos.org/webgl/wiki/HandlingContextLost – mattdlockyer

+0

Trong khi sử dụng 'webgl-debug.js' với ThreeJS, tôi thấy rằng tôi phải gọi thủ công' renderer.context.canvas.getContext (" webgl ");' trước khi sử dụng 'renderer.context.canvas.loseContext();' – sweeds