@luma.gl/engine 9.0.0-alpha.34 → 9.0.0-alpha.36

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/animation/timeline.d.ts +4 -4
  2. package/dist/animation/timeline.d.ts.map +1 -1
  3. package/dist/animation/timeline.js +13 -13
  4. package/dist/animation/timeline.js.map +1 -1
  5. package/dist/animation-loop/animation-loop.d.ts +2 -2
  6. package/dist/animation-loop/animation-loop.d.ts.map +1 -1
  7. package/dist/animation-loop/animation-loop.js +5 -6
  8. package/dist/animation-loop/animation-loop.js.map +1 -1
  9. package/dist/animation-loop/animation-props.d.ts +1 -2
  10. package/dist/animation-loop/animation-props.d.ts.map +1 -1
  11. package/dist/animation-loop/animation-props.js.map +1 -1
  12. package/dist/dist.dev.js +980 -9108
  13. package/dist/index.cjs +269 -130
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/clip-space.d.ts +1 -1
  19. package/dist/lib/clip-space.d.ts.map +1 -1
  20. package/dist/lib/clip-space.js +1 -2
  21. package/dist/lib/clip-space.js.map +1 -1
  22. package/dist/model/model.d.ts +43 -22
  23. package/dist/model/model.d.ts.map +1 -1
  24. package/dist/model/model.js +72 -19
  25. package/dist/model/model.js.map +1 -1
  26. package/dist/scenegraph/scenegraph-node.d.ts +5 -5
  27. package/dist/scenegraph/scenegraph-node.d.ts.map +1 -1
  28. package/dist/scenegraph/scenegraph-node.js.map +1 -1
  29. package/dist/shadertools/shader-module-uniforms.d.ts +36 -0
  30. package/dist/shadertools/shader-module-uniforms.d.ts.map +1 -0
  31. package/dist/shadertools/shader-module-uniforms.js +87 -0
  32. package/dist/shadertools/shader-module-uniforms.js.map +1 -0
  33. package/dist/transform/transform.d.ts +2 -2
  34. package/dist/transform/transform.d.ts.map +1 -1
  35. package/dist/transform/transform.js +0 -18
  36. package/dist/transform/transform.js.map +1 -1
  37. package/dist.min.js +115 -165
  38. package/package.json +5 -6
  39. package/src/animation/timeline.ts +13 -13
  40. package/src/animation-loop/animation-loop.ts +6 -8
  41. package/src/animation-loop/animation-props.ts +1 -2
  42. package/src/index.ts +3 -0
  43. package/src/lib/clip-space.ts +2 -3
  44. package/src/model/model.ts +154 -60
  45. package/src/scenegraph/scenegraph-node.ts +5 -5
  46. package/src/shadertools/shader-module-uniforms.ts +178 -0
  47. package/src/transform/transform.ts +8 -6
