mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-20 17:26:01 +08:00
[ts][webgl][player] Dispose ManagedWebGLRenderingContext.
This commit is contained in:
parent
0b42677299
commit
351b2c6164
@ -280,11 +280,16 @@ export class SpinePlayer implements Disposable {
|
||||
this.sceneRenderer?.dispose();
|
||||
this.loadingScreen?.dispose();
|
||||
this.assetManager?.dispose();
|
||||
this.context?.dispose();
|
||||
for (var i = 0; i < this.eventListeners.length; i++) {
|
||||
var eventListener = this.eventListeners[i];
|
||||
eventListener.target.removeEventListener(eventListener.event, eventListener.func);
|
||||
}
|
||||
this.input?.dispose();
|
||||
if (this.canvas) {
|
||||
this.canvas.width = 0;
|
||||
this.canvas.height = 0;
|
||||
}
|
||||
this.parent.removeChild(this.dom);
|
||||
this.disposed = true;
|
||||
}
|
||||
|
||||
@ -27,9 +27,9 @@
|
||||
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
|
||||
import { Restorable } from "@esotericsoftware/spine-core";
|
||||
import { Disposable, type Restorable } from "@esotericsoftware/spine-core";
|
||||
|
||||
export class ManagedWebGLRenderingContext {
|
||||
export class ManagedWebGLRenderingContext implements Disposable {
|
||||
public canvas: HTMLCanvasElement | OffscreenCanvas;
|
||||
public gl: WebGLRenderingContext;
|
||||
private restorables = new Array<Restorable>();
|
||||
@ -39,20 +39,28 @@ export class ManagedWebGLRenderingContext {
|
||||
let canvas: HTMLCanvasElement = canvasOrContext;
|
||||
this.gl = <WebGLRenderingContext>(canvas.getContext("webgl2", contextConfig) || canvas.getContext("webgl", contextConfig));
|
||||
this.canvas = canvas;
|
||||
canvas.addEventListener("webglcontextlost", (e: any) => {
|
||||
let event = <WebGLContextEvent>e;
|
||||
if (e) e.preventDefault();
|
||||
});
|
||||
canvas.addEventListener("webglcontextrestored", (e: any) => {
|
||||
for (let i = 0, n = this.restorables.length; i < n; i++)
|
||||
this.restorables[i].restore();
|
||||
});
|
||||
canvas.addEventListener("webglcontextlost", this.contextLostHandler);
|
||||
canvas.addEventListener("webglcontextrestored", this.contextRestoredHandler);
|
||||
} else {
|
||||
this.gl = canvasOrContext;
|
||||
this.canvas = this.gl.canvas;
|
||||
}
|
||||
}
|
||||
|
||||
private contextLostHandler(e: Event) {
|
||||
if (e) e.preventDefault();
|
||||
}
|
||||
|
||||
private contextRestoredHandler(e: Event) {
|
||||
for (let i = 0, n = this.restorables.length; i < n; i++)
|
||||
this.restorables[i].restore();
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
this.canvas.removeEventListener("webglcontextlost", this.contextLostHandler);
|
||||
this.canvas.removeEventListener("webglcontextrestored", this.contextRestoredHandler);
|
||||
}
|
||||
|
||||
addRestorable (restorable: Restorable) {
|
||||
this.restorables.push(restorable);
|
||||
}
|
||||
@ -61,4 +69,5 @@ export class ManagedWebGLRenderingContext {
|
||||
let index = this.restorables.indexOf(restorable);
|
||||
if (index > -1) this.restorables.splice(index, 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user