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

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 (47) hide show
  1. package/dist/components/base-render-component.d.ts +4 -0
  2. package/dist/components/frame-component.d.ts +10 -0
  3. package/dist/components/mesh-component.d.ts +1 -1
  4. package/dist/composition.d.ts +9 -8
  5. package/dist/engine.d.ts +43 -8
  6. package/dist/fallback/migration.d.ts +13 -0
  7. package/dist/index.js +3045 -1139
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +3032 -1140
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/material/types.d.ts +4 -0
  12. package/dist/material/utils.d.ts +4 -0
  13. package/dist/math/value-getters/index.d.ts +1 -0
  14. package/dist/math/value-getters/reference-curve.d.ts +19 -0
  15. package/dist/math/value-getters/value-getter-map.d.ts +5 -0
  16. package/dist/plugin-system.d.ts +6 -4
  17. package/dist/plugins/index.d.ts +1 -0
  18. package/dist/plugins/particle/particle-mesh.d.ts +4 -3
  19. package/dist/plugins/particle/particle-system.d.ts +7 -0
  20. package/dist/plugins/particle/trail-mesh.d.ts +4 -2
  21. package/dist/plugins/plugin.d.ts +14 -0
  22. package/dist/plugins/shape/shape-component.d.ts +1 -0
  23. package/dist/plugins/sprite/sprite-item.d.ts +32 -5
  24. package/dist/plugins/sprite/sprite.d.ts +42 -0
  25. package/dist/plugins/text/index.d.ts +1 -0
  26. package/dist/plugins/text/line-break.d.ts +29 -0
  27. package/dist/plugins/timeline/playable-assets/index.d.ts +1 -0
  28. package/dist/plugins/timeline/playable-assets/sprite-property-playable-asset.d.ts +23 -0
  29. package/dist/plugins/timeline/playables/index.d.ts +1 -0
  30. package/dist/plugins/timeline/playables/sprite-property-mixer-playable.d.ts +11 -0
  31. package/dist/plugins/timeline/playables/transform-mixer-playable.d.ts +6 -0
  32. package/dist/plugins/timeline/playables/transform-playable.d.ts +17 -2
  33. package/dist/plugins/timeline/tracks/index.d.ts +1 -0
  34. package/dist/plugins/timeline/tracks/sprite-property-track.d.ts +11 -0
  35. package/dist/plugins/timeline/transform-clip-mixer.d.ts +33 -0
  36. package/dist/render/buffer.d.ts +33 -0
  37. package/dist/render/data-buffer.d.ts +39 -0
  38. package/dist/render/geometry.d.ts +72 -94
  39. package/dist/render/gpu-capability.d.ts +2 -0
  40. package/dist/render/graphics.d.ts +3 -2
  41. package/dist/render/index.d.ts +3 -0
  42. package/dist/render/shader.d.ts +2 -1
  43. package/dist/render/text-cache.d.ts +22 -14
  44. package/dist/render/vertex-buffer.d.ts +72 -0
  45. package/dist/scene.d.ts +7 -4
  46. package/dist/utils/index.d.ts +1 -1
  47. package/package.json +2 -2
@@ -1,26 +1,28 @@
1
- import type * as spec from '@galacean/effects-specification';
1
+ import * as spec from '@galacean/effects-specification';
2
2
  import type { Engine } from '../engine';
3
3
  import { EffectsObject } from '../effects-object';
4
- export declare const BYTES_TYPE_MAP: Record<string, number>;
5
- /**
6
- * Geometry 的绘制模式
7
- */
8
- export type GeometryDrawMode = WebGLRenderingContext['POINTS'] | WebGLRenderingContext['TRIANGLES'] | WebGLRenderingContext['TRIANGLE_STRIP'] | WebGLRenderingContext['TRIANGLE_FAN'] | WebGLRenderingContext['LINES'] | WebGLRenderingContext['LINE_STRIP'] | WebGLRenderingContext['LINE_LOOP'];
4
+ import { Buffer } from './buffer';
5
+ import type { DataBuffer, IndexData, IndicesArray } from './data-buffer';
6
+ import { VertexBuffer } from './vertex-buffer';
7
+ import type { ShaderVariant } from './shader';
8
+ export type GeometryDrawMode = number;
9
9
  export type Attribute = spec.AttributeWithData | spec.AttributeWithDataPointer | spec.AttributeWithType | spec.AttributeWithDataSource;
