@galacean/effects-core 2.10.0-alpha.0 → 2.10.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/components/base-render-component.d.ts +4 -0
  2. package/dist/composition.d.ts +5 -0
  3. package/dist/engine.d.ts +23 -0
  4. package/dist/fallback/migration.d.ts +13 -0
  5. package/dist/index.js +1112 -360
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +1107 -361
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/material/types.d.ts +4 -0
  10. package/dist/material/utils.d.ts +4 -0
  11. package/dist/math/value-getters/index.d.ts +1 -0
  12. package/dist/math/value-getters/reference-curve.d.ts +19 -0
  13. package/dist/math/value-getters/value-getter-map.d.ts +5 -0
  14. package/dist/plugin-system.d.ts +6 -4
  15. package/dist/plugins/index.d.ts +1 -0
  16. package/dist/plugins/particle/particle-mesh.d.ts +0 -2
  17. package/dist/plugins/particle/trail-mesh.d.ts +0 -2
  18. package/dist/plugins/plugin.d.ts +14 -0
  19. package/dist/plugins/sprite/sprite-item.d.ts +31 -5
  20. package/dist/plugins/sprite/sprite.d.ts +42 -0
  21. package/dist/plugins/text/index.d.ts +1 -0
  22. package/dist/plugins/text/line-break.d.ts +29 -0
  23. package/dist/plugins/timeline/playable-assets/index.d.ts +1 -0
  24. package/dist/plugins/timeline/playable-assets/sprite-property-playable-asset.d.ts +23 -0
  25. package/dist/plugins/timeline/playables/index.d.ts +1 -0
  26. package/dist/plugins/timeline/playables/sprite-property-mixer-playable.d.ts +11 -0
  27. package/dist/plugins/timeline/playables/transform-mixer-playable.d.ts +6 -0
  28. package/dist/plugins/timeline/playables/transform-playable.d.ts +17 -2
  29. package/dist/plugins/timeline/tracks/index.d.ts +1 -0
  30. package/dist/plugins/timeline/tracks/sprite-property-track.d.ts +11 -0
  31. package/dist/plugins/timeline/transform-clip-mixer.d.ts +33 -0
  32. package/dist/render/graphics.d.ts +2 -2
  33. package/dist/render/text-cache.d.ts +22 -14
  34. package/dist/scene.d.ts +7 -4
  35. package/dist/utils/index.d.ts +1 -1
  36. package/package.json +2 -2
@@ -80,6 +80,10 @@ export interface MaskReference {
80
80
  */
81
81
  inverted: boolean;
82
82
  }