@@ -1 +1 @@
1
- {"version":3,"file":"scenegraph-node.js","names":["assert","uid","Vector3","Matrix4","ScenegraphNode","constructor","props","arguments","length","undefined","id","matrix","display","position","rotation","scale","userData","name","_setScenegraphNodeProps","getBounds","destroy","delete","setProps","toString","setPosition","setRotation","setScale","setMatrix","copyMatrix","copy","setMatrixComponents","components","update","updateMatrix","pos","rot","identity","translate","rotateXYZ","options","getCoordinateUniforms","viewMatrix","modelMatrix","worldMatrix","multiplyRight","worldInverse","invert","worldInverseTranspose","transpose","objectMatrix","worldInverseMatrix","worldInverseTransposeMatrix","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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"}
1
+ {"version":3,"file":"scenegraph-node.js","names":["assert","uid","Vector3","Matrix4","ScenegraphNode","constructor","props","arguments","length","undefined","id","matrix","display","position","rotation","scale","userData","name","_setScenegraphNodeProps","getBounds","destroy","delete","setProps","toString","setPosition","setRotation","setScale","setMatrix","copyMatrix","copy","setMatrixComponents","components","update","updateMatrix","pos","rot","identity","translate","rotateXYZ","options","getCoordinateUniforms","viewMatrix","modelMatrix","worldMatrix","multiplyRight","worldInverse","invert","worldInverseTranspose","transpose","objectMatrix","worldInverseMatrix","worldInverseTransposeMatrix","Object","assign"],"sources":["../../src/scenegraph/scenegraph-node.ts"],"sourcesContent":["import {assert, uid, NumberArray} 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?: NumberArray;\n position?: NumberArray;\n rotation?: NumberArray;\n scale?: NumberArray;\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,36 @@
1
+ import { NumberArray } from '@luma.gl/core';
2
+ import { Device, Buffer, UniformBufferLayout } from '@luma.gl/core';
3
+ import { ShaderModule } from '@luma.gl/shadertools';
4
+ /** Duplicates definition in core module to avoid cross dependencies */
5
+ export type UniformValue = number | boolean | Readonly<NumberArray>;
6
+ /** A uniform store holds a number of uniform values and does some book keeping on what has changes */
7
+ export declare class ShaderModuleUniforms<TUniforms extends Record<string, UniformValue>> {
8
+ device: Device;
9
+ shaderModule: ShaderModule<TUniforms>;
10
+ useUniformBuffers: boolean;
11
+ uniformBufferLayout: UniformBufferLayout;
12
+ uniformBuffer: Buffer | null;
13
+ uniforms: Record<string, UniformValue>;
14
+ modifiedUniforms: Record<string, boolean>;
15
+ modified: boolean;
16
+ needsRedraw: string | false;
17
+ constructor(props?: {
18
+ device: Device;
19
+ shaderModule: ShaderModule<TUniforms>;
20
+ });
21
+ /** Set a map of uniforms */
22
+ setUniforms(uniforms: TUniforms): void;
23
+ setNeedsRedraw(reason: string): void;
24
+ /**
25
+ * Updates the uniform buffer if needed.
26
+ * Clears the dirty flag.
27
+ */
28
+ getUniformBuffer(): Buffer;
29
+ /** Returns all uniforms */
30
+ getUniforms(groupName: string): Record<string, UniformValue>;
31
+ /** Returns modified uniforms */
32
+ getModifiedUniforms(): Record<string, boolean>;
33
+ /** Set a single uniform */
34
+ private _setUniform;
35
+ }
36
+ //# sourceMappingURL=shader-module-uniforms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-module-uniforms.d.ts","sourceRoot":"","sources":["../../src/shadertools/shader-module-uniforms.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAgB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAoB,MAAM,eAAe,CAAC;AACrF,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAElD,uEAAuE;AACvE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;AAEpE,sGAAsG;AACtG,qBAAa,oBAAoB,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAEtC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAM;IAC5C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAC/C,QAAQ,EAAE,OAAO,CAAQ;IAEzB,WAAW,EAAE,MAAM,GAAG,KAAK,CAAiB;gBAEhC,KAAK,CAAC,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;KACtC;IAqBD,4BAA4B;IAC5B,WAAW,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI;IAOtC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpC;;;OAGG;IACH,gBAAgB,IAAI,MAAM;IAS1B,2BAA2B;IAC3B,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAM5D,gCAAgC;IAChC,mBAAmB;IAOnB,2BAA2B;IAC3B,OAAO,CAAC,WAAW;CAepB"}
@@ -0,0 +1,87 @@
1
+ import { isNumberArray } from '@luma.gl/core';
2
+ import { Buffer, UniformBufferLayout } from '@luma.gl/core';
3
+ export class ShaderModuleUniforms {
4
+ constructor(props) {
5
+ this.device = void 0;
6
+ this.shaderModule = void 0;
7
+ this.useUniformBuffers = void 0;
8
+ this.uniformBufferLayout = void 0;
9
+ this.uniformBuffer = null;
10
+ this.uniforms = {};
11
+ this.modifiedUniforms = {};
12
+ this.modified = true;
13
+ this.needsRedraw = 'initialized';
14
+ this.device = props.device;
15
+ this.shaderModule = props.shaderModule;
16
+ this.useUniformBuffers = this.device.info.type !== 'webgl';
17
+ const uniformTypes = {};
18
+ for (const [name, {
19
+ format
20
+ }] of Object.entries(props.shaderModule.uniforms)) {
21
+ uniformTypes[name] = format;
22
+ }
23
+ this.uniformBufferLayout = new UniformBufferLayout(uniformTypes);
24
+ if (this.useUniformBuffers) {
25
+ this.uniformBuffer = this.device.createBuffer({
26
+ usage: Buffer.UNIFORM,
27
+ byteLength: this.uniformBufferLayout.byteLength
28
+ });
29
+ }
30
+ }
31
+ setUniforms(uniforms) {
32
+ for (const [key, value] of Object.entries(uniforms)) {
33
+ this._setUniform(key, value);
34
+ this.setNeedsRedraw(key);
35
+ }
36
+ }
37
+ setNeedsRedraw(reason) {
38
+ this.needsRedraw = this.needsRedraw || reason;
39
+ }
40
+ getUniformBuffer() {
41
+ if (this.needsRedraw) {
42
+ const modifiedUniforms = this.getModifiedUniforms();
43
+ const data = this.uniformBufferLayout.getData(modifiedUniforms);
44
+ this.uniformBuffer.write(data);
45
+ }
46
+ return this.uniformBuffer;
47
+ }
48
+ getUniforms(groupName) {
49
+ this.modifiedUniforms = {};
50
+ this.needsRedraw = false;
51
+ return this.uniforms[groupName] || {};
52
+ }
53
+ getModifiedUniforms() {
54
+ const modifiedUniforms = this.modifiedUniforms;
55
+ this.modifiedUniforms = {};
56
+ this.needsRedraw = false;
57
+ return modifiedUniforms;
58
+ }
59
+ _setUniform(key, value) {
60
+ if (arrayEqual(this.uniforms[key], value)) {
61
+ return;
62
+ }
63
+ this.uniforms[key] = value;
64
+ this.modifiedUniforms[key] = true;
65
+ this.modified = true;
66
+ }
67
+ }
68
+ function arrayEqual(a, b) {
69
+ let limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 16;
70
+ if (a !== b) {
71
+ return false;
72
+ }
73
+ const arrayA = isNumberArray(a);
74
+ if (!arrayA) {
75
+ return false;
76
+ }
77
+ const arrayB = isNumberArray(b);
78
+ if (arrayB && arrayA.length === arrayB.length) {
79
+ for (let i = 0; i < arrayA.length; ++i) {
80
+ if (arrayB[i] !== arrayA[i]) {
81
+ return false;
82
+ }
83
+ }
84
+ }
85
+ return true;
86
+ }
87
+ //# sourceMappingURL=shader-module-uniforms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader-module-uniforms.js","names":["isNumberArray","Buffer","UniformBufferLayout","ShaderModuleUniforms","constructor","props","device","shaderModule","useUniformBuffers","uniformBufferLayout","uniformBuffer","uniforms","modifiedUniforms","modified","needsRedraw","info","type","uniformTypes","name","format","Object","entries","createBuffer","usage","UNIFORM","byteLength","setUniforms","key","value","_setUniform","setNeedsRedraw","reason","getUniformBuffer","getModifiedUniforms","data","getData","write","getUniforms","groupName","arrayEqual","a","b","limit","arguments","length","undefined","arrayA","arrayB","i"],"sources":["../../src/shadertools/shader-module-uniforms.ts"],"sourcesContent":["// luma.gl, MIT license\nimport {NumberArray, isNumberArray} from '@luma.gl/core';\nimport {Device, Buffer, UniformBufferLayout, ShaderUniformType} from '@luma.gl/core';\nimport {ShaderModule} from '@luma.gl/shadertools';\n\n/** Duplicates definition in core module to avoid cross dependencies */\nexport type UniformValue = number | boolean | Readonly<NumberArray>; // Float32Array> | Readonly<Int32Array> | Readonly<Uint32Array> | Readonly<number[]>;\n\n/** A uniform store holds a number of uniform values and does some book keeping on what has changes */\nexport class ShaderModuleUniforms<TUniforms extends Record<string, UniformValue>> {\n device: Device;\n shaderModule: ShaderModule<TUniforms>;\n\n useUniformBuffers: boolean;\n uniformBufferLayout: UniformBufferLayout;\n uniformBuffer: Buffer | null = null;\n\n uniforms: Record<string, UniformValue> = {};\n modifiedUniforms: Record<string, boolean> = {};\n modified: boolean = true;\n\n needsRedraw: string | false = 'initialized';\n\n constructor(props?: {\n device: Device;\n shaderModule: ShaderModule<TUniforms>\n }) {\n this.device = props.device;\n this.shaderModule = props.shaderModule;\n this.useUniformBuffers = this.device.info.type !== 'webgl';\n\n // extract uniform formats and create a uniform buffer layout\n const uniformTypes: Record<string, ShaderUniformType> = {};\n for (const [name, {format}] of Object.entries(props.shaderModule.uniforms)) {\n uniformTypes[name] = format;\n }\n this.uniformBufferLayout = new UniformBufferLayout(uniformTypes);\n\n // create a uniform buffer\n if (this.useUniformBuffers) {\n this.uniformBuffer = this.device.createBuffer({\n usage: Buffer.UNIFORM,\n byteLength: this.uniformBufferLayout.byteLength\n }); \n }\n }\n\n /** Set a map of uniforms */\n setUniforms(uniforms: TUniforms): void {\n for (const [key, value] of Object.entries(uniforms)) {\n this._setUniform(key, value);\n this.setNeedsRedraw(key);\n }\n }\n\n setNeedsRedraw(reason: string): void {\n this.needsRedraw = this.needsRedraw || reason;\n }\n\n /** \n * Updates the uniform buffer if needed. \n * Clears the dirty flag.\n */\n getUniformBuffer(): Buffer {\n if (this.needsRedraw) {\n const modifiedUniforms = this.getModifiedUniforms();\n const data = this.uniformBufferLayout.getData(modifiedUniforms);\n this.uniformBuffer.write(data);\n }\n return this.uniformBuffer;\n }\n\n /** Returns all uniforms */\n getUniforms(groupName: string): Record<string, UniformValue> {\n this.modifiedUniforms = {};\n this.needsRedraw = false;\n return (this.uniforms[groupName] || {}) as Record<string, UniformValue>;\n }\n\n /** Returns modified uniforms */\n getModifiedUniforms() {\n const modifiedUniforms = this.modifiedUniforms;\n this.modifiedUniforms = {};\n this.needsRedraw = false;\n return modifiedUniforms;\n }\n\n /** Set a single uniform */\n private _setUniform(key: string, value: UniformValue) {\n // if (this.layout[key] !== undefined) {\n // this.uniforms[key] = value;\n // this.modifiedUniforms[key] = true;\n // this.modified = true;\n // } else {\n // log.warn(`Unknown uniform ${key}`)\n // }\n if (arrayEqual(this.uniforms[key], value)) {\n return;\n }\n this.uniforms[key] = value;\n this.modifiedUniforms[key] = true;\n this.modified = true;\n }\n}\n\nfunction arrayEqual(a: unknown, b: unknown, limit: number = 16) {\n if (a !== b) {\n return false;\n }\n const arrayA = isNumberArray(a);\n if (!arrayA) {\n return false;\n }\n const arrayB = isNumberArray(b);\n if (arrayB && arrayA.length === arrayB.length) {\n for (let i = 0; i < arrayA.length; ++i) {\n if (arrayB[i] !== arrayA[i]) {\n return false;\n }\n }\n }\n return true;\n}\n\n\n// export function makeUniformStore<I extends Record<string, Record<string, unknown>>>(name: string, uniforms: I): UniformStore<{ [P in keyof I]: I[P] }> {\n// return new UniformStore<{ [P in keyof I]: I[P] }>({name, uniforms});\n// }\n\n// type ShaderModule<Uniforms extends Record<string, unknown> = {}> = {\n// uniformTypes: Record<keyof Uniforms, string>;\n// };\n\n// type Module1Uniforms = {\n// uniform1?: number;\n// uniform2?: [number, number];\n// }\n\n// type Module2Uniforms = {\n// uniform3: number;\n// uniform4: [number, number];\n// }\n\n// const shaderModule: ShaderModule<Module1Uniforms> = {\n// uniformTypes: {\n// uniform1: 'aaa',\n// uniform2: 'aaa'\n// }\n// }\n\n\n// const module1Uniforms = new ShaderModuleUniforms<Module1Uniforms>();\n\n// module1Uniforms.setUniforms({\n// uniform1: 1,\n// uniform2: [1, 1]\n// });\n\n\n\n// setUniformStore(pipeline, blockIndex, block);\n\n// GLSL utilities\n\n\n// TYPE TESTS\n\n/*\nnew UniformStore<ModuleUniforms>().setUniforms({\n uniform1: 1,\n uniform2: 1,\n});\n\nnew UniformStore<ModuleUniforms>().setUniforms({\n three: 1,\n uniform1: 1,\n});\n*/\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Device, Buffer, Texture, Framebuffer } from '@luma.gl/core';
2
- import { WebGLDevice, GLParameters } from '@luma.gl/webgl';
2
+ import { GLParameters } from '@luma.gl/constants';
3
3
  type TransformFeedback = any;
4
4
  /** Properties for creating Transforms */
5
5
  export type TransformProps = {
@@ -66,7 +66,7 @@ export declare class Transform {
66
66
  * @todo differentiate writing to buffer vs not
67
67
  */
68
68
  static isSupported(device: Device | WebGLRenderingContext): boolean;
69
- readonly device: WebGLDevice;
69
+ readonly device: Device;
70
70
  readonly gl: WebGL2RenderingContext;
71
71
  elementCount: number;
72
72
  elementIDBuffer: Buffer | null;
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transform/transform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/transform/transform.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,3 @@
1
- import { getShaderInfo, getPassthroughFS } from '@luma.gl/shadertools';
2
- import { GL } from '@luma.gl/constants';
3
- import { WebGLDevice } from '@luma.gl/webgl';
4
- import { Model } from "../model/model.js";
5
1
  export class Transform {
6
2
  static isSupported(device) {
7
3
  return false;
@@ -12,20 +8,6 @@ export class Transform {
12
8
  this.gl = void 0;
13
9
  this.elementCount = 0;
14
10
  this.elementIDBuffer = null;
15
- this.device = WebGLDevice.attach(device);
16
- this.gl = this.device.gl2;
17
- this._buildResourceTransforms(props);
18
- props = this._updateModelProps(props);
19
- this.model = new Model(this.device, {
20
- ...props,
21
- fs: props.fs || getPassthroughFS({
22
- version: getShaderInfo(props.vs).version
23
- }),
24
- id: props.id || 'transform-model',
25
- drawMode: props.drawMode || GL.POINTS,
26
- vertexCount: props.elementCount
27
- });
28
- Object.seal(this);
29
11
  }
30
12
  destroy() {}
31
13
  delete() {
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","names":["getShaderInfo","getPassthroughFS","GL","WebGLDevice","Model","Transform","isSupported","device","constructor","props","arguments","length","undefined","gl","elementCount","elementIDBuffer","attach","gl2","_buildResourceTransforms","_updateModelProps","model","fs","version","vs","id","drawMode","POINTS","vertexCount","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;IAAA,KARrEH,MAAM;IAAA,KACNM,EAAE;IAAA,KAEXC,YAAY,GAAG,CAAC;IAAA,KAGhBC,eAAe,GAAkB,IAAI;IAGnC,IAAI,CAACR,MAAM,GAAGJ,WAAW,CAACa,MAAM,CAACT,MAAM,CAAC;IAExC,IAAI,CAACM,EAAE,GAAG,IAAI,CAACN,MAAM,CAACU,GAAG;IACzB,IAAI,CAACC,wBAAwB,CAACT,KAAK,CAAC;IAEpCA,KAAK,GAAG,IAAI,CAACU,iBAAiB,CAACV,KAAK,CAAC;IAErC,IAAI,CAACW,KAAK,GAAG,IAAIhB,KAAK,CAAC,IAAI,CAACG,MAAM,EAAE;MAClC,GAAGE,KAAK;MACRY,EAAE,EAAEZ,KAAK,CAACY,EAAE,IAAIpB,gBAAgB,CAAC;QAACqB,OAAO,EAAEtB,aAAa,CAACS,KAAK,CAACc,EAAE,CAAC,CAACD;MAAO,CAAC,CAAC;MAC5EE,EAAE,EAAEf,KAAK,CAACe,EAAE,IAAI,iBAAiB;MAEjCC,QAAQ,EAAEhB,KAAK,CAACgB,QAAQ,IAAIvB,EAAE,CAACwB,MAAM;MACrCC,WAAW,EAAElB,KAAK,CAACK;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;EAIAU,iBAAiBA,CAACV,KAAqB,EAAkB;IACvD,MAAMmC,YAA4B,GAAG;MAAC,GAAGnC;IAAK,CAAC;IAK/C,OAAOmC,YAAY;EACrB;EAEA1B,wBAAwBA,CAACT,KAAqB,EAAE,CAWhD;EAEA2B,kBAAkBA,CAACH,OAA4B,EAAwB;IACrE,MAAME,WAAW,GAAG;MAAC,GAAGF;IAAO,CAAC;IAKhC,OAAOE,WAAW;EACpB;AACF"}
1
+ {"version":3,"file":"transform.js","names":["Transform","isSupported","device","constructor","props","arguments","length","undefined","gl","elementCount","elementIDBuffer","destroy","delete","run","options","clearRenderTarget","updatedOpts","_updateDrawOptions","framebuffer","swap","getBuffer","varyingName","getData","getFramebuffer","update","_updateModelProps","updatedProps","_buildResourceTransforms"],"sources":["../../src/transform/transform.ts"],"sourcesContent":["\n// luma.gl, MIT license\n\nimport {Device, Buffer, Texture, Framebuffer} from '@luma.gl/core';\nimport {GLParameters} from '@luma.gl/constants';\n// import {getShaderInfo, getPassthroughFS} from '@luma.gl/shadertools';\n// import {GL} from '@luma.gl/constants';\n// import {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: Device;\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 /*\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 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\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":"AA0EA,OAAO,MAAMA,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;IAAA,KARrEH,MAAM;IAAA,KACNM,EAAE;IAAA,KAEXC,YAAY,GAAG,CAAC;IAAA,KAGhBC,eAAe,GAAkB,IAAI;EAwBrC;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,GAAAT,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAS9D;EAGAkB,cAAcA,CAAA,EAAuB;IAEnC,OAAO,IAAI;EACb;EAGAC,MAAMA,CAACpB,KAAqB,EAAQ,CAQpC;EAIAqB,iBAAiBA,CAACrB,KAAqB,EAAkB;IACvD,MAAMsB,YAA4B,GAAG;MAAC,GAAGtB;IAAK,CAAC;IAK/C,OAAOsB,YAAY;EACrB;EAEAC,wBAAwBA,CAACvB,KAAqB,EAAE,CAWhD;EAEAa,kBAAkBA,CAACH,OAA4B,EAAwB;IACrE,MAAME,WAAW,GAAG;MAAC,GAAGF;IAAO,CAAC;IAKhC,OAAOE,WAAW;EACpB;AACF"}