@visactor/vrender-animate
Version:
This module provides a graph-based animation system for VRender.
70 lines (66 loc) • 2.91 kB
JavaScript
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