83
+ /**
84
+ * @deprecated 2.10 起蒙版模式不再通过单一枚举表达,runtime 内部已不再使用此枚举。
85
+ * 仅为兼容旧版本对外导出的接口而保留,请改用 `MaskProcessor` 的多蒙版 API。
86
+ */
83
87
  export declare enum MaskMode {
84
88
  /**
85
89
  * 无
@@ -5,4 +5,8 @@ export declare function valIfUndefined<T>(val: any, def: T): T;
5
5
  export declare function getPreMultiAlpha(blending?: spec.BlendingMode): number;
6
6
  export declare function setBlendMode(material: Material, blendMode?: number): void;
7
7
  export declare function setSideMode(material: Material, side: spec.SideMode): void;
8
+ /**
9
+ * @deprecated 2.10 起 runtime 内部已不再通过 `MaskMode` 设置模板测试参数。
10
+ * 仅为兼容旧版本对外导出的接口而保留,新代码请勿使用。
11
+ */
8
12
  export declare function setMaskMode(material: Material, maskMode: MaskMode): void;
@@ -3,3 +3,4 @@ export * from './color-curve';
3
3
  export * from './vector-curves';
4
4
  export * from './bezier-curve';
5
5
  export * from './value-getter-map';
6
+ export * from './reference-curve';
@@ -0,0 +1,19 @@
1
+ import type { EffectsObject } from '../../effects-object';
2
+ import { ValueGetter } from './value-getter';
3
+ /**
4
+ * 对象引用曲线运行时数据:[time, value][],value 为已解析的 EffectsObject 实例。
5
+ */
6
+ export type ReferenceCurveData<T extends EffectsObject> = [time: number, value: T][];
7
+ /**
8
+ * 通用对象引用阶梯曲线(不插值)。对象引用不可插值,
9
+ * 按时间阶梯采样取 time ≤ t 的最近关键帧。
10
+ *
11
+ * 继承 ValueGetter 以复用 PropertyClipPlayable<T>;数值相关方法
12
+ * (toUniform/toData/getIntegrate*)保留基类 NOT_IMPLEMENT——对象引用 curve
13
+ * 不走 shader 通路。典型用例:T = Sprite(sprite 属性 K 帧切图)。
14
+ */
15
+ export declare class ReferenceCurve<T extends EffectsObject> extends ValueGetter<T> {
16
+ private keyframes;
17
+ onCreate(props: ReferenceCurveData<T>): void;
18
+ getValue(time?: number): T;
19
+ }
@@ -1,2 +1,7 @@
1
1
  import { ValueGetter } from './value-getter';
2
+ /**
3
+ * 对象引用阶梯曲线(spec ValueType.REFERENCE_CURVE)。
4
+ * props 为 [[time, value], ...],value 为已解析的对象引用实例。
5
+ */
6
+ export declare const REFERENCE_CURVE = 28;
2
7
  export declare function createValueGetter(args: any): ValueGetter<any>;
@@ -17,9 +17,11 @@ export declare function registerPlugin(name: string, pluginClass: PluginConstruc
17
17
  export declare function unregisterPlugin(name: string): void;
18
18
  export declare class PluginSystem {
19
19
  static getPlugins(): Plugin[];
20
- static initializeComposition(composition: Composition, scene?: Scene): void;
21
- static destroyComposition(comp: Composition): void;
22
- static onAssetsLoadStart(scene: Scene, options?: SceneLoadOptions): Promise<void[]>;
23
- static onAssetsLoadFinish(scene: Scene, options: SceneLoadOptions, engine: Engine): void;
20
+ static notifyCompositionCreated(composition: Composition, scene?: Scene): void;
21
+ static notifyCompositionDestroy(composition: Composition): void;
22
+ static notifyEngineCreated(engine: Engine): void;
23
+ static notifyEngineDestroy(engine: Engine): void;
24
+ static notifyAssetsLoadStart(scene: Scene, options?: SceneLoadOptions): Promise<void[]>;
25
+ static notifyAssetsLoadFinish(scene: Scene, options: SceneLoadOptions, engine: Engine): void;
24
26
  }
25
27
  export declare function getPluginUsageInfo(name: string): string;
@@ -9,6 +9,7 @@ export * from './interact/interact-vfx-item';
9
9
  export * from './interact/interact-item';
10
10
  export * from './interact/mesh-collider';
11
11
  export * from './sprite/sprite-loader';
12
+ export * from './sprite/sprite';
12
13
  export * from './sprite/sprite-item';
13
14
  export * from './particle/particle-loader';
14
15
  export * from './particle/particle-mesh';
@@ -63,8 +63,6 @@ export interface ParticleMeshData {
63
63
  export interface ParticleMeshProps extends ParticleMeshData {
64
64
  renderMode?: number;
65
65
  blending?: number;
66
- mask: number;
67
- maskMode: number;
68
66
  side: number;
69
67
  transparentOcclusion?: boolean;
70
68
  matrix?: Matrix4;
@@ -21,9 +21,7 @@ export type TrailMeshProps = {
21
21
  occlusion: boolean;
22
22
  transparentOcclusion: boolean;
23
23
  lifetime: ValueGetter<number>;
24
- mask: number;
25
24
  shaderCachePrefix: string;
26
- maskMode: number;
27
25
  name: string;
28
26
  };
29
27
  export type TrailPointOptions = {
@@ -38,4 +38,18 @@ export declare abstract class Plugin {
38
38
  * @param composition - 合成对象
39
39
  */
40
40
  onCompositionDestroy(composition: Composition): void;
41
+ /**
42
+ * 引擎创建完成后触发。
43
+ * 适用于注册引擎级单例、建立以引擎为键的映射、绑定全局监听等场景。
44
+ * @param engine - 引擎实例
45
+ * @since 2.10.0
46
+ */
47
+ onEngineCreated(engine: Engine): void;
48
+ /**
49
+ * 引擎销毁时触发。
50
+ * 适合解绑监听、释放引擎级资源或清理以引擎为键的映射。
51
+ * @param engine - 引擎实例
52
+ * @since 2.10.0
53
+ */
54
+ onEngineDestroy(engine: Engine): void;
41
55
  }
@@ -5,6 +5,7 @@ import type { FrameContext } from '../timeline';
5
5
  import { Playable, PlayableAsset, TrackMixerPlayable, TrackAsset } from '../timeline';
6
6
  import type { Geometry } from '../../render';
7
7
  import { MaskableGraphic } from '../../components';
8
+ import type { Sprite } from './sprite';
8
9
  /**
9
10
  * 图层元素基础属性, 经过处理后的 spec.SpriteContent.options
10
11
  */
@@ -12,7 +13,14 @@ export type SpriteItemOptions = {
12
13
  startColor: spec.vec4;
13
14
  renderLevel?: spec.RenderLevel;
14
15
  };
15
- export type splitsDataType = [r: number, x: number, y: number, w: number, h: number | undefined][];
16
+ /**
17
+ * SpriteComponent 数据。扩展 spec.SpriteComponentData,新增可选 sprite 资产引用。
18
+ * spec 包不可改,故本地扩展。
19
+ */
20
+ interface SpriteComponentDataEx extends spec.SpriteComponentData {
21
+ /** 引用的 Sprite 资产(新版数据流);老数据经 version37Migration 迁移而来 */
22
+ sprite?: spec.DataPath;
23
+ }
16
24
  export declare class SpriteColorPlayableAsset extends PlayableAsset {
17
25
  data: ColorPlayableAssetData;
18
26
  createPlayable(): Playable;
@@ -40,15 +48,33 @@ export declare class SpriteComponent extends MaskableGraphic {
40
48
  time: number;
41
49
  duration: number;
42
50
  protected textureSheetAnimation?: spec.TextureSheetAnimation;
43
- constructor(engine: Engine, props?: spec.SpriteComponentData);
51
+ /**
52
+ * 引用的 Sprite 资产(纹理 + 归一化 UV 矩形 + rotation),渲染唯一数据源。
53
+ */
54
+ protected _sprite: Sprite;
55
+ /**
56
+ * 当前 Sprite 资产。设置时同步纹理、重绑 _MainTex 并重建几何体 UV。
57
+ * @since 2.10.0
58
+ */
59
+ get sprite(): Sprite;
60
+ set sprite(sprite: Sprite);
61
+ constructor(engine: Engine, props?: SpriteComponentDataEx);
44
62
  onUpdate(dt: number): void;
45
63
  onDisable(): void;
46
64
  onDestroy(): void;
47
65
  protected updateGeometry(geometry: Geometry): void;
66
+ fromData(data: SpriteComponentDataEx): void;
67
+ /**
68
+ * 应用 Sprite 资产到渲染器:同步纹理并重绑 _MainTex。不重建几何体。
69
+ * fromData(后续自行 updateGeometry)与 sprite setter(随后 updateGeometry)共用。
70
+ * 直接写 _sprite,避免经 setter 触发 updateGeometry。
71
+ */
72
+ protected applySpriteToRenderer(sprite: Sprite): void;
48
73
  /**
49
74
  * @deprecated
50
- * 原有打包纹理拆分逻辑,待移除
75
+ * 原有打包纹理拆分逻辑,仅在老数据 splits.length>1(2x2 纹理打包)时使用,保留向后兼容。
76
+ * 不依赖组件状态,splits 由参数传入(同时存在帧动画与多 split 的数据不存在)。
51
77
  */
52
- protected updateGeometryFromMultiSplit(): void;
53
- fromData(data: spec.SpriteComponentData): void;
78
+ protected updateGeometryFromMultiSplit(splits: spec.SplitParameter[]): void;
54
79
  }
80
+ export {};
@@ -0,0 +1,42 @@
1
+ import type * as spec from '@galacean/effects-specification';
2
+ import { EffectsObject } from '../../effects-object';
3
+ import type { Engine } from '../../engine';
4
+ import type { Texture } from '../../texture';
5
+ /**
6
+ * Sprite UV 旋转方式。序列化为整数(兼容老 splits 的 flip 0/1)。
7
+ * None 不旋转、Rotate90 将 UV 顺时针旋转 90°(width/height 互换)。
8
+ */
9
+ export declare enum SpriteRotation {
10
+ /** 不旋转 */
11
+ None = 0,
12
+ /** UV 旋转 90°(对应老 splits flip=1) */
13
+ Rotate90 = 1
14
+ }
15
+ /**
16
+ * Sprite 资产数据
17
+ */
18
+ export interface SpriteData extends spec.EffectsObjectData {
19
+ /** 关联纹理(DataPath 引用) */
20
+ texture?: spec.DataPath;
21
+ /** 归一化 UV 矩形 [x, y, w, h],默认整张纹理 */
22
+ rect?: spec.vec4;
23
+ /** UV 旋转方式(0=None, 1=Rotate90),对齐老 splits 的 flip 语义 */
24
+ rotation?: SpriteRotation;
25
+ }
26
+ /**
27
+ * Sprite 资产:一张纹理 + 一个归一化 UV 矩形区域(不含 border/pivot)。
28
+ * 被 SpriteComponent 引用,替代直接引用 Texture + 散落的 splits。
29
+ *
30
+ * 反序列化全部集中在 fromData 手动解析(与 SpriteComponent 风格一致),
31
+ * 不使用 @serialize 装饰器,避免序列化/反序列化双路径带来的引用覆盖陷阱。
32
+ */
33
+ export declare class Sprite extends EffectsObject {
34
+ /** 关联的纹理对象 */
35
+ texture: Texture;
36
+ /** 归一化 UV 矩形 [x, y, w, h],默认整张纹理 */
37
+ rect: spec.vec4;
38
+ /** UV 旋转方式(对应老 splits 的 flip 0/1) */
39
+ rotation: SpriteRotation;
40
+ constructor(engine: Engine, props?: SpriteData);
41
+ fromData(data: SpriteData): void;
42
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './base-layout';
2
+ export * from './line-break';
2
3
  export * from './text-item';
3
4
  export * from './text-layout';
4
5
  export * from './text-style';
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 文本换行机会判定:UAX #14 风格的"换行机会"模型。
3
+ *
4
+ * - CJK 表意字 / 假名 / 韩文音节:任意两个字之间都是合法断点(字符级)
5
+ * - 空格 / 制表符 / NBSP:可断,且断行时被吞掉(不留在行尾 / 行首)
6
+ * - 西文字母 / 数字:词内不可断;整体超宽时由调用方退化到字符级断(overflow-wrap)
7
+ *
8
+ * 不含 kinsoku 禁则(句号 / 逗号不进行首等留作后续)。
9
+ */
10
+ /** 换行机会类型(断点字符之后):决定断点字符归属及断行时是否吞掉 */
11
+ export type BreakAfter = 'swallow' | 'keep' | false;
12
+ /**
13
+ * 是否为可换行断点字符(空格 / 制表符 / NBSP)。
14
+ * 断在此字符之前,且断行时该字符被吞掉(不进旧行也不进新行)。
15
+ * @param ch - 当前字符
16
+ */
17
+ export declare function isBreakChar(ch: string): boolean;
18
+ /**
19
+ * 是否为 CJK 类字符(中文表意字 / 假名 / 韩文音节)。可在其与相邻字符之间换行。
20
+ * 用码点判定以支持 CJK 扩展 B 等代理对字符(不能用 /u 正则,browserslist 为 iOS 9)。
21
+ * @param ch - 当前字符(须为完整码点,调用方应使用 Array.from 遍历)
22
+ */
23
+ export declare function isCJKLike(ch: string): boolean;
24
+ /**
25
+ * 计算 prev(已推入的字符)之后是否为换行机会。只看 prev,不看后续字符。
26
+ * @param prev - 前一字符(已推入旧行)
27
+ * @returns 'swallow'=prev 是空格类,断行时吞掉 prev;'keep'=prev 是 CJK,prev 留本行末、下行从其后起;false=不可断
28
+ */
29
+ export declare function breakOpportunityAfter(prev: string): BreakAfter;
@@ -1,5 +1,6 @@
1
1
  export * from './activation-playable-asset';
2
2
  export * from './color-property-playable-asset';
3
3
  export * from './float-property-playable-asset';
4
+ export * from './sprite-property-playable-asset';
4
5
  export * from './sub-composition-playable-asset';
5
6
  export * from './vector-property-playable-assets';
@@ -0,0 +1,23 @@
1
+ import type * as spec from '@galacean/effects-specification';
2
+ import type { Playable } from '../playable';
3
+ import { PlayableAsset } from '../playable';
4
+ import type { ReferenceCurveData } from '../../../math';
5
+ import type { Sprite } from '../../sprite/sprite';
6
+ /**
7
+ * 对象引用曲线序列化值:[REFERENCE_CURVE, [time, DataPath][]],value 为 {id} 引用。
8
+ * 序列化形态,无泛型。
9
+ * TODO: update to spec.
10
+ */
11
+ export type ReferenceCurveValue = [number, [number, spec.DataPath][]];
12
+ export interface SpritePropertyAssetData extends spec.EffectsObjectData {
13
+ curveData: ReferenceCurveValue;
14
+ }
15
+ /**
16
+ * Sprite 属性 K 帧 PlayableAsset:curveData 为对象引用阶梯曲线,
17
+ * createPlayable 复用 PropertyClipPlayable<Sprite> + ReferenceCurve(阶梯采样,不插值)。
18
+ */
19
+ export declare class SpritePropertyPlayableAsset extends PlayableAsset {
20
+ curveData: [number, ReferenceCurveData<Sprite>];
21
+ fromData(data: SpritePropertyAssetData): void;
22
+ createPlayable(): Playable;
23
+ }
@@ -5,6 +5,7 @@ export * from './float-property-mixer-playable';
5
5
  export * from './particle-mixer-playable';
6
6
  export * from './property-clip-playable';
7
7
  export * from './sprite-color-mixer-playable';
8
+ export * from './sprite-property-mixer-playable';
8
9
  export * from './sub-composition-clip-playable';
9
10
  export * from './sub-composition-mixer-playable';
10
11
  export * from './track-mixer-playable';
@@ -0,0 +1,11 @@
1
+ import type { FrameContext } from '../playable';
2
+ import { TrackMixerPlayable } from './track-mixer-playable';
3
+ /**
4
+ * Sprite 属性 K 帧 mixer。对象引用不混合:取首个激活 clip 的阶梯采样值,
5
+ * 赋值 boundObject.sprite 触发 setter(同步纹理 + 重建 UV)。
6
+ * 不继承 PropertyMixerPlayable(其 evaluate 开头"读当前值为 null 则 return"
7
+ * 会阻断无初始 sprite 组件的 K 帧)。
8
+ */
9
+ export declare class SpritePropertyMixerPlayable extends TrackMixerPlayable {
10
+ evaluate(context: FrameContext): void;
11
+ }
@@ -1,5 +1,11 @@
1
1
  import type { FrameContext } from '../playable';
2
2
  import { TrackMixerPlayable } from './track-mixer-playable';
3
+ /**
4
+ * TransformTrack 的 mixer。
5
+ * 收集当前激活的 Transform clip contribution,并委托 TransformClipMixer 合成当前帧输出。
6
+ */
3
7
  export declare class TransformMixerPlayable extends TrackMixerPlayable {
8
+ private readonly clipMixer;
9
+ dispose(): void;
4
10
  evaluate(context: FrameContext): void;
5
11
  }
@@ -13,6 +13,14 @@ export type ItemBasicTransform = {
13
13
  scale: Vector3;
14
14
  path?: ValueGetter<Vector3>;
15
15
  };
16
+ export type TransformContribution = {
17
+ hasPosition: boolean;
18
+ position: Vector3;
19
+ hasRotation: boolean;
20
+ rotation: Euler;
21
+ hasScale: boolean;
22
+ scale: Vector3;
23
+ };
16
24
  /**
17
25
  * @since 2.0.0
18
26
  */
@@ -45,15 +53,22 @@ export declare class TransformPlayable extends Playable {
45
53
  gravity: Vector3;
46
54
  direction: Vector3;
47
55
  startSpeed: number;
56
+ pathGetter?: ValueGetter<Vector3>;
48
57
  data: TransformPlayableAssetData;
49
58
  private velocity;
50
- private boundObject;
59
+ private started;
60
+ private readonly contribution;
51
61
  start(): void;
52
62
  processFrame(context: FrameContext): void;
53
63
  /**
54
- * 应用时间轴K帧数据到对象
64
+ * 采样当前帧相对 base pose 的 transform contribution。
65
+ * 返回值为内部复用对象,调用方应在当前帧同步消费,不应缓存。
66
+ * @param basePosition - orbital position 计算 contribution 时使用的参考位置。
55
67
  */
68
+ getContribution(basePosition?: Vector3): TransformContribution;
69
+ private ensureStarted;
56
70
  private sampleAnimation;
71
+ private captureOriginalTransform;
57
72
  }
58
73
  export declare class TransformPlayableAsset extends PlayableAsset {
59
74
  transformAnimationData: TransformPlayableAssetData;
@@ -8,4 +8,5 @@ export * from './particle-track';
8
8
  export * from './property-track';
9
9
  export * from './vector-property-track';
10
10
  export * from './color-property-track';
11
+ export * from './sprite-property-track';
11
12
  export * from './object-binding-track';
@@ -0,0 +1,11 @@
1
+ import type { TrackMixerPlayable } from '../playables';
2
+ import { PropertyTrack } from './property-track';
3
+ /**
4
+ * Sprite 属性 K 帧 track。绑定到 SpriteComponent(updateAnimatedObject),
5
+ * mixer 取激活 clip 的 Sprite 采样值赋值 sprite 属性。
6
+ * path('sprite')为编辑器元数据,mixer 直接写 boundObject.sprite。
7
+ */
8
+ export declare class SpritePropertyTrack extends PropertyTrack {
9
+ createTrackMixer(): TrackMixerPlayable;
10
+ updateAnimatedObject(boundObject: object): object;
11
+ }
@@ -0,0 +1,33 @@
1
+ import { Vector3 } from '@galacean/effects-math/es/core/vector3';
2
+ import type { VFXItem } from '../../vfx-item';
3
+ import type { TransformContribution } from './playables/transform-playable';
4
+ /**
5
+ * 对 TransformTrack 当前激活的 Transform clip contribution 做帧内合成。
6
+ * position 与 rotation 使用增量语义,scale 使用乘子语义;结果由 flush 统一写回。
7
+ */
8
+ export declare class TransformClipMixer {
9
+ private basePose?;
10
+ private boundInstanceId?;
11
+ private hasContribution;
12
+ private hasPosition;
13
+ private hasRotation;
14
+ private hasScale;
15
+ private appliedPosition;
16
+ private appliedRotation;
17
+ private appliedScale;
18
+ private readonly outPos;
19
+ private readonly outRot;
20
+ private readonly outScale;
21
+ private readonly weightedRot;
22
+ captureBasePose(item: VFXItem): void;
23
+ /**
24
+ * orbital position 的 contribution 依赖 base position。
25
+ * 这里返回 mixer 持有的 base,确保采样和合成使用同一份参考姿态。
26
+ */
27
+ getBasePosition(): Vector3 | undefined;
28
+ resetFrame(): void;
29
+ addContribution(item: VFXItem, contribution: TransformContribution, weight: number): void;
30
+ flush(item: VFXItem): void;
31
+ dispose(): void;
32
+ private ensureBasePose;
33
+ }
@@ -174,8 +174,8 @@ export declare class Graphics {
174
174
  * `color` 作为乘色与白色字形 alpha 相乘,任意颜色都不会污染 atlas。
175
175
  *
176
176
  * 字体参数全部展开,避免调用方每帧创建临时 style 对象触发 GC
177
- * @param x - 文本左下角 X 坐标
178
- * @param y - 文本左下角 Y 坐标(对齐 baseline 上方 ascent 处)
177
+ * @param x - 文本左下角 X 坐标(首字 ink 起始处,含 padding 的 quad 会向左延伸)
178
+ * @param y - 文本左下角 Y 坐标(cell 底,含底部 padding;字形 ink 在其上方 padding+ascent 处)
179
179
  * @param text - 要绘制的文本内容,空串直接 return
180
180
  * @param fontSize - 字号(逻辑像素)
181
181
  * @param color - 乘色,默认白色,范围 0-1
@@ -21,20 +21,24 @@ export declare const ATLAS_SIZE = 512;
21
21
  /**
22
22
  * 单个字形在 atlas 中的位置 / 度量。
23
23
  *
24
- * `px/py/pw/ph` 是 atlas canvas 像素(scale 后)。
25
- * `width` 是逻辑像素宽度(= pw / FONT_SCALE),用于 quad + cursor advance
24
+ * `px/py/pw/ph` 是 atlas canvas 像素(scale 后,含四周 padding)。
25
+ * `advance` 是逻辑像素光标前进量(1x,不含 padding)— quad 宽度含 padding,
26
+ * 但相邻字只按 advance 前进,padding 区透明因此重叠无妨。
27
+ * `paddingLeft` 是逻辑像素左侧留白(1x),quad 起点左偏此量使字形 ink 落在 cursorX
26
28
  */
27
29
  export type GlyphInfo = {
28
30
  px: number;
29
31
  py: number;
30
32
  pw: number;
31
33
  ph: number;
32
- width: number;
34
+ advance: number;
35
+ paddingLeft: number;
33
36
  };
34
37
  /**
35
38
  * 一种字体(family + weight + style + size 唯一确定)对应一张 atlas。
36
39
  *
37
- * Skyline 风格 packer:行内堆字,行尾换行,行高 = (ascent+descent) * FONT_SCALE。
40
+ * Skyline 风格 packer:行内堆字,行尾换行,cell = ceil((fontHeight + padding*2) * 1),
41
+ * 所有字共用同一 cell 高与 baseline,实现同行 baseline 对齐。
38
42
  * atlas 满后 `ensureChar` 返回 null,调用方应跳过该字(不再扩页,v1 范围)。
39
43
  *
40
44
  * canvas 内容变更后需要 `uploadIfDirty` 重新上传到纹理 — 由调用方在使用纹理前主动触发,
@@ -47,18 +51,18 @@ export declare class GlyphAtlas {
47
51
  readonly canvas: HTMLCanvasElement;
48
52
  /** 与 canvas 绑定的纹理,内容变更后通过 updateSource 重传 */
49
53
  readonly texture: Texture;
50
- /** 行高(逻辑像素,= ascent + descent),所有字共享 */
54
+ /** cell 高(逻辑像素,含 padding),用于 quad 高度 */
51
55
  readonly lineHeight: number;
52
- /** 行 ascent(逻辑像素,baseline 距行顶距离) */
53
- readonly ascent: number;
54
- /** 行 descent(逻辑像素,baseline 距行底距离) */
55
- readonly descent: number;
56
56
  private readonly ctx;
57
57
  private readonly glyphs;
58
- /** 行高(像素,scale 后) */
59
- private readonly lineHeightPx;
60
- /** baseline 距行顶距离(像素,scale 后) */
61
- private readonly ascentPx;
58
+ /** baseline 距 cell 顶距离(像素,scale 后,含顶部 padding) */
59
+ private readonly baselinePx;
60
+ /** cell 高(像素,scale 后,含 padding) */
61
+ private readonly cellHPx;
62
+ /** 四周留白(像素,scale 后) */
63
+ private readonly paddingPx;
64
+ /** italic 字形 cell 宽额外放大倍数(防斜体越界重叠) */
65
+ private readonly italicScale;
62
66
  /** packer 状态:下一字开始的左上角像素位置 */
63
67
  private currentX;
64
68
  private currentY;
@@ -66,7 +70,11 @@ export declare class GlyphAtlas {
66
70
  private full;
67
71
  /** 自上次 upload 以来 canvas 是否有新字写入 */
68
72
  private dirty;
69
- constructor(engine: Engine, scaledFontString: string, ascent: number, descent: number);
73
+ constructor(engine: Engine, scaledFontString: string,
74
+ /** baseline 距 cell 顶距离(像素,scale 后,仅 ascent 部分,不含 padding) */
75
+ ascentPx: number,
76
+ /** baseline 距 cell 底距离(像素,scale 后,仅 descent 部分) */
77
+ descentPx: number, fontStyle: FontStyle);
70
78
  /**
71
79
  * 取(必要时渲染并打包)单字。返回 GlyphInfo 或 null(atlas 已满)
72
80
  */
package/dist/scene.d.ts CHANGED
@@ -67,13 +67,16 @@ export interface SceneLoadOptions {
67
67
  */
68
68
  variables?: spec.TemplateVariables;
69
69
  /**
70
- * 是否使用压缩纹理
71
- * @default undefined
70
+ * 是否优先使用压缩纹理
71
+ * 当资源存在且当前环境支持时使用,否则回退到普通图片
72
+ * 需要注册 KTX2 loader,例如 import '@galacean/effects-plugin-ktx2'
73
+ * @default true
72
74
  */
73
75
  useCompressedTexture?: boolean;
74
76
  /**
75
- * 是否使用 Hevc 视频
76
- * @default undefined
77
+ * 是否优先使用 Hevc 视频
78
+ * 当资源存在且当前环境支持时使用,否则回退到普通视频
79
+ * @default true
77
80
  */
78
81
  useHevcVideo?: boolean;
79
82
  /**
@@ -29,7 +29,7 @@ export interface Disposable {
29
29
  dispose(): void;
30
30
  }
31
31
  export interface RestoreHandler {
32
- restore(): void;
32
+ restore(): void | Promise<void>;
33
33
  }
34
34
  export interface LostHandler {
35
35
  lost(e: Event): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@galacean/effects-core",
3
- "version": "2.10.0-alpha.0",
3
+ "version": "2.10.0-alpha.1",
4
4
  "description": "Galacean Effects runtime core for the web",
5
5
  "module": "./dist/index.mjs",
6
6
  "main": "./dist/index.js",
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@galacean/effects-specification": "^2.8.1",
46
- "@galacean/effects-math": "1.1.0",
46
+ "@galacean/effects-math": "1.2.0",
47
47
  "flatbuffers": "24.3.25",
48
48
  "uuid": "9.0.1",
49
49
  "libtess": "1.2.2"