UNPKG

@visactor/vrender-animate

Version:

This module provides a graph-based animation system for VRender.

70 lines (66 loc) 2.91 kB
import { DisappearAnimateBase } from "./DisappearAnimateBase"; export class WebGLEffectBase extends DisappearAnimateBase { constructor(from, to, duration, easing, params) { super(from, to, duration, easing, params); } applyCanvas2DEffect(canvas) { console.warn(`${this.constructor.name}: WebGL不可用,使用简单透明度回退动画`); const outputCanvas = this.createOutputCanvas(canvas); if (!outputCanvas) return canvas; const {ctx: ctx} = outputCanvas; return ctx.globalAlpha = Math.max(0, 1 - this.currentAnimationRatio), ctx.drawImage(canvas, 0, 0), outputCanvas.canvas; } } export class Canvas2DEffectBase extends DisappearAnimateBase { constructor(from, to, duration, easing, params) { super(from, to, duration, easing, params); } getShaderSources() { return null; } applyWebGLEffect(canvas) { return null; } } export class HybridEffectBase extends DisappearAnimateBase { constructor(from, to, duration, easing, params) { super(from, to, duration, easing, params); } getShaderSources() { return null; } applyWebGLEffect(canvas) { return null; } applyCanvas2DEffect(canvas) { return null; } supportsWebGL() { return this.getShaderSources !== HybridEffectBase.prototype.getShaderSources && null !== this.getShaderSources(); } supportsCanvas2D() { return this.applyCanvas2DEffect !== HybridEffectBase.prototype.applyCanvas2DEffect; } afterStageRender(stage, canvas) { var _a, _b; let result = null; if (!1 !== (null === (_b = null === (_a = this.params) || void 0 === _a ? void 0 : _a.options) || void 0 === _b ? void 0 : _b.useWebGL)) { if (this.supportsWebGL() && (this.gl || this.initWebGL(canvas) || console.warn("WebGL初始化失败,尝试Canvas 2D回退"), this.gl)) { if (result = this.applyWebGLEffect(canvas), result) return result; console.warn("WebGL特效执行失败,尝试Canvas 2D回退"); } if (this.supportsCanvas2D()) { if (result = this.applyCanvas2DEffect(canvas), result) return result; console.warn("Canvas 2D特效执行失败"); } } else if (this.supportsCanvas2D()) { if (result = this.applyCanvas2DEffect(canvas), result) return result; console.warn("Canvas 2D特效执行失败"); } else console.warn(`${this.constructor.name}: useWebGL=false 但未实现Canvas 2D方法`); return this.supportsWebGL() || this.supportsCanvas2D() || console.error(`特效类 ${this.constructor.name} 未实现任何渲染方法。请实现 applyWebGLEffect 或 applyCanvas2DEffect 方法。`), canvas; } } //# sourceMappingURL=CustomEffectBase.js.map