in seriously.js [1239:1347]
function destroyContext(event) {
// either webglcontextlost or primary target node has been destroyed
var i, node;
/*
todo: once multiple shared webgl resources are supported,
see if we can switch context to another existing one and
rebuild immediately
*/
if (event) {
Seriously.logger.warn('WebGL context lost');
/*
todo: if too many webglcontextlost events fired in too short a time,
don't preventDefault
*/
event.preventDefault();
}
//don't draw anymore until context is restored
if (rafId) {
cancelAnimFrame(rafId);
rafId = 0;
}
if (glCanvas) {
glCanvas.removeEventListener('webglcontextlost', destroyContext, false);
}
for (i = 0; i < effects.length; i++) {
node = effects[i];
node.gl = null;
node.initialized = false;
node.baseShader = null;
node.model = null;
node.frameBuffer = null;
node.texture = null;
if (node.shader && node.shader.destroy) {
node.shader.destroy();
}
node.shaderDirty = true;
node.shader = null;
if (node.effect.lostContext) {
node.effect.lostContext.call(node);
}
/*
todo: do we need to set nodes to uready?
if so, make sure nodes never get set to ready unless gl exists
and make sure to set ready again when context is restored
*/
if (event) {
node.emit('webglcontextlost');
}
}
for (i = 0; i < sources.length; i++) {
node = sources[i];
//node.setUnready();
node.texture = null;
node.initialized = false;
node.allowRefresh = false;
if (event) {
node.emit('webglcontextlost');
}
}
for (i = 0; i < transforms.length; i++) {
node = transforms[i];
node.frameBuffer = null;
node.texture = null;
if (event) {
node.emit('webglcontextlost');
}
}
for (i = 0; i < targets.length; i++) {
node = targets[i];
node.model = false;
node.frameBuffer = null;
//texture?
if (event) {
node.emit('webglcontextlost');
}
}
if (baseShader && baseShader.destroy) {
baseShader.destroy();
}
//clean up rectangleModel
if (gl) {
gl.deleteBuffer(rectangleModel.vertex);
gl.deleteBuffer(rectangleModel.texCoord);
gl.deleteBuffer(rectangleModel.index);
}
if (rectangleModel) {
delete rectangleModel.vertex;
delete rectangleModel.texCoord;
delete rectangleModel.index;
}
rectangleModel = null;
baseShader = null;
gl = null;
glCanvas = null;
}