@luma.gl/engine 9.0.0-alpha.3 → 9.0.0-alpha.31
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.
- package/LICENSE +2 -1
- package/dist/animation/key-frames.d.ts +1 -1
- package/dist/animation/key-frames.d.ts.map +1 -1
- package/dist/animation/key-frames.js +0 -20
- package/dist/animation/key-frames.js.map +1 -1
- package/dist/animation/timeline.d.ts +5 -5
- package/dist/animation/timeline.d.ts.map +1 -1
- package/dist/animation/timeline.js +0 -30
- package/dist/animation/timeline.js.map +1 -1
- package/dist/{lib → animation-loop}/animation-loop.d.ts +28 -29
- package/dist/animation-loop/animation-loop.d.ts.map +1 -0
- package/dist/{lib → animation-loop}/animation-loop.js +96 -175
- package/dist/animation-loop/animation-loop.js.map +1 -0
- package/dist/{lib → animation-loop}/animation-props.d.ts +7 -7
- package/dist/animation-loop/animation-props.d.ts.map +1 -0
- package/dist/animation-loop/animation-props.js.map +1 -0
- package/dist/animation-loop/make-animation-loop.d.ts +6 -0
- package/dist/animation-loop/make-animation-loop.d.ts.map +1 -0
- package/dist/animation-loop/make-animation-loop.js +28 -0
- package/dist/animation-loop/make-animation-loop.js.map +1 -0
- package/dist/animation-loop/render-loop.d.ts +23 -0
- package/dist/animation-loop/render-loop.d.ts.map +1 -0
- package/dist/animation-loop/render-loop.js +7 -0
- package/dist/animation-loop/render-loop.js.map +1 -0
- package/dist/dist.dev.js +14977 -0
- package/dist/geometries/cone-geometry.d.ts +1 -1
- package/dist/geometries/cone-geometry.d.ts.map +1 -1
- package/dist/geometries/cone-geometry.js +6 -5
- package/dist/geometries/cone-geometry.js.map +1 -1
- package/dist/geometries/cube-geometry.d.ts +2 -2
- package/dist/geometries/cube-geometry.d.ts.map +1 -1
- package/dist/geometries/cube-geometry.js +15 -8
- package/dist/geometries/cube-geometry.js.map +1 -1
- package/dist/geometries/cylinder-geometry.d.ts +1 -1
- package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
- package/dist/geometries/cylinder-geometry.js +6 -5
- package/dist/geometries/cylinder-geometry.js.map +1 -1
- package/dist/geometries/ico-sphere-geometry.d.ts +2 -2
- package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/ico-sphere-geometry.js +9 -18
- package/dist/geometries/ico-sphere-geometry.js.map +1 -1
- package/dist/geometries/plane-geometry.d.ts +2 -2
- package/dist/geometries/plane-geometry.d.ts.map +1 -1
- package/dist/geometries/plane-geometry.js +10 -19
- package/dist/geometries/plane-geometry.js.map +1 -1
- package/dist/geometries/sphere-geometry.d.ts +2 -2
- package/dist/geometries/sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/sphere-geometry.js +9 -13
- package/dist/geometries/sphere-geometry.js.map +1 -1
- package/dist/geometries/truncated-cone-geometry.d.ts +2 -2
- package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
- package/dist/geometries/truncated-cone-geometry.js +9 -14
- package/dist/geometries/truncated-cone-geometry.js.map +1 -1
- package/dist/geometry/geometry-table.d.ts +2 -2
- package/dist/geometry/geometry-table.d.ts.map +1 -1
- package/dist/geometry/geometry-table.js.map +1 -1
- package/dist/geometry/geometry-utils.d.ts.map +1 -1
- package/dist/geometry/geometry-utils.js +0 -9
- package/dist/geometry/geometry-utils.js.map +1 -1
- package/dist/geometry/geometry.d.ts +35 -58
- package/dist/geometry/geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.js +26 -89
- package/dist/geometry/geometry.js.map +1 -1
- package/dist/geometry/primitive-utils.js.map +1 -1
- package/dist/index.cjs +2576 -0
- package/dist/index.d.ts +18 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -13
- package/dist/index.js.map +1 -1
- package/dist/lib/clip-space.d.ts +8 -0
- package/dist/lib/clip-space.d.ts.map +1 -1
- package/dist/lib/clip-space.js +36 -1
- package/dist/lib/clip-space.js.map +1 -1
- package/dist/lib/pipeline-factory.d.ts +19 -14
- package/dist/lib/pipeline-factory.d.ts.map +1 -1
- package/dist/lib/pipeline-factory.js +52 -63
- package/dist/lib/pipeline-factory.js.map +1 -1
- package/dist/{lib → model}/model-utils.d.ts +2 -2
- package/dist/model/model-utils.d.ts.map +1 -0
- package/dist/{lib → model}/model-utils.js +3 -8
- package/dist/model/model-utils.js.map +1 -0
- package/dist/model/model.d.ts +67 -0
- package/dist/model/model.d.ts.map +1 -0
- package/dist/{lib → model}/model.js +59 -76
- package/dist/model/model.js.map +1 -0
- package/dist/scenegraph/group-node.d.ts +21 -0
- package/dist/scenegraph/group-node.d.ts.map +1 -0
- package/dist/scenegraph/group-node.js +95 -0
- package/dist/scenegraph/group-node.js.map +1 -0
- package/dist/scenegraph/model-node.d.ts +18 -0
- package/dist/scenegraph/model-node.d.ts.map +1 -0
- package/dist/scenegraph/model-node.js +29 -0
- package/dist/scenegraph/model-node.js.map +1 -0
- package/dist/scenegraph/scenegraph-node.d.ts +56 -0
- package/dist/scenegraph/scenegraph-node.d.ts.map +1 -0
- package/dist/scenegraph/scenegraph-node.js +142 -0
- package/dist/scenegraph/scenegraph-node.js.map +1 -0
- package/dist/transform/transform.d.ts +98 -0
- package/dist/transform/transform.d.ts.map +1 -0
- package/dist/transform/transform.js +67 -0
- package/dist/transform/transform.js.map +1 -0
- package/dist.min.js +314 -0
- package/package.json +22 -12
- package/src/animation/timeline.ts +2 -2
- package/src/{lib → animation-loop}/animation-loop.ts +115 -97
- package/src/{lib → animation-loop}/animation-props.ts +6 -5
- package/src/animation-loop/make-animation-loop.ts +44 -0
- package/src/animation-loop/render-loop.ts +23 -0
- package/src/geometries/cone-geometry.ts +1 -1
- package/src/geometries/cube-geometry.ts +6 -3
- package/src/geometries/cylinder-geometry.ts +2 -2
- package/src/geometries/ico-sphere-geometry.ts +7 -6
- package/src/geometries/plane-geometry.ts +5 -4
- package/src/geometries/sphere-geometry.ts +4 -3
- package/src/geometries/truncated-cone-geometry.ts +4 -3
- package/src/geometry/geometry-table.ts +1 -1
- package/src/geometry/geometry-utils.ts +3 -3
- package/src/geometry/geometry.ts +72 -115
- package/src/index.ts +28 -12
- package/src/lib/clip-space.ts +17 -15
- package/src/lib/pipeline-factory.ts +60 -50
- package/src/{lib → model}/model-utils.ts +5 -4
- package/src/model/model.ts +230 -0
- package/src/scenegraph/group-node.ts +103 -0
- package/src/scenegraph/model-node.ts +50 -0
- package/src/scenegraph/scenegraph-node.ts +204 -0
- package/src/transform/transform.ts +246 -0
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/bundle.js +0 -5
- package/dist/bundle.js.map +0 -1
- package/dist/lib/animation-loop.d.ts.map +0 -1
- package/dist/lib/animation-loop.js.map +0 -1
- package/dist/lib/animation-props.d.ts.map +0 -1
- package/dist/lib/animation-props.js.map +0 -1
- package/dist/lib/model-utils.d.ts.map +0 -1
- package/dist/lib/model-utils.js.map +0 -1
- package/dist/lib/model.d.ts +0 -41
- package/dist/lib/model.d.ts.map +0 -1
- package/dist/lib/model.js.map +0 -1
- package/dist/lib/render-loop.d.ts +0 -14
- package/dist/lib/render-loop.d.ts.map +0 -1
- package/dist/lib/render-loop.js +0 -49
- package/dist/lib/render-loop.js.map +0 -1
- package/src/bundle.ts +0 -4
- package/src/lib/model.ts +0 -179
- package/src/lib/render-loop.ts +0 -58
- /package/dist/{lib → animation-loop}/animation-props.js +0 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { assert, uid } from '@luma.gl/core';
|
|
3
|
+
import { Vector3, Matrix4 } from '@math.gl/core';
|
|
4
|
+
export class ScenegraphNode {
|
|
5
|
+
constructor() {
|
|
6
|
+
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
7
|
+
_defineProperty(this, "id", void 0);
|
|
8
|
+
_defineProperty(this, "matrix", new Matrix4());
|
|
9
|
+
_defineProperty(this, "display", true);
|
|
10
|
+
_defineProperty(this, "position", new Vector3());
|
|
11
|
+
_defineProperty(this, "rotation", new Vector3());
|
|
12
|
+
_defineProperty(this, "scale", new Vector3(1, 1, 1));
|
|
13
|
+
_defineProperty(this, "userData", {});
|
|
14
|
+
_defineProperty(this, "props", {});
|
|
15
|
+
const {
|
|
16
|
+
id
|
|
17
|
+
} = props;
|
|
18
|
+
this.id = id || uid(this.constructor.name);
|
|
19
|
+
this._setScenegraphNodeProps(props);
|
|
20
|
+
}
|
|
21
|
+
getBounds() {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
destroy() {}
|
|
25
|
+
delete() {
|
|
26
|
+
this.destroy();
|
|
27
|
+
}
|
|
28
|
+
setProps(props) {
|
|
29
|
+
this._setScenegraphNodeProps(props);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
toString() {
|
|
33
|
+
return "{type: ScenegraphNode, id: ".concat(this.id, ")}");
|
|
34
|
+
}
|
|
35
|
+
setPosition(position) {
|
|
36
|
+
assert(position.length === 3, 'setPosition requires vector argument');
|
|
37
|
+
this.position = position;
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
setRotation(rotation) {
|
|
41
|
+
assert(rotation.length === 3, 'setRotation requires vector argument');
|
|
42
|
+
this.rotation = rotation;
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
setScale(scale) {
|
|
46
|
+
assert(scale.length === 3, 'setScale requires vector argument');
|
|
47
|
+
this.scale = scale;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
setMatrix(matrix) {
|
|
51
|
+
let copyMatrix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
52
|
+
if (copyMatrix) {
|
|
53
|
+
this.matrix.copy(matrix);
|
|
54
|
+
} else {
|
|
55
|
+
this.matrix = matrix;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
setMatrixComponents(components) {
|
|
59
|
+
const {
|
|
60
|
+
position,
|
|
61
|
+
rotation,
|
|
62
|
+
scale,
|
|
63
|
+
update = true
|
|
64
|
+
} = components;
|
|
65
|
+
if (position) {
|
|
66
|
+
this.setPosition(position);
|
|
67
|
+
}
|
|
68
|
+
if (rotation) {
|
|
69
|
+
this.setRotation(rotation);
|
|
70
|
+
}
|
|
71
|
+
if (scale) {
|
|
72
|
+
this.setScale(scale);
|
|
73
|
+
}
|
|
74
|
+
if (update) {
|
|
75
|
+
this.updateMatrix();
|
|
76
|
+
}
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
updateMatrix() {
|
|
80
|
+
const pos = this.position;
|
|
81
|
+
const rot = this.rotation;
|
|
82
|
+
const scale = this.scale;
|
|
83
|
+
this.matrix.identity();
|
|
84
|
+
this.matrix.translate(pos);
|
|
85
|
+
this.matrix.rotateXYZ(rot);
|
|
86
|
+
this.matrix.scale(scale);
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
update() {
|
|
90
|
+
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
91
|
+
const {
|
|
92
|
+
position,
|
|
93
|
+
rotation,
|
|
94
|
+
scale
|
|
95
|
+
} = options;
|
|
96
|
+
if (position) {
|
|
97
|
+
this.setPosition(position);
|
|
98
|
+
}
|
|
99
|
+
if (rotation) {
|
|
100
|
+
this.setRotation(rotation);
|
|
101
|
+
}
|
|
102
|
+
if (scale) {
|
|
103
|
+
this.setScale(scale);
|
|
104
|
+
}
|
|
105
|
+
this.updateMatrix();
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
getCoordinateUniforms(viewMatrix, modelMatrix) {
|
|
109
|
+
assert(viewMatrix);
|
|
110
|
+
modelMatrix = modelMatrix || this.matrix;
|
|
111
|
+
const worldMatrix = new Matrix4(viewMatrix).multiplyRight(modelMatrix);
|
|
112
|
+
const worldInverse = worldMatrix.invert();
|
|
113
|
+
const worldInverseTranspose = worldInverse.transpose();
|
|
114
|
+
return {
|
|
115
|
+
viewMatrix,
|
|
116
|
+
modelMatrix,
|
|
117
|
+
objectMatrix: modelMatrix,
|
|
118
|
+
worldMatrix,
|
|
119
|
+
worldInverseMatrix: worldInverse,
|
|
120
|
+
worldInverseTransposeMatrix: worldInverseTranspose
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
_setScenegraphNodeProps(props) {
|
|
124
|
+
if ('display' in props) {
|
|
125
|
+
this.display = props.display;
|
|
126
|
+
}
|
|
127
|
+
if ('position' in props) {
|
|
128
|
+
this.setPosition(props.position);
|
|
129
|
+
}
|
|
130
|
+
if ('rotation' in props) {
|
|
131
|
+
this.setRotation(props.rotation);
|
|
132
|
+
}
|
|
133
|
+
if ('scale' in props) {
|
|
134
|
+
this.setScale(props.scale);
|
|
135
|
+
}
|
|
136
|
+
if ('matrix' in props) {
|
|
137
|
+
this.setMatrix(props.matrix);
|
|
138
|
+
}
|
|
139
|
+
Object.assign(this.props, props);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=scenegraph-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenegraph-node.js","names":["assert","uid","Vector3","Matrix4","ScenegraphNode","constructor","props","arguments","length","undefined","_defineProperty","id","name","_setScenegraphNodeProps","getBounds","destroy","delete","setProps","toString","concat","setPosition","position","setRotation","rotation","setScale","scale","setMatrix","matrix","copyMatrix","copy","setMatrixComponents","components","update","updateMatrix","pos","rot","identity","translate","rotateXYZ","options","getCoordinateUniforms","viewMatrix","modelMatrix","worldMatrix","multiplyRight","worldInverse","invert","worldInverseTranspose","transpose","objectMatrix","worldInverseMatrix","worldInverseTransposeMatrix","display","Object","assign"],"sources":["../../src/scenegraph/scenegraph-node.ts"],"sourcesContent":["import {assert, uid, NumericArray} from '@luma.gl/core';\nimport {Vector3, Matrix4} from '@math.gl/core';\n\n/** Properties for creating a new Scenegraph */\nexport type ScenegraphNodeProps = {\n id?: string;\n /** whether to display the object at all */\n display?: boolean;\n matrix?: NumericArray;\n position?: NumericArray;\n rotation?: NumericArray;\n scale?: NumericArray;\n update?: boolean\n};\n\nexport class ScenegraphNode {\n readonly id: string;\n matrix: Matrix4 = new Matrix4();\n\n display = true; \n position = new Vector3();\n rotation = new Vector3();\n scale = new Vector3(1, 1, 1);\n userData: Record<string, unknown> = {};\n\n props: ScenegraphNodeProps = {};\n\n constructor(props: ScenegraphNodeProps = {}) {\n const {id} = props;\n\n this.id = id || uid(this.constructor.name);\n\n this._setScenegraphNodeProps(props);\n }\n\n getBounds(): [number[], number[]] | null {\n return null;\n }\n\n destroy(): void {}\n\n /** @deprecated use .destroy() */\n delete(): void {\n this.destroy();\n }\n setProps(props: ScenegraphNodeProps): this {\n this._setScenegraphNodeProps(props);\n return this;\n }\n\n toString(): string {\n return `{type: ScenegraphNode, id: ${this.id})}`;\n }\n\n setPosition(position: any): this {\n assert(position.length === 3, 'setPosition requires vector argument');\n this.position = position;\n return this;\n }\n\n setRotation(rotation: any): this {\n assert(rotation.length === 3, 'setRotation requires vector argument');\n this.rotation = rotation;\n return this;\n }\n\n setScale(scale: any): this {\n assert(scale.length === 3, 'setScale requires vector argument');\n this.scale = scale;\n return this;\n }\n\n setMatrix(matrix: any, copyMatrix: boolean = true): void {\n if (copyMatrix) {\n this.matrix.copy(matrix);\n } else {\n this.matrix = matrix;\n }\n }\n\n setMatrixComponents(components: {\n position?: any;\n rotation?: any;\n scale?: any;\n update?: boolean;\n }): this {\n const {position, rotation, scale, update = true} = components;\n if (position) {\n this.setPosition(position);\n }\n if (rotation) {\n this.setRotation(rotation);\n }\n if (scale) {\n this.setScale(scale);\n }\n if (update) {\n this.updateMatrix();\n }\n return this;\n }\n\n updateMatrix(): this {\n const pos = this.position;\n const rot = this.rotation;\n const scale = this.scale;\n\n this.matrix.identity();\n this.matrix.translate(pos);\n this.matrix.rotateXYZ(rot);\n this.matrix.scale(scale);\n return this;\n }\n\n update(options: {position?: any; rotation?: any; scale?: any} = {}): this {\n const {position, rotation, scale} = options;\n if (position) {\n this.setPosition(position);\n }\n if (rotation) {\n this.setRotation(rotation);\n }\n if (scale) {\n this.setScale(scale);\n }\n this.updateMatrix();\n return this;\n }\n\n getCoordinateUniforms(\n viewMatrix: any,\n modelMatrix?: any\n ): {\n viewMatrix: any;\n modelMatrix: any;\n objectMatrix: any;\n worldMatrix: any;\n worldInverseMatrix: any;\n worldInverseTransposeMatrix: any;\n } {\n // TODO - solve multiple class problem\n // assert(viewMatrix instanceof Matrix4);\n assert(viewMatrix);\n modelMatrix = modelMatrix || this.matrix;\n const worldMatrix = new Matrix4(viewMatrix).multiplyRight(modelMatrix);\n const worldInverse = worldMatrix.invert();\n const worldInverseTranspose = worldInverse.transpose();\n\n return {\n viewMatrix,\n modelMatrix,\n objectMatrix: modelMatrix,\n worldMatrix,\n worldInverseMatrix: worldInverse,\n worldInverseTransposeMatrix: worldInverseTranspose\n };\n }\n\n // TODO - copied code, not yet vetted\n /*\n transform() {\n if (!this.parent) {\n this.endPosition.set(this.position);\n this.endRotation.set(this.rotation);\n this.endScale.set(this.scale);\n } else {\n const parent = this.parent;\n this.endPosition.set(this.position.add(parent.endPosition));\n this.endRotation.set(this.rotation.add(parent.endRotation));\n this.endScale.set(this.scale.add(parent.endScale));\n }\n\n const ch = this.children;\n for (let i = 0; i < ch.length; ++i) {\n ch[i].transform();\n }\n\n return this;\n }\n */\n\n _setScenegraphNodeProps(props: ScenegraphNodeProps): void {\n if ('display' in props) {\n this.display = props.display;\n }\n\n if ('position' in props) {\n this.setPosition(props.position);\n }\n if ('rotation' in props) {\n this.setRotation(props.rotation);\n }\n if ('scale' in props) {\n this.setScale(props.scale);\n }\n\n // Matrix overwrites other props\n if ('matrix' in props) {\n this.setMatrix(props.matrix);\n }\n\n Object.assign(this.props, props);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Device, Buffer, Texture, Framebuffer } from '@luma.gl/core';
|
|
2
|
+
import { WebGLDevice, GLParameters } from '@luma.gl/webgl';
|
|
3
|
+
type TransformFeedback = any;
|
|
4
|
+
/** Properties for creating Transforms */
|
|
5
|
+
export type TransformProps = {
|
|
6
|
+
id?: string;
|
|
7
|
+
vs?: string;
|
|
8
|
+
elementCount?: number;
|
|
9
|
+
sourceBuffers?: Record<string, Buffer>;
|
|
10
|
+
feedbackBuffers?: Record<string, string | Buffer | {
|
|
11
|
+
buffer: Buffer;
|
|
12
|
+
byteOffset?: number;
|
|
13
|
+
}>;
|
|
14
|
+
varyings?: string[];
|
|
15
|
+
feedbackMap?: Record<string, string>;
|
|
16
|
+
modules?: object[];
|
|
17
|
+
attributes?: Record<string, any>;
|
|
18
|
+
uniforms?: Record<string, any>;
|
|
19
|
+
defines?: Record<string, any>;
|
|
20
|
+
parameters?: GLParameters;
|
|
21
|
+
discard?: boolean;
|
|
22
|
+
isIndexed?: boolean;
|
|
23
|
+
inject?: Record<string, string>;
|
|
24
|
+
drawMode?: number;
|
|
25
|
+
framebuffer?: Framebuffer;
|
|
26
|
+
_sourceTextures?: Record<string, Texture>;
|
|
27
|
+
_targetTexture?: string | Texture;
|
|
28
|
+
_targetTextureVarying?: string;
|
|
29
|
+
_swapTexture?: string | null;
|
|
30
|
+
_fs?: string;
|
|
31
|
+
fs?: string;
|
|
32
|
+
};
|
|
33
|
+
/** Options that can be provided when running a Transform */
|
|
34
|
+
export type TransformRunOptions = {
|
|
35
|
+
framebuffer?: Framebuffer;
|
|
36
|
+
clearRenderTarget?: boolean;
|
|
37
|
+
uniforms?: Record<string, any>;
|
|
38
|
+
parameters?: Record<string, any>;
|
|
39
|
+
discard?: boolean;
|
|
40
|
+
};
|
|
41
|
+
/** Options that control drawing a Transform. Used by subclasses to return draw parameters */
|
|
42
|
+
export type TransformDrawOptions = {
|
|
43
|
+
attributes?: Record<string, any>;
|
|
44
|
+
framebuffer?: any;
|
|
45
|
+
uniforms?: object;
|
|
46
|
+
discard?: boolean;
|
|
47
|
+
parameters?: object;
|
|
48
|
+
transformFeedback?: any;
|
|
49
|
+
};
|
|
50
|
+
export type TransformBinding = {
|
|
51
|
+
sourceBuffers: Record<string, Buffer>;
|
|
52
|
+
sourceTextures: Record<string, Texture>;
|
|
53
|
+
feedbackBuffers?: Record<string, Buffer | {
|
|
54
|
+
buffer: Buffer;
|
|
55
|
+
}>;
|
|
56
|
+
transformFeedback?: TransformFeedback;
|
|
57
|
+
framebuffer?: Framebuffer;
|
|
58
|
+
targetTexture?: Texture;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Takes source and target buffers/textures and sets up the pipeline
|
|
62
|
+
*/
|
|
63
|
+
export declare class Transform {
|
|
64
|
+
/**
|
|
65
|
+
* Check if Transforms are supported (they are not under WebGL1)
|
|
66
|
+
* @todo differentiate writing to buffer vs not
|
|
67
|
+
*/
|
|
68
|
+
static isSupported(device: Device | WebGLRenderingContext): boolean;
|
|
69
|
+
readonly device: WebGLDevice;
|
|
70
|
+
readonly gl: WebGL2RenderingContext;
|
|
71
|
+
elementCount: number;
|
|
72
|
+
elementIDBuffer: Buffer | null;
|
|
73
|
+
constructor(device: Device | WebGLRenderingContext, props?: TransformProps);
|
|
74
|
+
/** Delete owned resources. */
|
|
75
|
+
destroy(): void;
|
|
76
|
+
/** @deprecated Use destroy*() */
|
|
77
|
+
delete(): void;
|
|
78
|
+
/** Run one transform loop. */
|
|
79
|
+
run(options?: TransformRunOptions): void;
|
|
80
|
+
/** swap resources if a map is provided */
|
|
81
|
+
swap(): void;
|
|
82
|
+
/** Return Buffer object for given varying name. */
|
|
83
|
+
getBuffer(varyingName: string): Buffer | null;
|
|
84
|
+
/** Return data either from Buffer or from Texture */
|
|
85
|
+
getData(options?: {
|
|
86
|
+
packed?: boolean;
|
|
87
|
+
varyingName?: string;
|
|
88
|
+
}): void;
|
|
89
|
+
/** Return framebuffer object if rendering to textures */
|
|
90
|
+
getFramebuffer(): Framebuffer | null;
|
|
91
|
+
/** Update some or all buffer/texture bindings. */
|
|
92
|
+
update(props: TransformProps): void;
|
|
93
|
+
_updateModelProps(props: TransformProps): TransformProps;
|
|
94
|
+
_buildResourceTransforms(props: TransformProps): void;
|
|
95
|
+
_updateDrawOptions(options: TransformRunOptions): TransformDrawOptions;
|
|
96
|
+
}
|
|
97
|
+
export {};
|
|
98
|
+
//# sourceMappingURL=transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transform/transform.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAGnE,OAAO,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAQzD,KAAK,iBAAiB,GAAG,GAAG,CAAC;AAE7B,yCAAyC;AACzC,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAC1F,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,6FAA6F;AAC7F,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,GAAG,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAC5D,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IACpB;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,OAAO;IAUnE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IAEpC,YAAY,SAAK;IAGjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAE1B,MAAM,EAAE,MAAM,GAAG,qBAAqB,EAAE,KAAK,GAAE,cAAmB;IAuB9E,8BAA8B;IAC9B,OAAO,IAAI,IAAI;IAYf,iCAAiC;IACjC,MAAM,IAAI,IAAI;IAId,8BAA8B;IAC9B,GAAG,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI;IAYxC,0CAA0C;IAC1C,IAAI,IAAI,IAAI;IASZ,mDAAmD;IACnD,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAK7C,qDAAqD;IACrD,OAAO,CAAC,OAAO,GAAE;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAM;IAW9D,yDAAyD;IACzD,cAAc,IAAI,WAAW,GAAG,IAAI;IAKpC,kDAAkD;IAClD,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAYnC,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc;IASxD,wBAAwB,CAAC,KAAK,EAAE,cAAc;IAa9C,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,oBAAoB;CAQvE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { getShaderInfo, getPassthroughFS } from '@luma.gl/shadertools';
|
|
3
|
+
import { GL } from '@luma.gl/constants';
|
|
4
|
+
import { WebGLDevice } from '@luma.gl/webgl';
|
|
5
|
+
import { Model } from "../model/model.js";
|
|
6
|
+
export class Transform {
|
|
7
|
+
static isSupported(device) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
constructor(device) {
|
|
11
|
+
let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
12
|
+
_defineProperty(this, "device", void 0);
|
|
13
|
+
_defineProperty(this, "gl", void 0);
|
|
14
|
+
_defineProperty(this, "elementCount", 0);
|
|
15
|
+
_defineProperty(this, "elementIDBuffer", null);
|
|
16
|
+
this.device = WebGLDevice.attach(device);
|
|
17
|
+
this.gl = this.device.gl2;
|
|
18
|
+
this._buildResourceTransforms(props);
|
|
19
|
+
props = this._updateModelProps(props);
|
|
20
|
+
this.model = new Model(this.device, {
|
|
21
|
+
...props,
|
|
22
|
+
fs: props.fs || getPassthroughFS({
|
|
23
|
+
version: getShaderInfo(props.vs).version
|
|
24
|
+
}),
|
|
25
|
+
id: props.id || 'transform-model',
|
|
26
|
+
drawMode: props.drawMode || GL.POINTS,
|
|
27
|
+
vertexCount: props.elementCount
|
|
28
|
+
});
|
|
29
|
+
Object.seal(this);
|
|
30
|
+
}
|
|
31
|
+
destroy() {}
|
|
32
|
+
delete() {
|
|
33
|
+
this.destroy();
|
|
34
|
+
}
|
|
35
|
+
run(options) {
|
|
36
|
+
const {
|
|
37
|
+
clearRenderTarget = true
|
|
38
|
+
} = options || {};
|
|
39
|
+
const updatedOpts = this._updateDrawOptions(options);
|
|
40
|
+
if (clearRenderTarget && updatedOpts.framebuffer) {}
|
|
41
|
+
}
|
|
42
|
+
swap() {}
|
|
43
|
+
getBuffer(varyingName) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
getData() {
|
|
47
|
+
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
48
|
+
}
|
|
49
|
+
getFramebuffer() {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
update(props) {}
|
|
53
|
+
_updateModelProps(props) {
|
|
54
|
+
const updatedProps = {
|
|
55
|
+
...props
|
|
56
|
+
};
|
|
57
|
+
return updatedProps;
|
|
58
|
+
}
|
|
59
|
+
_buildResourceTransforms(props) {}
|
|
60
|
+
_updateDrawOptions(options) {
|
|
61
|
+
const updatedOpts = {
|
|
62
|
+
...options
|
|
63
|
+
};
|
|
64
|
+
return updatedOpts;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","names":["getShaderInfo","getPassthroughFS","GL","WebGLDevice","Model","Transform","isSupported","device","constructor","props","arguments","length","undefined","_defineProperty","attach","gl","gl2","_buildResourceTransforms","_updateModelProps","model","fs","version","vs","id","drawMode","POINTS","vertexCount","elementCount","Object","seal","destroy","delete","run","options","clearRenderTarget","updatedOpts","_updateDrawOptions","framebuffer","swap","getBuffer","varyingName","getData","getFramebuffer","update","updatedProps"],"sources":["../../src/transform/transform.ts"],"sourcesContent":["// luma.gl, MIT license\n\nimport {Device, Buffer, Texture, Framebuffer} from '@luma.gl/core';\nimport {getShaderInfo, getPassthroughFS} from '@luma.gl/shadertools';\nimport {GL} from '@luma.gl/constants';\nimport {WebGLDevice, GLParameters} from '@luma.gl/webgl';\nimport {Model} from '../model/model';\n\n// import {AccessorObject} from '@luma.gl/webgl';\n// import {default as TransformFeedback} from '../classic/transform-feedback';\n// import BufferTransform from './buffer-transform';\n// import TextureTransform from './texture-transform';\n\ntype TransformFeedback = any;\n\n/** Properties for creating Transforms */\nexport type TransformProps = {\n id?: string;\n vs?: string;\n elementCount?: number;\n sourceBuffers?: Record<string, Buffer>;\n feedbackBuffers?: Record<string, string | Buffer | {buffer: Buffer; byteOffset?: number}>;\n varyings?: string[];\n feedbackMap?: Record<string, string>;\n modules?: object[]; // TODO use ShaderModule type\n attributes?: Record<string, any>;\n uniforms?: Record<string, any>;\n defines?: Record<string, any>\n parameters?: GLParameters;\n discard?: boolean;\n isIndexed?: boolean;\n inject?: Record<string, string>;\n drawMode?: number;\n framebuffer?: Framebuffer;\n _sourceTextures?: Record<string, Texture>;\n _targetTexture?: string | Texture;\n _targetTextureVarying?: string;\n _swapTexture?: string | null;\n _fs?: string;\n fs?: string;\n};\n\n/** Options that can be provided when running a Transform */\nexport type TransformRunOptions = {\n framebuffer?: Framebuffer;\n clearRenderTarget?: boolean;\n uniforms?: Record<string, any>;\n parameters?: Record<string, any>;\n discard?: boolean;\n};\n\n/** Options that control drawing a Transform. Used by subclasses to return draw parameters */\nexport type TransformDrawOptions = {\n attributes?: Record<string, any>;\n framebuffer?: any;\n uniforms?: object;\n discard?: boolean;\n parameters?: object;\n transformFeedback?: any;\n};\n\nexport type TransformBinding = {\n sourceBuffers: Record<string, Buffer>;\n sourceTextures: Record<string, Texture>;\n feedbackBuffers?: Record<string, Buffer | {buffer: Buffer}>;\n transformFeedback?: TransformFeedback;\n framebuffer?: Framebuffer;\n targetTexture?: Texture;\n};\n\n/**\n * Takes source and target buffers/textures and sets up the pipeline\n */\nexport class Transform {\n /**\n * Check if Transforms are supported (they are not under WebGL1)\n * @todo differentiate writing to buffer vs not\n */\n static isSupported(device: Device | WebGLRenderingContext): boolean {\n // try {\n // const webglDevice = WebGLDevice.attach(device);\n // return webglDevice.isWebGL2;\n // } catch {\n // return false;\n // }\n return false;\n }\n\n readonly device: WebGLDevice;\n readonly gl: WebGL2RenderingContext;\n // model: Model;\n elementCount = 0;\n // bufferTransform: BufferTransform | null = null;\n // textureTransform: TextureTransform | null = null;\n elementIDBuffer: Buffer | null = null;\n\n constructor(device: Device | WebGLRenderingContext, props: TransformProps = {}) {\n this.device = WebGLDevice.attach(device);\n // TODO assert webgl2?\n this.gl = this.device.gl2;\n this._buildResourceTransforms(props);\n\n props = this._updateModelProps(props);\n // @ts-expect-error TODO this is valid type error for params\n this.model = new Model(this.device, {\n ...props,\n fs: props.fs || getPassthroughFS({version: getShaderInfo(props.vs).version}),\n id: props.id || 'transform-model',\n // @ts-expect-error\n drawMode: props.drawMode || GL.POINTS,\n vertexCount: props.elementCount\n });\n\n // if (this.bufferTransform) {\n // this.bufferTransform.setupResources({model: this.model});\n // }\n Object.seal(this);\n }\n\n /** Delete owned resources. */\n destroy(): void {\n // if (this.model) {\n // this.model.destroy();\n // }\n // if (this.bufferTransform) {\n // this.bufferTransform.destroy();\n // }\n // if (this.textureTransform) {\n // this.textureTransform.destroy();\n // }\n }\n\n /** @deprecated Use destroy*() */\n delete(): void {\n this.destroy();\n }\n\n /** Run one transform loop. */\n run(options?: TransformRunOptions): void {\n const {clearRenderTarget = true} = options || {};\n\n const updatedOpts = this._updateDrawOptions(options);\n\n if (clearRenderTarget && updatedOpts.framebuffer) {\n // clear(this.device, {framebuffer: updatedOpts.framebuffer, color: true});\n }\n\n // this.model.transform(updatedOpts);\n }\n\n /** swap resources if a map is provided */\n swap(): void {\n // let swapped = false;\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n // for (const resourceTransform of resourceTransforms) {\n // swapped = swapped || Boolean(resourceTransform?.swap());\n // }\n // assert(swapped, 'Nothing to swap');\n }\n\n /** Return Buffer object for given varying name. */\n getBuffer(varyingName: string): Buffer | null {\n // return this.bufferTransform && this.bufferTransform.getBuffer(varyingName);\n return null;\n }\n\n /** Return data either from Buffer or from Texture */\n getData(options: {packed?: boolean; varyingName?: string} = {}) {\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n // for (const resourceTransform of resourceTransforms) {\n // const data = resourceTransform?.getData(options);\n // if (data) {\n // return data;\n // }\n // }\n // return null;\n }\n\n /** Return framebuffer object if rendering to textures */\n getFramebuffer(): Framebuffer | null {\n // return this.textureTransform?.getFramebuffer() || null;\n return null;\n }\n\n /** Update some or all buffer/texture bindings. */\n update(props: TransformProps): void {\n // if (props.elementCount !== undefined) {\n // this.model.setVertexCount(props.elementCount);\n // }\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);\n // for (const resourceTransform of resourceTransforms) {\n // resourceTransform?.update(props);\n // }\n }\n\n // Private\n\n _updateModelProps(props: TransformProps): TransformProps {\n const updatedProps: TransformProps = {...props};\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean) ;\n // for (const resourceTransform of resourceTransforms) {\n // updatedProps = resourceTransform.updateModelProps(updatedProps);\n // }\n return updatedProps;\n }\n\n _buildResourceTransforms(props: TransformProps) {\n // if (canCreateBufferTransform(props)) {\n // this.bufferTransform = new BufferTransform(this.device, props);\n // }\n // if (canCreateTextureTransform(props)) {\n // this.textureTransform = new TextureTransform(this.device, props);\n // }\n // assert(\n // this.bufferTransform || this.textureTransform,\n // 'must provide source/feedback buffers or source/target textures'\n // );\n }\n\n _updateDrawOptions(options: TransformRunOptions): TransformDrawOptions {\n const updatedOpts = {...options};\n // const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean) ;\n // for (const resourceTransform of resourceTransforms) {\n // updatedOpts = Object.assign(updatedOpts, resourceTransform.getDrawOptions(updatedOpts));\n // }\n return updatedOpts;\n }\n}\n\n// Helper Methods\n\n// function canCreateBufferTransform(props: TransformProps): boolean {\n// const canCreate =\n// (props.feedbackBuffers && !isObjectEmpty(props.feedbackBuffers)) ||\n// (props.feedbackMap && !isObjectEmpty(props.feedbackMap)) ||\n// (props.varyings && props.varyings.length > 0);\n// return Boolean(canCreate);\n// }\n\n// function canCreateTextureTransform(props: TransformProps): boolean {\n// const canCreate =\n// (props._sourceTextures && !isObjectEmpty(props._sourceTextures)) ||\n// props._targetTexture ||\n// props._targetTextureVarying;\n// return Boolean(canCreate);\n// }\n"],"mappings":";AAGA,SAAQA,aAAa,EAAEC,gBAAgB,QAAO,sBAAsB;AACpE,SAAQC,EAAE,QAAO,oBAAoB;AACrC,SAAQC,WAAW,QAAqB,gBAAgB;AAAC,SACjDC,KAAK;AAmEb,OAAO,MAAMC,SAAS,CAAC;EAKrB,OAAOC,WAAWA,CAACC,MAAsC,EAAW;IAOlE,OAAO,KAAK;EACd;EAUAC,WAAWA,CAACD,MAAsC,EAA8B;IAAA,IAA5BE,KAAqB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAAAG,eAAA;IAAAA,eAAA;IAAAA,eAAA,uBAL/D,CAAC;IAAAA,eAAA,0BAGiB,IAAI;IAGnC,IAAI,CAACN,MAAM,GAAGJ,WAAW,CAACW,MAAM,CAACP,MAAM,CAAC;IAExC,IAAI,CAACQ,EAAE,GAAG,IAAI,CAACR,MAAM,CAACS,GAAG;IACzB,IAAI,CAACC,wBAAwB,CAACR,KAAK,CAAC;IAEpCA,KAAK,GAAG,IAAI,CAACS,iBAAiB,CAACT,KAAK,CAAC;IAErC,IAAI,CAACU,KAAK,GAAG,IAAIf,KAAK,CAAC,IAAI,CAACG,MAAM,EAAE;MAClC,GAAGE,KAAK;MACRW,EAAE,EAAEX,KAAK,CAACW,EAAE,IAAInB,gBAAgB,CAAC;QAACoB,OAAO,EAAErB,aAAa,CAACS,KAAK,CAACa,EAAE,CAAC,CAACD;MAAO,CAAC,CAAC;MAC5EE,EAAE,EAAEd,KAAK,CAACc,EAAE,IAAI,iBAAiB;MAEjCC,QAAQ,EAAEf,KAAK,CAACe,QAAQ,IAAItB,EAAE,CAACuB,MAAM;MACrCC,WAAW,EAAEjB,KAAK,CAACkB;IACrB,CAAC,CAAC;IAKFC,MAAM,CAACC,IAAI,CAAC,IAAI,CAAC;EACnB;EAGAC,OAAOA,CAAA,EAAS,CAUhB;EAGAC,MAAMA,CAAA,EAAS;IACb,IAAI,CAACD,OAAO,CAAC,CAAC;EAChB;EAGAE,GAAGA,CAACC,OAA6B,EAAQ;IACvC,MAAM;MAACC,iBAAiB,GAAG;IAAI,CAAC,GAAGD,OAAO,IAAI,CAAC,CAAC;IAEhD,MAAME,WAAW,GAAG,IAAI,CAACC,kBAAkB,CAACH,OAAO,CAAC;IAEpD,IAAIC,iBAAiB,IAAIC,WAAW,CAACE,WAAW,EAAE,CAElD;EAGF;EAGAC,IAAIA,CAAA,EAAS,CAOb;EAGAC,SAASA,CAACC,WAAmB,EAAiB;IAE5C,OAAO,IAAI;EACb;EAGAC,OAAOA,CAAA,EAAyD;IAAA,IAAxDR,OAAiD,GAAAvB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAS9D;EAGAgC,cAAcA,CAAA,EAAuB;IAEnC,OAAO,IAAI;EACb;EAGAC,MAAMA,CAAClC,KAAqB,EAAQ,CAQpC;EAIAS,iBAAiBA,CAACT,KAAqB,EAAkB;IACvD,MAAMmC,YAA4B,GAAG;MAAC,GAAGnC;IAAK,CAAC;IAK/C,OAAOmC,YAAY;EACrB;EAEA3B,wBAAwBA,CAACR,KAAqB,EAAE,CAWhD;EAEA2B,kBAAkBA,CAACH,OAA4B,EAAwB;IACrE,MAAME,WAAW,GAAG;MAAC,GAAGF;IAAO,CAAC;IAKhC,OAAOE,WAAW;EACpB;AACF"}
|