Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions packages/effects-core/src/asset-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ export class AssetManager implements Disposable {
assets: this.assets,
};

await hookTimeInfo('plugin:processAssets', () => this.processPluginAssets(scene));
await hookTimeInfo('plugin:onAssetsLoadStart', () => this.onPluginSceneLoadStart(scene));

const { bins = [], images, fonts } = jsonScene;

Expand Down Expand Up @@ -359,8 +359,8 @@ export class AssetManager implements Disposable {
return loadedImages;
}

private async processPluginAssets (scene: Scene) {
await PluginSystem.processAssets(scene, this.options);
private async onPluginSceneLoadStart (scene: Scene) {
await PluginSystem.onAssetsLoadStart(scene, this.options);
}

private async processTextures (
Expand Down
19 changes: 9 additions & 10 deletions packages/effects-core/src/plugin-system.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import type { Composition } from './composition';
import type { AbstractPlugin, PluginConstructor } from './plugins';
import type { Plugin, PluginConstructor } from './plugins';
import type { Scene, SceneLoadOptions } from './scene';
import { logger } from './utils';
import type { Engine } from './engine';

export const pluginLoaderMap: Record<string, PluginConstructor> = {};

const plugins: AbstractPlugin[] = [];
const plugins: Plugin[] = [];

/**
* 注册 plugin
Expand All @@ -25,7 +25,6 @@ export function registerPlugin (name: string, pluginClass: PluginConstructor) {
const pluginInstance = new pluginClass();

pluginInstance.name = name;
pluginInstance.initialize();

plugins.push(pluginInstance);
plugins.sort((a, b) => a.order - b.order);
Expand All @@ -44,26 +43,26 @@ export function unregisterPlugin (name: string) {
}

export class PluginSystem {
static getPlugins (): AbstractPlugin[] {
static getPlugins (): Plugin[] {
return plugins;
}

static initializeComposition (composition: Composition, scene: Scene) {
plugins.forEach(loader => loader.onCompositionConstructed(composition, scene));
plugins.forEach(loader => loader.onCompositionCreated(composition, scene));
}

static destroyComposition (comp: Composition) {
plugins.forEach(loader => loader.onCompositionDestroyed(comp));
plugins.forEach(loader => loader.onCompositionDestroy(comp));
}

static async processAssets (scene: Scene, options?: SceneLoadOptions) {
static async onAssetsLoadStart (scene: Scene, options?: SceneLoadOptions) {
return Promise.all(
plugins.map(plugin => plugin.processAssets(scene, options)),
plugins.map(plugin => plugin.onAssetsLoadStart(scene, options)),
);
}

static loadResources (scene: Scene, options: SceneLoadOptions, engine: Engine) {
plugins.forEach(loader => loader.prepareResource(scene, options, engine));
static onAssetsLoadFinish (scene: Scene, options: SceneLoadOptions, engine: Engine) {
plugins.forEach(loader => loader.onAssetsLoadFinish(scene, options, engine));
}
}

Expand Down
4 changes: 2 additions & 2 deletions packages/effects-core/src/plugins/cal/calculate-loader.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { AbstractPlugin } from '../plugin';
import { Plugin } from '../plugin';

export class CalculateLoader extends AbstractPlugin {}
export class CalculateLoader extends Plugin {}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AbstractPlugin } from '../plugin';
import { Plugin } from '../plugin';

export class CameraVFXItemLoader extends AbstractPlugin {
export class CameraVFXItemLoader extends Plugin {
}
4 changes: 2 additions & 2 deletions packages/effects-core/src/plugins/interact/interact-loader.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AbstractPlugin } from '../plugin';
import { Plugin } from '../plugin';

export class InteractLoader extends AbstractPlugin {
export class InteractLoader extends Plugin {
}
4 changes: 2 additions & 2 deletions packages/effects-core/src/plugins/particle/particle-loader.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Engine } from '../../engine';
import { AbstractPlugin } from '../plugin';
import { Plugin } from '../plugin';

export class ParticleLoader extends AbstractPlugin {
export class ParticleLoader extends Plugin {
engine: Engine;
}
48 changes: 25 additions & 23 deletions packages/effects-core/src/plugins/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { Composition } from '../composition';
import type { Engine } from '../engine';

export interface PluginConstructor {
new(): AbstractPlugin,
new(): Plugin,

[key: string]: any,
}
Expand All @@ -12,35 +12,37 @@ export interface PluginConstructor {
* 抽象插件类
* 注册合成不同生命周期的回调函数
*/
export abstract class AbstractPlugin {
export abstract class Plugin {
order = 100;
name = '';

initialize (): void { }
name = 'Plugin';

/**
* loadScene 函数调用的时候会触发此函数,
* 此阶段可以加载插件所需类型资源,并返回原始资源和加载后的资源。
* @param scene
* @param options
* @returns
* 场景加载时触发,用于加载插件所需的自定义资源。
* 此阶段适合发起异步资源请求。
* @param scene - 场景对象
* @param options - 场景加载选项
*/
async processAssets (scene: Scene, options?: SceneLoadOptions): Promise<void> {
}
async onAssetsLoadStart (scene: Scene, options?: SceneLoadOptions): Promise<void> { }

/**
* loadScene 函数调用的时候会触发此函数,
* 此阶段时,json 中的图片和二进制已经被加载完成,可以对加载好的资源做进一步处理,
* 如果 promise 被 reject, loadScene 函数同样会被 reject,表示场景加载失败。
* 请记住,整个 load 阶段都不要创建 GL 相关的对象,只创建 JS 对象
* 此阶段晚于 processAssets
* @param {Scene} scene
* @param {SceneLoadOptions} options
* 场景资源加载完成后触发。
* 此时 JSON 中的图片和二进制已加载完成,可对资源做进一步处理。
* @param scene - 场景对象
* @param options - 场景加载选项
* @param engine - 引擎实例
*/
prepareResource (scene: Scene, options: SceneLoadOptions, engine: Engine): void {
}
onAssetsLoadFinish (scene: Scene, options: SceneLoadOptions, engine: Engine): void { }

onCompositionConstructed (composition: Composition, scene: Scene): void { }
/**
* 合成创建完成后触发。
* @param composition - 合成对象
* @param scene - 场景对象
*/
onCompositionCreated (composition: Composition, scene: Scene): void { }

onCompositionDestroyed (composition: Composition): void { }
/**
* 合成销毁时触发。
* @param composition - 合成对象
*/
onCompositionDestroy (composition: Composition): void { }
}
4 changes: 2 additions & 2 deletions packages/effects-core/src/plugins/sprite/sprite-loader.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { AbstractPlugin } from '../plugin';
import { Plugin } from '../plugin';

export class SpriteLoader extends AbstractPlugin {
export class SpriteLoader extends Plugin {
override name = 'sprite';
}
4 changes: 2 additions & 2 deletions packages/effects-core/src/plugins/text/text-loader.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { AbstractPlugin } from '../index';
import { Plugin } from '../index';

// TODO: 注册必须用
export class TextLoader extends AbstractPlugin {
export class TextLoader extends Plugin {
}
4 changes: 2 additions & 2 deletions packages/effects-core/src/scene-loader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ export class SceneLoader {

engine.clearResources();

// 触发插件系统 pluginSystem 的回调 prepareResource
PluginSystem.loadResources(loadedScene, assetManager.options, engine);
// 触发插件系统 pluginSystem 的回调 onAssetsLoadFinish
PluginSystem.onAssetsLoadFinish(loadedScene, assetManager.options, engine);

engine.assetService.prepareAssets(loadedScene, loadedScene.assets);
engine.assetService.updateTextVariables(loadedScene, options.variables);
Expand Down
4 changes: 2 additions & 2 deletions packages/effects-threejs/src/three-display-object.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,8 @@ export class ThreeDisplayObject extends THREE.Group {

engine.clearResources();

// 触发插件系统 pluginSystem 的回调 prepareResource
PluginSystem.loadResources(scene, assetManager.options, engine);
// 触发插件系统 pluginSystem 的回调 onAssetsLoadFinish
PluginSystem.onAssetsLoadFinish(scene, assetManager.options, engine);
this.assetService.prepareAssets(scene, assetManager.getAssets());
this.assetService.updateTextVariables(scene, assetManager.options.variables);
this.assetService.initializeTexture(scene);
Expand Down
11 changes: 6 additions & 5 deletions plugin-packages/alipay-downgrade/src/alipay-downgrade-plugin.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
import type { Scene, SceneLoadOptions } from '@galacean/effects';
import { AbstractPlugin, logger } from '@galacean/effects';
import { Plugin, logger } from '@galacean/effects';
import { getDefaultRenderLevel } from './utils';

/**
* Alipay 降级插件类
*
* 根据 SceneLoadOptions 中传入的 downgrade 数据,判断是否降级。
* 如果设备被降级,会在 processAssets 时抛出降级相关的异常和原因。
* 如果设备被降级,会在 onAssetsLoadStart 时抛出降级相关的异常和原因。
*
* 如果 SceneLoadOptions 中 renderLevel 没有设置,那么会根据 downgrade 数据
* 和默认的渲染等级规则设置其中的 renderLevel。
*/
export class AlipayDowngradePlugin extends AbstractPlugin {
override initialize (): void {
export class AlipayDowngradePlugin extends Plugin {
constructor () {
super();
this.order = 1;
}

override async processAssets (scene: Scene, options?: SceneLoadOptions | undefined): Promise<void> {
override async onAssetsLoadStart (scene: Scene, options?: SceneLoadOptions | undefined): Promise<void> {
options = options || {};
const downgradeResult = options.pluginData?.['downgrade'];

Expand Down
4 changes: 2 additions & 2 deletions plugin-packages/alipay-downgrade/test/src/player.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ describe('Player downgrade', () => {
});
playerFunc();
} catch (e: any) {
expect(e.message).to.equal('Load error in plugin:processAssets, Error: Downgraded, reason: mock.');
expect(e.message).to.equal('Load error in plugin:onAssetsLoadStart, Error: Downgraded, reason: mock.');
}
expect(playerFunc).not.to.have.been.called();
});
Expand Down Expand Up @@ -122,7 +122,7 @@ describe('Player downgrade', () => {
playerFunc();
} catch (e: any) {
catchFunc();
expect(e.message).to.equal('Load error in plugin:processAssets, Error: Downgraded, reason: downgrade test.');
expect(e.message).to.equal('Load error in plugin:onAssetsLoadStart, Error: Downgraded, reason: downgrade test.');
}
expect(catchFunc).to.have.been.called.once;
expect(playerFunc).not.to.have.been.called();
Expand Down
12 changes: 7 additions & 5 deletions plugin-packages/downgrade/src/downgrade-plugin.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
import type { Scene, SceneLoadOptions } from '@galacean/effects';
import { AbstractPlugin, logger } from '@galacean/effects';
import { Plugin, logger } from '@galacean/effects';
import { getDefaultRenderLevel } from './utils';

/**
* 降级插件类
*
* 根据 SceneLoadOptions 中传入的 downgrade 数据,判断是否降级。
* 如果设备被降级,会在 processAssets 时抛出降级相关的异常和原因。
* 如果设备被降级,会在 onAssetsLoadStart 时抛出降级相关的异常和原因。
*
* 如果 SceneLoadOptions 中 renderLevel 没有设置,那么会根据 downgrade 数据
* 和默认的渲染等级规则设置其中的 renderLevel 。
*/
export class DowngradePlugin extends AbstractPlugin {
override initialize (): void {
export class DowngradePlugin extends Plugin {

constructor () {
super();
this.order = 1;
}

override async processAssets (scene: Scene, options?: SceneLoadOptions | undefined): Promise<void> {
override async onAssetsLoadStart (scene: Scene, options?: SceneLoadOptions | undefined): Promise<void> {
options = options || {};
const downgradeResult = options.pluginData?.['downgrade'];

Expand Down
4 changes: 2 additions & 2 deletions plugin-packages/downgrade/test/src/player.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ describe('Player downgrade', () => {
});
playerFunc();
} catch (e: any) {
expect(e.message).to.equal('Load error in plugin:processAssets, Error: Downgraded, reason: mock.');
expect(e.message).to.equal('Load error in plugin:onAssetsLoadStart, Error: Downgraded, reason: mock.');
}
expect(playerFunc).not.to.have.been.called();
});
Expand Down Expand Up @@ -126,7 +126,7 @@ describe('Player downgrade', () => {

playerFunc();
} catch (e: any) {
expect(e.message).to.equal('Load error in plugin:processAssets, Error: Downgraded, reason: downgrade test.');
expect(e.message).to.equal('Load error in plugin:onAssetsLoadStart, Error: Downgraded, reason: downgrade test.');
}
expect(playerFunc).not.to.have.been.called();
});
Expand Down
6 changes: 3 additions & 3 deletions plugin-packages/editor-gizmo/src/gizmo-loader.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { Composition, Scene, Texture, VFXItem } from '@galacean/effects';
import { AbstractPlugin } from '@galacean/effects';
import { Plugin } from '@galacean/effects';
import { axisIconMap } from './constants';
import { createImage, createTexture } from './util';
import { GizmoComponent } from './gizmo-component';
Expand All @@ -8,10 +8,10 @@ const iconImages: Map<string, HTMLImageElement> = new Map();

export const iconTextures: Map<string, Texture> = new Map();

export class EditorGizmoPlugin extends AbstractPlugin {
export class EditorGizmoPlugin extends Plugin {
override order = 1001;

override async onCompositionConstructed (composition: Composition, scene: Scene) {
override async onCompositionCreated (composition: Composition, scene: Scene) {
const engine = composition.renderer.engine;

iconTextures.clear();
Expand Down
4 changes: 2 additions & 2 deletions plugin-packages/ffd/src/ffd-loader.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { AbstractPlugin } from '@galacean/effects';
import { Plugin } from '@galacean/effects';

export class FFDLoader extends AbstractPlugin {
export class FFDLoader extends Plugin {
override name = 'ffd';
}
10 changes: 5 additions & 5 deletions plugin-packages/model/src/plugin/model-plugin.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Scene, SceneLoadOptions, Composition, Engine, Component } from '@galacean/effects';
import {
VFXItem, AbstractPlugin, spec, Behaviour, PLAYER_OPTIONS_ENV_EDITOR, effectsClass,
VFXItem, Plugin, spec, Behaviour, PLAYER_OPTIONS_ENV_EDITOR, effectsClass,
GLSLVersion, Geometry,
} from '@galacean/effects';
import {
Expand All @@ -14,13 +14,13 @@ import { fetchPBRShaderCode, fetchUnlitShaderCode, PluginHelper } from '../utili
/**
* Model 插件类,负责支持播放器中的 3D 功能
*/
export class ModelPlugin extends AbstractPlugin {
export class ModelPlugin extends Plugin {
/**
* 插件名称
*/
override name = 'model';

override async processAssets (scene: Scene, options?: SceneLoadOptions | undefined): Promise<void> {
override async onAssetsLoadStart (scene: Scene, options?: SceneLoadOptions | undefined): Promise<void> {
await CompositionCache.loadStaticResources();
}

Expand All @@ -29,7 +29,7 @@ export class ModelPlugin extends AbstractPlugin {
* @param scene - 场景
* @param options - 加载选项
*/
override prepareResource (scene: Scene, options: SceneLoadOptions, engine: Engine): void {
override onAssetsLoadFinish (scene: Scene, options: SceneLoadOptions, engine: Engine): void {
if (options.pluginData !== undefined) {
const keyList = [
'compatibleMode',
Expand Down Expand Up @@ -84,7 +84,7 @@ export class ModelPlugin extends AbstractPlugin {
* @param composition - 合成
* @param scene - 场景
*/
override onCompositionConstructed (composition: Composition, scene: Scene): void {
override onCompositionCreated (composition: Composition, scene: Scene): void {
const props = {
id: 'ModelPluginItem',
name: 'ModelPluginItem',
Expand Down
4 changes: 2 additions & 2 deletions plugin-packages/model/test/src/memory-leak.spec.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Player, registerPlugin, AbstractPlugin, VFXItem, spec, unregisterPlugin } from '@galacean/effects';
import { Player, registerPlugin, VFXItem, spec, unregisterPlugin, Plugin } from '@galacean/effects';
import { JSONConverter } from '@galacean/effects-plugin-model';
import sceneList from './scene-list';
import { sleep, GPUMemoryTool } from '../../../../web-packages/test/memory/src/common';

const { expect } = chai;

class CustomePlugin extends AbstractPlugin { }
class CustomePlugin extends Plugin { }

registerPlugin('orientation-transformer', CustomePlugin);

Expand Down
Loading