@luma.gl/engine 9.0.0-alpha.24 → 9.0.0-alpha.26
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/dist/animation/timeline.js.map +1 -1
- package/dist/animation-loop/animation-loop.js +7 -7
- package/dist/animation-loop/animation-loop.js.map +1 -1
- package/dist/animation-loop/make-animation-loop.js.map +1 -1
- package/dist/dist.dev.js +1557 -108
- package/dist/geometries/ico-sphere-geometry.js.map +1 -1
- package/dist/geometries/plane-geometry.js.map +1 -1
- package/dist/geometry/geometry.d.ts +1 -1
- package/dist/geometry/geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.js +1 -1
- package/dist/geometry/geometry.js.map +1 -1
- package/dist/index.cjs +313 -47
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/clip-space.js +1 -1
- package/dist/lib/clip-space.js.map +1 -1
- package/dist/lib/pipeline-factory.js.map +1 -1
- package/dist/model/model-utils.js.map +1 -1
- package/dist/model/model.d.ts +3 -0
- package/dist/model/model.d.ts.map +1 -1
- package/dist/model/model.js +10 -0
- package/dist/model/model.js.map +1 -1
- 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.js +1 -1
- package/dist/transform/transform.js.map +1 -1
- package/dist.min.js +77 -76
- package/package.json +6 -6
- package/src/geometry/geometry.ts +1 -1
- package/src/index.ts +5 -0
- package/src/lib/clip-space.ts +1 -1
- package/src/model/model.ts +10 -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 +1 -1
|
@@ -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/api';\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,6 +1,6 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import { getShaderInfo, getPassthroughFS } from '@luma.gl/shadertools';
|
|
3
|
-
import GL from '@luma.gl/constants';
|
|
3
|
+
import { GL } from '@luma.gl/constants';
|
|
4
4
|
import { WebGLDevice } from '@luma.gl/webgl';
|
|
5
5
|
import { Model } from "../model/model.js";
|
|
6
6
|
export class Transform {
|
|
@@ -1 +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/api';\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,OAAOC,EAAE,MAAM,oBAAoB;AACnC,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,EAAE;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"}
|
|
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/api';\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"}
|