Skip to content

Commit

Permalink
WebGL context recovery
Browse files Browse the repository at this point in the history
  • Loading branch information
xeolabs committed Jul 9, 2018
1 parent 2d1fa57 commit f7c8a49
Show file tree
Hide file tree
Showing 30 changed files with 1,436 additions and 1,254 deletions.
6 changes: 3 additions & 3 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ module.exports = function (grunt) {
src: devScripts.engine,

// dest: "/home/lindsay/xeolabs/BIMsurfer/bimsurfer/lib/xeogl/xeogl.js"
dest: "/home/lindsay/viewer.js/src/lib/xeogl/xeogl.js"
// dest: "/home/lindsay/xeolabs/xeogl-3dxml-viewer/lib/xeogl/xeogl.js"
// dest: 'build/<%= PROJECT_NAME %>.js'
// dest: "/home/lindsay/viewer.js/src/lib/xeogl/xeogl.js"
dest: "/home/lindsay/xeolabs/xeogl-3dxml-viewer/lib/xeogl/xeogl.js"
// dest: 'build/<%= PROJECT_NAME %>.js'
}
},

Expand Down
39 changes: 21 additions & 18 deletions dev-scripts.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,24 +30,26 @@
"src/renderer/attribute.js",
"src/renderer/renderBuffer.js",

"src/renderer/drawRenderer.js",
"src/renderer/drawShaderSource.js",
"src/renderer/outlineRenderer.js",
"src/renderer/outlineShaderSource.js",
"src/renderer/pickMeshRenderer.js",
"src/renderer/pickMeshShaderSource.js",
"src/renderer/pickTriangleRenderer.js",
"src/renderer/pickTriangleShaderSource.js",
"src/renderer/shadowRenderer.js",
"src/renderer/shadowShaderSource.js",
"src/renderer/emphasisFillRenderer.js",
"src/renderer/emphasisFillShaderSource.js",
"src/renderer/emphasisVerticesRenderer.js",
"src/renderer/emphasisVerticesShaderSource.js",
"src/renderer/emphasisEdgesRenderer.js",
"src/renderer/emphasisEdgesShaderSource.js",
"src/renderer/highlightRenderer.js",
"src/renderer/highlightShaderSource.js",
"src/renderer/draw/drawRenderer.js",
"src/renderer/draw/drawShaderSource.js",

"src/renderer/outline/outlineRenderer.js",
"src/renderer/outline/outlineShaderSource.js",

"src/renderer/pick/pickMeshRenderer.js",
"src/renderer/pick/pickMeshShaderSource.js",
"src/renderer/pick/pickTriangleRenderer.js",
"src/renderer/pick/pickTriangleShaderSource.js",

"src/renderer/shadow/shadowRenderer.js",
"src/renderer/shadow/shadowShaderSource.js",

"src/renderer/emphasis/emphasisFillRenderer.js",
"src/renderer/emphasis/emphasisFillShaderSource.js",
"src/renderer/emphasis/emphasisVerticesRenderer.js",
"src/renderer/emphasis/emphasisVerticesShaderSource.js",
"src/renderer/emphasis/emphasisEdgesRenderer.js",
"src/renderer/emphasis/emphasisEdgesShaderSource.js",

"src/component.js",
"src/scene.js",
Expand All @@ -67,6 +69,7 @@
"src/controls/_module.js",
"src/controls/cameraControl.js",
"src/geometry/_module.js",
"src/geometry/sceneVertexBufs.js",
"src/geometry/geometry.js",
"src/geometry/boxGeometry.js",
"src/geometry/torusGeometry.js",
Expand Down
41 changes: 36 additions & 5 deletions src/canvas/canvas.js
Original file line number Diff line number Diff line change
Expand Up @@ -246,33 +246,55 @@

// Get WebGL context

if (cfg.simulateWebGLContextLost) {
if (window.WebGLDebugUtils) {
this.canvas = WebGLDebugUtils.makeLostContextSimulatingCanvas(this.canvas);
} else {
this.error("To simulate context loss, please include WebGLDebugUtils");
}
}

this._initWebGL(cfg);

// Bind context loss and recovery handlers

var self = this;

this.canvas.addEventListener("webglcontextlost", this._webglcontextlostListener = function () {
this.canvas.addEventListener("webglcontextlost", this._webglcontextlostListener = function (event) {

console.time("webglcontextrestored");

self.scene._webglContextLost();

/**
* Fired whenever the WebGL context has been lost
* @event webglContextLost
* @event webglcontextlost
*/
self.fire("webglContextLost");
self.fire("webglcontextlost");


event.preventDefault();
},
false);

this.canvas.addEventListener("webglcontextrestored", this._webglcontextrestoredListener = function () {
this.canvas.addEventListener("webglcontextrestored", this._webglcontextrestoredListener = function (event) {

self._initWebGL();

if (self.gl) {

self.scene._webglContextRestored(self.gl);

/**
* Fired whenever the WebGL context has been restored again after having previously being lost
* @event webglContextRestored
* @param value The WebGL context object
*/
self.fire("webglContextRestored", self.gl);
self.fire("webglcontextrestored", self.gl);
event.preventDefault();
}

console.timeEnd("webglcontextrestored");
},
false);

Expand Down Expand Up @@ -593,6 +615,15 @@
return this.scene._renderer.readPixels(pixels, colors, size, opaqueOnly);
},

/**
* Simulates lost WebGL context.
*/
loseWebGLContext: function () {
if (this.canvas.loseContext) {
this.canvas.loseContext();
}
},

_props: {

/**
Expand Down
Loading

0 comments on commit f7c8a49

Please sign in to comment.