10
10
  export interface GeometryProps {
11
11
  name?: string;
12
12
  attributes: Record<string, Attribute>;
13
13
  indices?: {
14
- data: spec.TypedArray;
15
- releasable?: boolean;
14
+ data: IndexData;
16
15
  };
17
16
  mode?: GeometryDrawMode;
18
17
  drawCount?: number;
19
18
  drawStart?: number;
20
19
  instanceCount?: number;
21
- bufferUsage?: WebGLRenderingContext['STATIC_DRAW'] | WebGLRenderingContext['DYNAMIC_DRAW'];
22
20
  /**
23
- * 粒子最大数量,适用于无法更新 GPU 缓存长度的引擎接入
21
+ * 顶点和索引缓冲区的使用方式,默认使用静态缓冲区。
22
+ */
23
+ bufferUsage?: number;
24
+ /**
25
+ * 为初始空缓冲区预留的最大顶点数量。
24
26
  */
25
27
  maxVertex?: number;
26
28
  }
@@ -30,93 +32,69 @@ export interface SkinProps {
30
32
  inverseBindMatrices?: number[];
31
33
  }
32
34
  /**
33
- * Geometry 抽象类
35
+ * 几何数据、属性布局和绘制范围的后端无关实现。
34
36
  */
35
- export declare abstract class Geometry extends EffectsObject {
36
- /**
37
- * Geometry 的名称
38
- */
37
+ export declare class Geometry extends EffectsObject {
38
+ static create: (engine: Engine, props?: GeometryProps) => Geometry;
39
39
  name: string;
40
- /**
41
- * 子网格数据
42
- */
43
40
  subMeshes: spec.SubMesh[];
44
- /**
45
- * Geometry 创建函数
46
- */
47
- static create: (engine: Engine, opts?: GeometryProps) => Geometry;
48
- /**
49
- * 获取 Geometry 的 attribute 数据。
50
- * @param name - attribute 名称
51
- */
52
- abstract getAttributeData(name: string): spec.TypedArray | undefined;
53
- /**
54
- * 设置 Geometry 的 attribute 数据。
55
- * @param name - attribute 名称
56
- * @param data - 要设置的 attribute 数据
57
- */
58
- abstract setAttributeData(name: string, data: spec.TypedArray): void;
59
- /**
60
- * 设置 attribute 的部分数据,当 attribute 数据只有部分更新时,可调用此函数。
61
- * @param name - attribute 名称
62
- * @param offset - 更新数据在 attribute 数组的起始位置 index
63
- * @param data - 要设置的 attribute 数据
64
- */
65
- abstract setAttributeSubData(name: string, offset: number, data: spec.TypedArray): void;
66
- /**
67
- * 获取 attribute 的步长
68
- * @param name - attribute 名称
69
- */
70
- abstract getAttributeStride(name: string): number;
71
- /**
72
- * 获取当前 Geometry 所有的 attribute 名称。
73
- */
74
- abstract getAttributeNames(): string[];
75
- /**
76
- * 获取当前 Geometry 的 indices 数据。
77
- */
78
- abstract getIndexData(): spec.TypedArray | undefined;
79
- /**
80
- * 设置 Geometry indices 数据。
81
- * @param data - 要设置的 indices 数据
82
- */
83
- abstract setIndexData(data: spec.TypedArray): void;
84
- /**
85
- * 设置 indices 的部分数据,当 indices 数据只有部分更新时,可调用此函数。
86
- * @param offset - 更新数据在 indices 数组的起始位置 index
87
- * @param data - 要设置的 indices 数据
88
- */
89
- abstract setIndexSubData(offset: number, data: spec.TypedArray): void;
90
- /**
91
- * 设置 Geometry 绘制的 drawStart
92
- * @param value 要设置的 drawStart 值
93
- */
94
- abstract setDrawStart(count: number): void;
95
- /**
96
- * 获取当前 Geometry 的 drawStart
97
- */
98
- abstract getDrawStart(): number;
99
- /**
100
- * 设置 Geometry 绘制的 drawCount。
101
- * @param count 要设置的 drawCount 值
102
- */
103
- abstract setDrawCount(count: number): void;
104
- /**
105
- * 获取当前 Geometry 的 drawcount
106
- */
107
- abstract getDrawCount(): number;
108
- /**
109
- * 获取当前 Geometry 关联的蒙皮数据
110
- */
111
- abstract getSkinProps(): SkinProps;
112
- /**
113
- * 初始化 GPU 资源
114
- * @override
115
- */
41
+ /** @hide */
42
+ mode: GeometryDrawMode;
43
+ /** @hide */
44
+ instanceCount: number;
45
+ private vertexBuffers;
46
+ private indices;
47
+ private drawCount;
48
+ private drawStart;
49
+ private skin;
50
+ private indexBuffer?;
51
+ private disposed;
52
+ private initialized;
53
+ private options?;
54
+ private bufferUsage;
55
+ private vertexArrayObjects?;
56
+ /** @hide */
57
+ constructor(engine: Engine, props?: GeometryProps);
58
+ /** @hide */
59
+ isDisposed(): boolean;
60
+ /** @hide */
61
+ getVertexBuffer(name: string): VertexBuffer | undefined;
62
+ /** @hide */
63
+ setVerticesBuffer(vertexBuffer: VertexBuffer, disposeExistingBuffer?: boolean): void;
64
+ /** @hide */
65
+ getAttributeBuffer(name: string): Buffer | undefined;
66
+ getAttributeData(name: string): spec.TypedArray | undefined;
67
+ setAttributeData(name: string, data: spec.TypedArray): void;
68
+ setAttributeSubData(name: string, offset: number, data: spec.TypedArray): void;
69
+ getAttributeStride(name: string): number;
70
+ getAttributeNames(): string[];
71
+ /** @hide */
72
+ getIndexBuffer(): DataBuffer | undefined;
73
+ getIndexData(): IndexData;
74
+ /** @hide */
75
+ getIndexType(): number;
76
+ setIndexData(data: IndicesArray): void;
77
+ setIndexSubData(offset: number, data: IndicesArray): void;
78
+ setDrawStart(start: number): void;
79
+ getDrawStart(): number;
80
+ setDrawCount(count: number): void;
81
+ getDrawCount(): number;
82
+ getSkinProps(): SkinProps;
83
+ /** @hide */
84
+ bind(shader: ShaderVariant): void;
85
+ private releaseVertexArrayObject;
116
86
  initialize(): void;
117
- /**
118
- * 几何数据刷新
119
- */
120
87
  flush(): void;
88
+ /** @hide */
89
+ restore(): void;
90
+ fromData(data: spec.GeometryData): void;
91
+ dispose(): void;
92
+ private processProps;
93
+ private releaseCurrentBuffers;
94
+ private disposeVertexArrayObjects;
95
+ private createIndexBuffer;
96
+ private releaseIndexBuffer;
97
+ private forEachVertexBuffer;
121
98
  }
122
- export declare function generateEmptyTypedArray(type: number): Float32Array | Int16Array | Int32Array;
99
+ export declare const BYTES_TYPE_MAP: Record<string, number>;
100
+ export declare function generateEmptyTypedArray(type: number): spec.TypedArray;
@@ -14,6 +14,8 @@ export interface GPUCapabilityDetail {
14
14
  maxTextureAnisotropy: number;
15
15
  shaderTextureLod: boolean;
16
16
  instanceDraw?: boolean;
17
+ /** @hide */
18
+ vertexArrayObject?: boolean;
17
19
  ktx2Support: boolean;
18
20
  drawBuffers?: boolean;
19
21
  asyncShaderCompile: boolean;
@@ -62,6 +62,7 @@ export declare class Graphics {
62
62
  * 提交当前累积的顶点到 renderer,清空缓冲(批次内部 flush 不重置 batchType)
63
63
  */
64
64
  private flushBatch;
65
+ private updateAttributeData;
65
66
  /**
66
67
  * 线段顶点按顺序连接 (p0-p1, p1-p2, p2-p3, ...)
67
68
  * @param points - 点数组,格式 [x1,y1,x2,y2,...],至少需要2个点(4个数值)
@@ -174,8 +175,8 @@ export declare class Graphics {
174
175
  * `color` 作为乘色与白色字形 alpha 相乘,任意颜色都不会污染 atlas。
175
176
  *
176
177
  * 字体参数全部展开,避免调用方每帧创建临时 style 对象触发 GC
177
- * @param x - 文本左下角 X 坐标
178
- * @param y - 文本左下角 Y 坐标(对齐 baseline 上方 ascent 处)
178
+ * @param x - 文本左下角 X 坐标(首字 ink 起始处,含 padding 的 quad 会向左延伸)
179
+ * @param y - 文本左下角 Y 坐标(cell 底,含底部 padding;字形 ink 在其上方 padding+ascent 处)
179
180
  * @param text - 要绘制的文本内容,空串直接 return
180
181
  * @param fontSize - 字号(逻辑像素)
181
182
  * @param color - 乘色,默认白色,范围 0-1
@@ -7,6 +7,9 @@ export * from './shader';
7
7
  export * from './gpu-capability';
8
8
  export * from './mesh';
9
9
  export * from './geometry';
10
+ export * from './data-buffer';
11
+ export * from './buffer';
12
+ export * from './vertex-buffer';
10
13
  export * from './framebuffer';
11
14
  export * from './renderer';
12
15
  export * from './graphics';
@@ -57,8 +57,9 @@ export interface SharedShaderWithSource {
57
57
  export type ShaderWithSource = SharedShaderWithSource;
58
58
  export declare abstract class ShaderVariant extends EffectsObject {
59
59
  readonly source: ShaderWithSource;
60
+ readonly key: string;
60
61
  shader: Shader;
61
- constructor(engine: Engine, source: ShaderWithSource);
62
+ constructor(engine: Engine, source: ShaderWithSource, key: string);
62
63
  initialize(): void;
63
64
  abstract setFloat(name: string, value: number): void;
64
65
  abstract setInt(name: string, value: number): void;
@@ -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
  */
@@ -0,0 +1,72 @@
1
+ import type * as spec from '@galacean/effects-specification';
2
+ import type { Engine } from '../engine';
3
+ import type { Disposable } from '../utils';
4
+ import { Buffer } from './buffer';
5
+ import type { DataArray, DataBuffer } from './data-buffer';
6
+ import { BufferDataType } from './data-buffer';
7
+ export interface VertexBufferProps {
8
+ updatable?: boolean;
9
+ postponeInternalCreation?: boolean;
10
+ stride?: number;
11
+ instanced?: boolean;
12
+ offset?: number;
13
+ size?: number;
14
+ type?: number;
15
+ normalized?: boolean;
16
+ useBytes?: boolean;
17
+ divisor?: number;
18
+ takeBufferOwnership?: boolean;
19
+ label?: string;
20
+ }
21
+ /**
22
+ * 描述一个顶点属性如何读取共享缓冲区。
23
+ */
24
+ export declare class VertexBuffer implements Disposable {
25
+ static readonly PositionKind = "aPos";
26
+ static readonly NormalKind = "aNormal";
27
+ static readonly TangentKind = "aTangent";
28
+ static readonly UVKind = "aUV";
29
+ static readonly UV2Kind = "aUV2";
30
+ static readonly UV3Kind = "aUV3";
31
+ static readonly UV4Kind = "aUV4";
32
+ static readonly UV5Kind = "aUV5";
33
+ static readonly UV6Kind = "aUV6";
34
+ static readonly ColorKind = "aColor";
35
+ static readonly JointsKind = "aJoints";
36
+ static readonly WeightsKind = "aWeights";
37
+ static readonly BYTE = BufferDataType.Byte;
38
+ static readonly UNSIGNED_BYTE = BufferDataType.UnsignedByte;
39
+ static readonly SHORT = BufferDataType.Short;
40
+ static readonly UNSIGNED_SHORT = BufferDataType.UnsignedShort;
41
+ static readonly INT = BufferDataType.Int;
42
+ static readonly UNSIGNED_INT = BufferDataType.UnsignedInt;
43
+ static readonly FLOAT = BufferDataType.Float;
44
+ readonly byteStride: number;
45
+ readonly byteOffset: number;
46
+ readonly normalized: boolean;
47
+ readonly type: spec.BufferType;
48
+ readonly engine: Engine;
49
+ private readonly kind;
50
+ private readonly size;
51
+ private _isDisposed;
52
+ private instanced;
53
+ private _instanceDivisor;
54
+ constructor(engine: Engine, data: DataArray | Buffer | DataBuffer, kind: string, props?: VertexBufferProps);
55
+ get isDisposed(): boolean;
56
+ get instanceDivisor(): number;
57
+ set instanceDivisor(value: number);
58
+ getKind(): string;
59
+ isUpdatable(): boolean;
60
+ getData(): DataArray | undefined;
61
+ getBuffer(): DataBuffer | undefined;
62
+ getWrapperBuffer(): Buffer;
63
+ getStrideSize(): number;
64
+ getOffset(): number;
65
+ getSize(sizeInBytes?: boolean): number;
66
+ getIsInstanced(): boolean;
67
+ getInstanceDivisor(): number;
68
+ create(data?: DataArray): void;
69
+ update(data: DataArray): void;
70
+ updateDirectly(data: DataArray, offset: number, useBytes?: boolean): void;
71
+ dispose(): void;
72
+ }
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.2",
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"