@luma.gl/engine 8.6.0-alpha.3 → 9.0.0-alpha.3
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/key-frames.d.ts +1 -0
- package/dist/animation/key-frames.d.ts.map +1 -1
- package/dist/animation/key-frames.js.map +1 -1
- package/dist/animation/timeline.d.ts +1 -1
- package/dist/animation/timeline.d.ts.map +1 -1
- package/dist/animation/timeline.js.map +1 -1
- package/dist/geometries/cone-geometry.d.ts.map +1 -1
- package/dist/geometries/cone-geometry.js +1 -1
- package/dist/geometries/cone-geometry.js.map +1 -1
- package/dist/geometries/cube-geometry.d.ts +4 -0
- package/dist/geometries/cube-geometry.d.ts.map +1 -1
- package/dist/geometries/cube-geometry.js +30 -7
- package/dist/geometries/cube-geometry.js.map +1 -1
- package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
- package/dist/geometries/cylinder-geometry.js +1 -1
- package/dist/geometries/cylinder-geometry.js.map +1 -1
- package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/ico-sphere-geometry.js +1 -1
- package/dist/geometries/ico-sphere-geometry.js.map +1 -1
- package/dist/geometries/plane-geometry.d.ts.map +1 -1
- package/dist/geometries/plane-geometry.js +1 -1
- package/dist/geometries/plane-geometry.js.map +1 -1
- package/dist/geometries/sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/sphere-geometry.js +1 -1
- package/dist/geometries/sphere-geometry.js.map +1 -1
- package/dist/geometries/truncated-cone-geometry.d.ts +15 -3
- package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
- package/dist/geometries/truncated-cone-geometry.js +29 -15
- package/dist/geometries/truncated-cone-geometry.js.map +1 -1
- package/dist/geometry/geometry-table.d.ts +15 -0
- package/dist/geometry/geometry-table.d.ts.map +1 -0
- package/dist/geometry/geometry-table.js +2 -0
- package/dist/{transform/transform-types.js.map → geometry/geometry-table.js.map} +1 -1
- package/dist/geometry/geometry-utils.js.map +1 -1
- package/dist/geometry/geometry.d.ts +34 -7
- package/dist/geometry/geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.js +33 -11
- package/dist/geometry/geometry.js.map +1 -1
- package/dist/geometry/primitive-utils.d.ts +1 -0
- package/dist/geometry/primitive-utils.d.ts.map +1 -0
- package/dist/geometry/primitive-utils.js +2 -0
- package/dist/geometry/primitive-utils.js.map +1 -0
- package/dist/index.d.ts +3 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/animation-loop.d.ts +14 -73
- package/dist/lib/animation-loop.d.ts.map +1 -1
- package/dist/lib/animation-loop.js +39 -160
- package/dist/lib/animation-loop.js.map +1 -1
- package/dist/lib/animation-props.d.ts +24 -0
- package/dist/lib/animation-props.d.ts.map +1 -0
- package/dist/lib/animation-props.js +2 -0
- package/dist/lib/animation-props.js.map +1 -0
- package/dist/lib/clip-space.d.ts +1 -0
- package/dist/lib/clip-space.d.ts.map +1 -0
- package/dist/lib/clip-space.js +2 -0
- package/dist/lib/clip-space.js.map +1 -0
- package/dist/lib/model-utils.d.ts +4 -3
- package/dist/lib/model-utils.d.ts.map +1 -1
- package/dist/lib/model-utils.js +24 -70
- package/dist/lib/model-utils.js.map +1 -1
- package/dist/lib/model.d.ts +34 -104
- package/dist/lib/model.d.ts.map +1 -1
- package/dist/lib/model.js +108 -505
- package/dist/lib/model.js.map +1 -1
- package/dist/lib/pipeline-factory.d.ts +55 -0
- package/dist/lib/pipeline-factory.d.ts.map +1 -0
- package/dist/lib/pipeline-factory.js +191 -0
- package/dist/lib/pipeline-factory.js.map +1 -0
- package/dist/lib/render-loop.d.ts +4 -17
- package/dist/lib/render-loop.d.ts.map +1 -1
- package/dist/lib/render-loop.js +14 -21
- package/dist/lib/render-loop.js.map +1 -1
- package/package.json +5 -5
- package/src/animation/key-frames.ts +1 -0
- package/src/animation/timeline.ts +1 -1
- package/src/geometries/cone-geometry.ts +1 -1
- package/src/geometries/cube-geometry.ts +159 -8
- package/src/geometries/cylinder-geometry.ts +1 -1
- package/src/geometries/ico-sphere-geometry.ts +1 -1
- package/src/geometries/plane-geometry.ts +1 -1
- package/src/geometries/sphere-geometry.ts +2 -2
- package/src/geometries/truncated-cone-geometry.ts +30 -12
- package/src/geometry/geometry-table.ts +16 -0
- package/src/geometry/geometry-utils.ts +1 -1
- package/src/geometry/geometry.ts +58 -13
- package/src/geometry/primitive-utils.ts +30 -0
- package/src/index.ts +7 -8
- package/src/lib/animation-loop.ts +85 -274
- package/src/lib/animation-props.ts +31 -0
- package/src/{utils → lib}/clip-space.ts +5 -2
- package/src/lib/model-utils.ts +60 -32
- package/src/lib/model.ts +126 -642
- package/src/lib/pipeline-factory.ts +225 -0
- package/src/lib/render-loop.ts +21 -19
- package/dist/lib/program-manager.d.ts +0 -39
- package/dist/lib/program-manager.d.ts.map +0 -1
- package/dist/lib/program-manager.js +0 -175
- package/dist/lib/program-manager.js.map +0 -1
- package/dist/transform/buffer-transform.d.ts +0 -36
- package/dist/transform/buffer-transform.d.ts.map +0 -1
- package/dist/transform/buffer-transform.js +0 -255
- package/dist/transform/buffer-transform.js.map +0 -1
- package/dist/transform/texture-transform.d.ts +0 -57
- package/dist/transform/texture-transform.d.ts.map +0 -1
- package/dist/transform/texture-transform.js +0 -412
- package/dist/transform/texture-transform.js.map +0 -1
- package/dist/transform/transform-shader-utils.d.ts +0 -26
- package/dist/transform/transform-shader-utils.d.ts.map +0 -1
- package/dist/transform/transform-shader-utils.js +0 -149
- package/dist/transform/transform-shader-utils.js.map +0 -1
- package/dist/transform/transform-types.d.ts +0 -44
- package/dist/transform/transform-types.d.ts.map +0 -1
- package/dist/transform/transform-types.js +0 -2
- package/dist/transform/transform.d.ts +0 -47
- package/dist/transform/transform.d.ts.map +0 -1
- package/dist/transform/transform.js +0 -198
- package/dist/transform/transform.js.map +0 -1
- package/dist/utils/clip-space.d.ts +0 -5
- package/dist/utils/clip-space.d.ts.map +0 -1
- package/dist/utils/clip-space.js +0 -34
- package/dist/utils/clip-space.js.map +0 -1
- package/src/lib/program-manager.ts +0 -187
- package/src/transform/buffer-transform.ts +0 -214
- package/src/transform/texture-transform.ts +0 -344
- package/src/transform/transform-shader-utils.ts +0 -169
- package/src/transform/transform-types.ts +0 -42
- package/src/transform/transform.ts +0 -189
package/dist/lib/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/model.ts"],"names":["GL","WebGLDevice","Program","VertexArray","clear","TransformFeedback","Buffer","log","isObjectEmpty","uid","assert","getDebugTableForUniforms","getDebugTableForVertexArray","getDebugTableForProgramConfiguration","ProgramManager","getBuffersFromGeometry","LOG_DRAW_PRIORITY","LOG_DRAW_TIMEOUT","ERR_MODEL_PARAMS","NOOP","DRAW_PARAMS","Model","constructor","device","props","id","webglDevice","attach","gl","initialize","programManager","getDefaultProgramManager","_programManagerState","_managedProgram","program","vs","fs","modules","defines","inject","varyings","bufferMode","transpileToGLSL100","programProps","vertexArray","_programDirty","userData","needsRedraw","_attributes","attributes","uniforms","pickable","_checkProgram","setUniforms","Object","assign","getModuleUniforms","moduleSettings","drawMode","undefined","TRIANGLES","vertexCount","geometryBuffers","isInstanced","instanced","instanceCount","_setModelProps","geometry","Number","isFinite","setProps","destroy","key","delete","release","_deleteGeometryBuffers","getDrawMode","getVertexCount","getInstanceCount","getAttributes","getProgram","setProgram","getUniforms","setDrawMode","setVertexCount","setInstanceCount","setGeometry","setAttributes","normalizedAttributes","name","attribute","getValue","opts","updateModuleSettings","draw","framebuffer","transformFeedback","parameters","logPriority","priority","_logDrawCallStart","drawParams","getDrawParams","isIndexed","indexType","indexOffset","vertexArrayInstanced","warn","onBeforeRender","onAfterRender","didDraw","offset","_logDrawCallEnd","transform","discard","feedbackBuffers","unbindModels","_setFeedbackBuffers","RASTERIZER_DISCARD","forEach","model","unbindBuffers","bindBuffers","render","_feedbackBuffers","needsUpdate","stateHash","get","buffer","_setAnimationProps","animationProps","animated","setBuffers","logLevel","logDrawTimeout","Date","now","lastLogTime","group","collapsed","level","attributeTable","header","table","uniformTable","unusedTable","unusedCount","missingTable","count","missingCount","undefinedOnly","keys","configTable","configuration","message","groupEnd"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\nimport {Device} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport type {ProgramProps} from '@luma.gl/webgl';\nimport {\n WebGLDevice,\n Program,\n VertexArray,\n clear,\n TransformFeedback,\n Buffer,\n log,\n isObjectEmpty,\n uid,\n assert\n} from '@luma.gl/webgl';\nimport {\n getDebugTableForUniforms,\n getDebugTableForVertexArray,\n getDebugTableForProgramConfiguration\n} from '@luma.gl/webgl';\nimport ProgramManager from './program-manager';\nimport {getBuffersFromGeometry} from './model-utils';\n\nconst LOG_DRAW_PRIORITY = 2;\nconst LOG_DRAW_TIMEOUT = 10000;\n\nconst ERR_MODEL_PARAMS = 'Model needs drawMode and vertexCount';\n\nconst NOOP = () => {};\nconst DRAW_PARAMS = {};\n\nexport type ModelProps = ProgramProps & {\n id?: string;\n\n // program props\n // vs,\n // fs,\n varyings?: string[];\n bufferMode?;\n\n program?: Program;\n modules?: any[];\n defines?: Record<string, number | boolean>;\n inject?: Record<string, any>;\n transpileToGLSL100?: boolean;\n\n moduleSettings?: object; // UniformsOptions\n attributes?: object;\n uniforms?: object; // Uniforms\n geometry?: object; // Geometry\n vertexCount?: number\n drawMode?: number\n isInstanced?: boolean\n instanceCount?: number\n programManager?: ProgramManager\n onBeforeRender?: () => void\n onAfterRender?: () => void\n _feedbackBuffers?: object; // FeedbackBuffers\n\n // Deprecated?\n isIndexed?: boolean;\n indexType?;\n indexOffset?: number;\n vertexArrayInstanced?: boolean;\n\n /** @deprecated Use isInstanced */\n instanced?: boolean\n};\n\n\nexport type ModelDrawOptions = {\n moduleSettings?;\n framebuffer?;\n uniforms?;\n attributes?;\n transformFeedback?;\n parameters?;\n vertexArray?;\n};\n\n/* TODO - from autogenerated declarations, copy types and delete\ninterface ModelProps extends ProgramProps {\n id?: string\n moduleSettings?: UniformsOptions\n uniforms?: Uniforms\n geometry?: Geometry\n vertexCount?: number\n drawMode?: number\n programManager?: ProgramManager\n onBeforeRender?: () => void\n onAfterRender?: () => void\n _feedbackBuffers?: FeedbackBuffers\n}\n\ninterface DrawOpts {\n moduleSettings?: UniformsOptions\n framebuffer: Framebuffer\n uniforms?: Uniforms\n attributes?: Attributes\n parameters?: Parameters\n transformFeedback?: TransformFeedback\n vertexArray?: VertexArray\n}\n\ninterface ClearOpts {\n framebuffer?: Framebuffer\n color?: boolean\n depth?: boolean\n stencil?: boolean\n}\n\ninterface TransformOpts extends DrawOpts {\n discard: boolean\n feedbackBuffers: FeedbackBuffers\n unbindModels: Array<Model>\n parameters: Parameters\n}\n*/\n\nexport default class Model {\n readonly device: Device;\n readonly gl: WebGLRenderingContext;\n\n readonly id: string;\n readonly animated: boolean = false;\n programManager: ProgramManager;\n vertexCount: number;\n\n lastLogTime: number = 0; // TODO - move to probe.gl\n\n props: ModelProps;\n userData: Record<string, any> = {};\n needsRedraw: boolean = true;\n attributes: Record<string, any> = {};\n _attributes: Record<string, any> = {};\n uniforms: Record<string, any> = {};\n\n drawMode;\n instanceCount: number;\n pickable: boolean = true;\n\n programProps: ProgramProps & {program?: Program; modules; inject; defines; varyings; bufferMode; transpileToGLSL100;};\n vertexArray: VertexArray;\n program: Program;\n transformFeedback: TransformFeedback | undefined;\n _programDirty = true;\n _programManagerState;\n _managedProgram;\n\n // Track buffers created by setGeometry\n geometryBuffers = {};\n // geometry might have set drawMode and vertexCount\n isInstanced: boolean;\n // TODO - just to unbreak deck.gl 7.0-beta, remove as soon as updated\n geometry = {};\n\n constructor(device: Device, props?: ModelProps);\n /* @deprecated */\n constructor(gl: WebGLRenderingContext, props?: ModelProps);\n constructor(device, props: ModelProps = {}) {\n // Deduce a helpful id\n const {id = uid('model')} = props;\n this.id = id;\n const webglDevice = WebGLDevice.attach(device);\n this.device = webglDevice;\n this.gl = webglDevice.gl;\n this.id = props.id || uid('Model');\n this.initialize(props);\n }\n\n initialize(props: ModelProps) {\n this.props = {};\n\n this.programManager = props.programManager || ProgramManager.getDefaultProgramManager(this.device);\n this._programManagerState = -1;\n this._managedProgram = false;\n\n const {\n program = null,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = props;\n\n this.programProps = {\n program,\n modules,\n vs,\n fs,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n };\n this.program = null;\n this.vertexArray = null;\n this._programDirty = true;\n\n // Initialize state\n this.userData = {};\n this.needsRedraw = true;\n\n // Attributes and buffers\n // Model manages auto Buffer creation from typed arrays\n this._attributes = {}; // All attributes\n this.attributes = {}; // User defined attributes\n\n // Model manages uniform animation\n this.uniforms = {};\n\n // picking options\n this.pickable = true;\n\n this._checkProgram();\n\n this.setUniforms(\n Object.assign(\n {},\n this.getModuleUniforms(props.moduleSettings) // Get unforms for supplied parameters\n )\n );\n\n this.drawMode = props.drawMode !== undefined ? props.drawMode : GL.TRIANGLES;\n this.vertexCount = props.vertexCount || 0;\n\n // Track buffers created by setGeometry\n this.geometryBuffers = {};\n\n // geometry might have set drawMode and vertexCount\n this.isInstanced = props.isInstanced || props.instanced || props.instanceCount > 0;\n\n this._setModelProps(props);\n\n // TODO - just to unbreak deck.gl 7.0-beta, remove as soon as updated\n this.geometry = {};\n\n // assert(program || program instanceof Program);\n assert(this.drawMode !== undefined && Number.isFinite(this.vertexCount), ERR_MODEL_PARAMS);\n }\n\n setProps(props) {\n this._setModelProps(props);\n }\n\n destroy(): void {\n // delete all attributes created by this model\n // TODO - should buffer deletes be handled by vertex array?\n for (const key in this._attributes) {\n if (this._attributes[key] !== this.attributes[key]) {\n this._attributes[key].delete();\n }\n }\n\n if (this._managedProgram) {\n this.programManager.release(this.program);\n this._managedProgram = false;\n }\n\n this.vertexArray.delete();\n\n this._deleteGeometryBuffers();\n }\n\n /** @deprecated Use .destroy() */\n delete(): void {\n this.destroy();\n }\n\n // GETTERS\n\n getDrawMode() {\n return this.drawMode;\n }\n\n getVertexCount(): number {\n return this.vertexCount;\n }\n\n getInstanceCount(): number {\n return this.instanceCount;\n }\n\n getAttributes() {\n return this.attributes;\n }\n\n getProgram(): Program {\n return this.program;\n }\n\n setProgram(props): void {\n const {program, vs, fs, modules, defines, inject, varyings, bufferMode, transpileToGLSL100} =\n props;\n this.programProps = {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n transpileToGLSL100\n };\n this._programDirty = true;\n }\n\n getUniforms() {\n return this.uniforms;\n }\n\n // SETTERS\n\n setDrawMode(drawMode): this {\n this.drawMode = drawMode;\n return this;\n }\n\n setVertexCount(vertexCount): this {\n assert(Number.isFinite(vertexCount));\n this.vertexCount = vertexCount;\n return this;\n }\n\n setInstanceCount(instanceCount): this {\n assert(Number.isFinite(instanceCount));\n this.instanceCount = instanceCount;\n return this;\n }\n\n setGeometry(geometry): this {\n this.drawMode = geometry.drawMode;\n this.vertexCount = geometry.getVertexCount();\n\n this._deleteGeometryBuffers();\n\n this.geometryBuffers = getBuffersFromGeometry(this.gl, geometry);\n this.vertexArray.setAttributes(this.geometryBuffers);\n return this;\n }\n\n setAttributes(attributes = {}): this {\n // Avoid setting needsRedraw if no attributes\n if (isObjectEmpty(attributes)) {\n return this;\n }\n\n const normalizedAttributes = {};\n for (const name in attributes) {\n const attribute = attributes[name];\n // The `getValue` call provides support for deck.gl `Attribute` class\n // TODO - remove once deck refactoring completes\n normalizedAttributes[name] = attribute.getValue ? attribute.getValue() : attribute;\n }\n\n this.vertexArray.setAttributes(normalizedAttributes);\n return this;\n }\n\n // TODO - should actually set the uniforms\n setUniforms(uniforms = {}): this {\n Object.assign(this.uniforms, uniforms);\n return this;\n }\n\n getModuleUniforms(opts?) {\n this._checkProgram();\n\n const getUniforms = this.programManager.getUniforms(this.program);\n\n if (getUniforms) {\n return getUniforms(opts);\n }\n\n return {};\n }\n\n updateModuleSettings(opts?): this {\n const uniforms = this.getModuleUniforms(opts || {});\n return this.setUniforms(uniforms);\n }\n\n // DRAW CALLS\n\n clear(opts): this {\n clear(this.program.gl, opts);\n return this;\n }\n\n draw(opts: ModelDrawOptions = {}): boolean {\n // Lazy update program and vertex array\n this._checkProgram();\n\n const {\n moduleSettings = null,\n framebuffer,\n uniforms = {},\n attributes = {},\n transformFeedback = this.transformFeedback,\n parameters = {},\n vertexArray = this.vertexArray\n } = opts;\n\n // Update model with any just provided attributes, settings or uniforms\n this.setAttributes(attributes);\n this.updateModuleSettings(moduleSettings);\n this.setUniforms(uniforms);\n\n let logPriority;\n\n if (log.priority >= LOG_DRAW_PRIORITY) {\n logPriority = this._logDrawCallStart(LOG_DRAW_PRIORITY);\n }\n\n const drawParams = this.vertexArray.getDrawParams();\n const {\n isIndexed = drawParams.isIndexed,\n indexType = drawParams.indexType,\n indexOffset = drawParams.indexOffset,\n vertexArrayInstanced = drawParams.isInstanced\n } = this.props;\n\n if (vertexArrayInstanced && !this.isInstanced) {\n log.warn('Found instanced attributes on non-instanced model', this.id)();\n }\n\n const {isInstanced, instanceCount} = this;\n\n const {onBeforeRender = NOOP, onAfterRender = NOOP} = this.props;\n\n onBeforeRender();\n\n this.program.setUniforms(this.uniforms);\n\n const didDraw = this.program.draw(\n Object.assign(DRAW_PARAMS, opts, {\n logPriority,\n uniforms: null, // Already set (may contain \"function values\" not understood by Program)\n framebuffer,\n parameters,\n drawMode: this.getDrawMode(),\n vertexCount: this.getVertexCount(),\n vertexArray,\n transformFeedback,\n isIndexed,\n indexType,\n isInstanced,\n instanceCount,\n offset: isIndexed ? indexOffset : 0\n })\n );\n\n onAfterRender();\n\n if (log.priority >= LOG_DRAW_PRIORITY) {\n this._logDrawCallEnd(logPriority, vertexArray, framebuffer);\n }\n\n return didDraw;\n }\n\n // Draw call for transform feedback, TBD...\n transform(opts: ModelDrawOptions = {}): this {\n // @ts-expect-error\n const {discard = true, feedbackBuffers, unbindModels = []} = opts;\n\n let {parameters} = opts;\n\n if (feedbackBuffers) {\n this._setFeedbackBuffers(feedbackBuffers);\n }\n\n if (discard) {\n parameters = Object.assign({}, parameters, {[GL.RASTERIZER_DISCARD]: discard});\n }\n\n unbindModels.forEach((model) => model.vertexArray.unbindBuffers());\n try {\n this.draw(Object.assign({}, opts, {parameters}));\n } finally {\n unbindModels.forEach((model) => model.vertexArray.bindBuffers());\n }\n\n return this;\n }\n\n // DEPRECATED METHODS\n\n render(uniforms = {}): boolean {\n log.warn('Model.render() is deprecated. Use Model.setUniforms() and Model.draw()')();\n return this.setUniforms(uniforms).draw();\n }\n\n // PRIVATE METHODS\n\n _setModelProps(props): void {\n Object.assign(this.props, props);\n\n if ('uniforms' in props) {\n this.setUniforms(props.uniforms);\n }\n\n if ('pickable' in props) {\n this.pickable = props.pickable;\n }\n\n if ('instanceCount' in props) {\n this.instanceCount = props.instanceCount;\n }\n if ('geometry' in props) {\n this.setGeometry(props.geometry);\n }\n\n // webgl settings\n if ('attributes' in props) {\n this.setAttributes(props.attributes);\n }\n if ('_feedbackBuffers' in props) {\n this._setFeedbackBuffers(props._feedbackBuffers);\n }\n }\n\n _checkProgram(): void {\n const needsUpdate =\n this._programDirty || this.programManager.stateHash !== this._programManagerState;\n\n if (!needsUpdate) {\n return;\n }\n\n let {program} = this.programProps;\n\n if (program) {\n this._managedProgram = false;\n } else {\n const {vs, fs, modules, inject, defines, varyings, bufferMode, transpileToGLSL100} =\n this.programProps;\n program = this.programManager.get({\n // @ts-expect-error\n vs,\n // @ts-expect-error\n fs,\n modules,\n inject,\n defines,\n varyings,\n bufferMode,\n transpileToGLSL100\n });\n if (this.program && this._managedProgram) {\n this.programManager.release(this.program);\n }\n this._programManagerState = this.programManager.stateHash;\n this._managedProgram = true;\n }\n\n assert(program instanceof Program, 'Model needs a program');\n\n this._programDirty = false;\n\n if (program === this.program) {\n return;\n }\n\n this.program = program;\n\n if (this.vertexArray) {\n this.vertexArray.setProps({program: this.program, attributes: this.vertexArray.attributes});\n } else {\n this.vertexArray = new VertexArray(this.gl, {program: this.program});\n }\n\n // Make sure we have some reasonable default uniforms in place\n this.setUniforms(\n Object.assign(\n {},\n this.getModuleUniforms() // Get all default uniforms,\n )\n );\n }\n\n _deleteGeometryBuffers(): void {\n for (const name in this.geometryBuffers) {\n // Buffer is raw value (for indices) or first element of [buffer, accessor] pair\n const buffer = this.geometryBuffers[name][0] || this.geometryBuffers[name];\n if (buffer instanceof Buffer) {\n buffer.destroy();\n }\n }\n }\n\n // Updates (evaluates) all function valued uniforms based on a new set of animationProps\n // experimental\n _setAnimationProps(animationProps): void {\n if (this.animated) {\n assert(animationProps, 'Model.draw(): animated uniforms but no animationProps');\n // const animatedUniforms = this._evaluateAnimateUniforms(animationProps);\n // Object.assign(this.uniforms, animatedUniforms);\n }\n }\n\n // Transform Feedback\n\n _setFeedbackBuffers(feedbackBuffers = {}): this {\n // Avoid setting needsRedraw if no feedbackBuffers\n if (isObjectEmpty(feedbackBuffers)) {\n return this;\n }\n\n const {gl} = this.program;\n this.transformFeedback =\n this.transformFeedback ||\n new TransformFeedback(gl, {\n program: this.program\n });\n\n this.transformFeedback.setBuffers(feedbackBuffers);\n return this;\n }\n\n _logDrawCallStart(logLevel: number): number {\n const logDrawTimeout = logLevel > 3 ? 0 : LOG_DRAW_TIMEOUT;\n if (Date.now() - this.lastLogTime < logDrawTimeout) {\n return undefined;\n }\n\n this.lastLogTime = Date.now();\n\n log.group(LOG_DRAW_PRIORITY, `>>> DRAWING MODEL ${this.id}`, {collapsed: log.level <= 2})();\n\n return logLevel;\n }\n\n _logDrawCallEnd(logLevel, vertexArray, uniforms, framebuffer?): void {\n // HACK: logLevel === undefined means logDrawCallStart didn't run\n if (logLevel === undefined) {\n return;\n }\n\n const attributeTable = getDebugTableForVertexArray({\n vertexArray,\n header: `${this.id} attributes`,\n // @ts-expect-error\n attributes: this._attributes\n });\n\n const {\n table: uniformTable,\n unusedTable,\n unusedCount\n } = getDebugTableForUniforms({\n header: `${this.id} uniforms`,\n program: this.program,\n uniforms: Object.assign({}, this.program.uniforms, uniforms)\n });\n\n // log missing uniforms\n const {table: missingTable, count: missingCount} = getDebugTableForUniforms({\n header: `${this.id} uniforms`,\n program: this.program,\n uniforms: Object.assign({}, this.program.uniforms, uniforms),\n undefinedOnly: true\n });\n\n if (missingCount > 0) {\n log.log('MISSING UNIFORMS', Object.keys(missingTable))();\n // log.table(logLevel, missingTable)();\n }\n if (unusedCount > 0) {\n log.log('UNUSED UNIFORMS', Object.keys(unusedTable))();\n // log.log(logLevel, 'Unused uniforms ', unusedTable)();\n }\n\n const configTable = getDebugTableForProgramConfiguration(this.vertexArray.configuration);\n\n log.table(logLevel, attributeTable)();\n\n log.table(logLevel, uniformTable)();\n\n log.table(logLevel + 1, configTable)();\n\n if (framebuffer) {\n framebuffer.log({logLevel: LOG_DRAW_PRIORITY, message: `Rendered to ${framebuffer.id}`});\n }\n\n log.groupEnd(LOG_DRAW_PRIORITY)();\n }\n}\n"],"file":"model.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/model.ts"],"names":["RenderPipeline","getAttributeBuffersFromGeometry","getIndexBufferFromGeometry","PipelineFactory","DEFAULT_MODEL_PROPS","_DEFAULT_PROPS","vs","undefined","fs","id","handle","userData","modules","moduleSettings","geometry","Model","constructor","device","props","getShaderSource","vertexCount","topology","renderPipeline","getUniforms","getDefaultPipelineFactory","createRenderPipeline","parameters","layout","pipeline","_getModuleUniforms","_setGeometry","setUniforms","setProps","destroy","draw","renderPass","instanceCount","indices","setIndexBuffer","attributes","setAttributes","bindings","setBindings","uniforms","updateModuleSettings","Object","assign","geometryBuffers","indexBuffer","shader","info","type","wgsl","Error","glsl"],"mappings":"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","sourcesContent":["import type {Device, Buffer, RenderPipelineProps, RenderPass, Binding} from '@luma.gl/api';\nimport {RenderPipeline, Shader, cast} from '@luma.gl/api';\nimport type { ShaderModule } from '@luma.gl/shadertools';\nimport type Geometry from '../geometry/geometry';\nimport {getAttributeBuffersFromGeometry, getIndexBufferFromGeometry} from './model-utils';\nimport PipelineFactory from './pipeline-factory';\n\nexport type ModelProps = Omit<RenderPipelineProps, 'vs' | 'fs'> & {\n // Model also accepts a string\n vs?: {glsl?: string; wgsl?: string} | string;\n fs?: {glsl?: string; wgsl?: string} | string;\n modules?: ShaderModule[];\n moduleSettings?: Record<string, Record<string, any>>;\n geometry?: Geometry;\n};\n\nconst DEFAULT_MODEL_PROPS: Required<ModelProps> = {\n ...RenderPipeline._DEFAULT_PROPS,\n vs: undefined,\n fs: undefined,\n id: 'unnamed',\n handle: undefined,\n userData: {},\n modules: [],\n moduleSettings: {},\n geometry: undefined\n};\n\n/** v9 API */\nexport default class Model {\n readonly device: Device;\n readonly pipeline: RenderPipeline;\n readonly id: string;\n readonly vs: string;\n readonly fs: string | undefined;\n readonly topology: string;\n readonly vertexCount;\n props: Required<ModelProps>;\n\n private _getModuleUniforms: (props?: Record<string, Record<string, any>>) => Record<string, any>;\n\n constructor(device: Device, props: ModelProps) {\n this.props = {...DEFAULT_MODEL_PROPS, ...props};\n props = this.props;\n this.id = props.id;\n this.device = device;\n\n // Create the pipeline\n this.vs = getShaderSource(this.device, props.vs);\n if (props.fs) {\n this.fs = getShaderSource(this.device, props.fs);\n }\n\n this.vertexCount = this.props.vertexCount;\n this.topology = this.props.topology;\n\n if (this.props.geometry) {\n this.vertexCount = this.props.geometry.vertexCount;\n this.topology = this.props.geometry.topology;\n }\n\n const {renderPipeline, getUniforms} = PipelineFactory.getDefaultPipelineFactory(this.device).createRenderPipeline({\n ...this.props,\n vs: this.vs,\n fs: this.fs,\n topology: this.topology,\n parameters: props.parameters,\n // Geometry in the vertex shader!\n // @ts-expect-error\n layout: props.layout\n });\n\n this.pipeline = renderPipeline;\n this._getModuleUniforms = getUniforms;\n\n if (this.props.geometry) {\n this._setGeometry(this.props.geometry);\n }\n this.setUniforms(this._getModuleUniforms()) // Get all default module uniforms\n this.setProps(this.props);\n }\n\n destroy(): void {\n this.pipeline.destroy();\n }\n\n draw(renderPass?: RenderPass): this {\n this.pipeline.draw({\n renderPass,\n vertexCount: this.vertexCount,\n instanceCount: this.props.instanceCount\n });\n return this;\n }\n\n setProps(props: ModelProps): this {\n if (props.indices) {\n this.setIndexBuffer(props.indices);\n }\n if (props.attributes) {\n this.setAttributes(props.attributes);\n }\n if (props.bindings) {\n this.setBindings(props.bindings);\n }\n if (props.uniforms) {\n this.setUniforms(props.uniforms);\n }\n if (props.moduleSettings) {\n this.updateModuleSettings(props.moduleSettings);\n }\n return this;\n }\n\n updateModuleSettings(props: Record<string, any>): this {\n const uniforms = this._getModuleUniforms(props);\n this.setUniforms(uniforms);\n return this;\n }\n\n setIndexBuffer(indices: Buffer): this {\n this.pipeline.setIndexBuffer(indices);\n // this._indices = indices;\n return this;\n }\n\n setAttributes(attributes: Record<string, Buffer>): this {\n this.pipeline.setAttributes(attributes);\n Object.assign(this.props.attributes, attributes);\n return this;\n }\n\n /** Set the bindings */\n setBindings(bindings: Record<string, Binding>): this {\n this.pipeline.setBindings(bindings);\n Object.assign(this.props.bindings, bindings);\n return this;\n }\n\n setUniforms(uniforms: Record<string, any>): this {\n this.pipeline.setUniforms(uniforms);\n Object.assign(this.props.uniforms, uniforms);\n return this;\n }\n\n _setGeometry(geometry: Geometry): void {\n // this._deleteGeometryBuffers();\n\n const geometryBuffers = getAttributeBuffersFromGeometry(this.device, geometry);\n this.setAttributes(geometryBuffers);\n\n const indexBuffer = getIndexBufferFromGeometry(this.device, geometry);\n if (indexBuffer) {\n this.setIndexBuffer(indexBuffer);\n }\n }\n}\n\n/** Create a shader from the different overloads */\nfunction getShaderSource(device: Device, shader: string | {glsl?: string; wgsl?: string}): string {\n // TODO - detect WGSL/GLSL and throw an error if not supported\n if (typeof shader === 'string') {\n return shader;\n }\n\n switch (device.info.type) {\n case 'webgpu':\n if (shader?.wgsl) {\n return shader.wgsl;\n }\n throw new Error('WebGPU does not support GLSL shaders');\n\n default:\n if (shader?.glsl) {\n return shader.glsl;\n }\n throw new Error('WebGL does not support WGSL shaders');\n }\n}\n"],"file":"model.js"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { RenderPipelineParameters } from '@luma.gl/api';
|
|
2
|
+
import { Device, RenderPipeline } from '@luma.gl/api/';
|
|
3
|
+
import type { ShaderModule } from '@luma.gl/shadertools';
|
|
4
|
+
export declare type GetRenderPipelineOptions = {
|
|
5
|
+
vs: string;
|
|
6
|
+
fs: string;
|
|
7
|
+
topology: any;
|
|
8
|
+
parameters?: RenderPipelineParameters;
|
|
9
|
+
modules?: ShaderModule[];
|
|
10
|
+
defines?: Record<string, string>;
|
|
11
|
+
inject?: Record<string, string>;
|
|
12
|
+
transpileToGLSL100?: boolean;
|
|
13
|
+
varyings?: string[];
|
|
14
|
+
bufferMode?: number;
|
|
15
|
+
};
|
|
16
|
+
export declare type GetComputePipelineOptions = {
|
|
17
|
+
cs: string;
|
|
18
|
+
parameters?: RenderPipelineParameters;
|
|
19
|
+
modules?: ShaderModule[];
|
|
20
|
+
defines?: Record<string, string>;
|
|
21
|
+
inject?: Record<string, string>;
|
|
22
|
+
transpileToGLSL100?: boolean;
|
|
23
|
+
varyings?: string[];
|
|
24
|
+
bufferMode?: number;
|
|
25
|
+
};
|
|
26
|
+
/** Efficiently create shared pipelines with varying parameters */
|
|
27
|
+
export default class PipelineFactory {
|
|
28
|
+
readonly device: Device;
|
|
29
|
+
stateHash: number;
|
|
30
|
+
private _hashCounter;
|
|
31
|
+
private readonly _hashes;
|
|
32
|
+
private readonly _useCounts;
|
|
33
|
+
private readonly _pipelineCache;
|
|
34
|
+
private readonly _getUniforms;
|
|
35
|
+
private readonly _hookFunctions;
|
|
36
|
+
private _defaultModules;
|
|
37
|
+
static getDefaultPipelineFactory(device: Device): PipelineFactory;
|
|
38
|
+
constructor(device: Device);
|
|
39
|
+
addShaderHook(hook: any, opts?: any): void;
|
|
40
|
+
createRenderPipeline(options: GetRenderPipelineOptions): {
|
|
41
|
+
renderPipeline: RenderPipeline;
|
|
42
|
+
getUniforms: (props: Record<string, Record<string, any>>) => Record<string, any>;
|
|
43
|
+
};
|
|
44
|
+
release(pipeline: RenderPipeline): void;
|
|
45
|
+
getUniforms(pipeline: RenderPipeline): any;
|
|
46
|
+
_createRenderPipeline(props: GetRenderPipelineOptions): {
|
|
47
|
+
renderPipeline: RenderPipeline;
|
|
48
|
+
getUniforms: (props: Record<string, Record<string, any>>) => Record<string, any>;
|
|
49
|
+
};
|
|
50
|
+
/** Calculate a hash based on all the inputs for a render pipeline */
|
|
51
|
+
_hashRenderPipeline(props: GetRenderPipelineOptions): string;
|
|
52
|
+
_getHash(key: string): number;
|
|
53
|
+
_getModuleList(appModules?: ShaderModule[]): ShaderModule[];
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=pipeline-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-factory.d.ts","sourceRoot":"","sources":["../../src/lib/pipeline-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,wBAAwB,EAAC,MAAM,cAAc,CAAC;AAChF,OAAO,EAAC,MAAM,EAAE,cAAc,EAAkB,MAAM,eAAe,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,oBAAY,wBAAwB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,MAAC;IACT,UAAU,CAAC,EAAE,wBAAwB,CAAC;IAEtC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,oBAAY,yBAAyB,GAAG;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,wBAAwB,CAAC;IAEtC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAgBF,kEAAkE;AAClE,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,SAAS,EAAE,MAAM,CAAK;IACtB,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IAEzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;IAErE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAa;IAC5C,OAAO,CAAC,eAAe,CAAa;IAGpC,MAAM,CAAC,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;gBAOrD,MAAM,EAAE,MAAM;IAiB1B,aAAa,CAAC,IAAI,KAAA,EAAE,IAAI,CAAC,KAAA,GAAG,IAAI;IAQhC,oBAAoB,CAAC,OAAO,EAAE,wBAAwB,GAAG;QACvD,cAAc,EAAE,cAAc,CAAC;QAC/B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClF;IAuBD,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAWvC,WAAW,CAAC,QAAQ,EAAE,cAAc;IAMpC,qBAAqB,CAAC,KAAK,EAAE,wBAAwB,GAAG;QACtD,cAAc,EAAE,cAAc,CAAC;QAC/B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KACjF;IAiBD,qEAAqE;IACrE,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM;IAgC5D,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAQ7B,cAAc,CAAC,UAAU,GAAE,YAAY,EAAO,GAAG,YAAY,EAAE;CAyBhE"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import { assembleShaders } from '@luma.gl/shadertools';
|
|
3
|
+
const DEFAULT_RENDER_PIPELINE_OPTIONS = {
|
|
4
|
+
vs: '',
|
|
5
|
+
fs: '',
|
|
6
|
+
modules: [],
|
|
7
|
+
defines: {},
|
|
8
|
+
inject: {},
|
|
9
|
+
transpileToGLSL100: false,
|
|
10
|
+
varyings: [],
|
|
11
|
+
bufferMode: 0x8c8d,
|
|
12
|
+
topology: 'triangle-list',
|
|
13
|
+
parameters: {}
|
|
14
|
+
};
|
|
15
|
+
export default class PipelineFactory {
|
|
16
|
+
static getDefaultPipelineFactory(device) {
|
|
17
|
+
device.defaultPipelineFactory = device.defaultPipelineFactory || new PipelineFactory(device);
|
|
18
|
+
return device.defaultPipelineFactory;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
constructor(device) {
|
|
22
|
+
_defineProperty(this, "device", void 0);
|
|
23
|
+
|
|
24
|
+
_defineProperty(this, "stateHash", 0);
|
|
25
|
+
|
|
26
|
+
_defineProperty(this, "_hashCounter", 0);
|
|
27
|
+
|
|
28
|
+
_defineProperty(this, "_hashes", {});
|
|
29
|
+
|
|
30
|
+
_defineProperty(this, "_useCounts", {});
|
|
31
|
+
|
|
32
|
+
_defineProperty(this, "_pipelineCache", {});
|
|
33
|
+
|
|
34
|
+
_defineProperty(this, "_getUniforms", {});
|
|
35
|
+
|
|
36
|
+
_defineProperty(this, "_hookFunctions", []);
|
|
37
|
+
|
|
38
|
+
_defineProperty(this, "_defaultModules", []);
|
|
39
|
+
|
|
40
|
+
this.device = device;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
addShaderHook(hook, opts) {
|
|
44
|
+
if (opts) {
|
|
45
|
+
hook = Object.assign(opts, {
|
|
46
|
+
hook
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
this._hookFunctions.push(hook);
|
|
51
|
+
|
|
52
|
+
this.stateHash++;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
createRenderPipeline(options) {
|
|
56
|
+
const props = { ...DEFAULT_RENDER_PIPELINE_OPTIONS,
|
|
57
|
+
...options
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const modules = this._getModuleList(props.modules);
|
|
61
|
+
|
|
62
|
+
const hash = this._hashRenderPipeline({ ...props,
|
|
63
|
+
modules
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
if (!this._pipelineCache[hash]) {
|
|
67
|
+
const {
|
|
68
|
+
renderPipeline,
|
|
69
|
+
getUniforms
|
|
70
|
+
} = this._createRenderPipeline({ ...props,
|
|
71
|
+
modules
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
renderPipeline.hash = hash;
|
|
75
|
+
this._pipelineCache[hash] = renderPipeline;
|
|
76
|
+
|
|
77
|
+
this._getUniforms[hash] = getUniforms || (x => {});
|
|
78
|
+
|
|
79
|
+
this._useCounts[hash] = 0;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
this._useCounts[hash]++;
|
|
83
|
+
return {
|
|
84
|
+
renderPipeline: this._pipelineCache[hash],
|
|
85
|
+
getUniforms: this._getUniforms[hash]
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
release(pipeline) {
|
|
90
|
+
const hash = pipeline.hash;
|
|
91
|
+
this._useCounts[hash]--;
|
|
92
|
+
|
|
93
|
+
if (this._useCounts[hash] === 0) {
|
|
94
|
+
this._pipelineCache[hash].destroy();
|
|
95
|
+
|
|
96
|
+
delete this._pipelineCache[hash];
|
|
97
|
+
delete this._getUniforms[hash];
|
|
98
|
+
delete this._useCounts[hash];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
getUniforms(pipeline) {
|
|
103
|
+
return this._getUniforms[pipeline.hash] || null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
_createRenderPipeline(props) {
|
|
107
|
+
const platformInfo = {
|
|
108
|
+
gpu: this.device.info.gpu,
|
|
109
|
+
features: this.device.features
|
|
110
|
+
};
|
|
111
|
+
const assembled = assembleShaders(platformInfo, { ...props,
|
|
112
|
+
hookFunctions: this._hookFunctions
|
|
113
|
+
});
|
|
114
|
+
const renderPipeline = this.device.createRenderPipeline({ ...props,
|
|
115
|
+
vs: this.device.createShader({
|
|
116
|
+
stage: 'vertex',
|
|
117
|
+
source: assembled.vs
|
|
118
|
+
}),
|
|
119
|
+
fs: assembled.fs && this.device.createShader({
|
|
120
|
+
stage: 'fragment',
|
|
121
|
+
source: assembled.fs
|
|
122
|
+
})
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
renderPipeline,
|
|
126
|
+
getUniforms: assembled.getUniforms
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
_hashRenderPipeline(props) {
|
|
131
|
+
const vsHash = this._getHash(props.vs);
|
|
132
|
+
|
|
133
|
+
const fsHash = this._getHash(props.fs);
|
|
134
|
+
|
|
135
|
+
const moduleHashes = props.modules.map(m => this._getHash(typeof m === 'string' ? m : m.name)).sort();
|
|
136
|
+
const varyingHashes = props.varyings.map(v => this._getHash(v));
|
|
137
|
+
const defineKeys = Object.keys(props.defines).sort();
|
|
138
|
+
const injectKeys = Object.keys(props.inject).sort();
|
|
139
|
+
const defineHashes = [];
|
|
140
|
+
const injectHashes = [];
|
|
141
|
+
|
|
142
|
+
for (const key of defineKeys) {
|
|
143
|
+
defineHashes.push(this._getHash(key));
|
|
144
|
+
defineHashes.push(this._getHash(props.defines[key]));
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
for (const key of injectKeys) {
|
|
148
|
+
injectHashes.push(this._getHash(key));
|
|
149
|
+
injectHashes.push(this._getHash(props.inject[key]));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const parameterHash = JSON.stringify(props.parameters);
|
|
153
|
+
return "".concat(vsHash, "/").concat(fsHash, "D").concat(defineHashes.join('/'), "M").concat(moduleHashes.join('/'), "I").concat(injectHashes.join('/'), "V").concat(varyingHashes.join('/'), "H").concat(this.stateHash, "B").concat(props.bufferMode).concat(props.transpileToGLSL100 ? 'T' : '', "P").concat(parameterHash);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
_getHash(key) {
|
|
157
|
+
if (this._hashes[key] === undefined) {
|
|
158
|
+
this._hashes[key] = this._hashCounter++;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return this._hashes[key];
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
_getModuleList(appModules = []) {
|
|
165
|
+
const modules = new Array(this._defaultModules.length + appModules.length);
|
|
166
|
+
const seen = {};
|
|
167
|
+
let count = 0;
|
|
168
|
+
|
|
169
|
+
for (let i = 0, len = this._defaultModules.length; i < len; ++i) {
|
|
170
|
+
const module = this._defaultModules[i];
|
|
171
|
+
const name = module.name;
|
|
172
|
+
modules[count++] = module;
|
|
173
|
+
seen[name] = true;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
for (let i = 0, len = appModules.length; i < len; ++i) {
|
|
177
|
+
const module = appModules[i];
|
|
178
|
+
const name = module.name;
|
|
179
|
+
|
|
180
|
+
if (!seen[name]) {
|
|
181
|
+
modules[count++] = module;
|
|
182
|
+
seen[name] = true;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
modules.length = count;
|
|
187
|
+
return modules;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=pipeline-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/pipeline-factory.ts"],"names":["assembleShaders","DEFAULT_RENDER_PIPELINE_OPTIONS","vs","fs","modules","defines","inject","transpileToGLSL100","varyings","bufferMode","topology","parameters","PipelineFactory","getDefaultPipelineFactory","device","defaultPipelineFactory","constructor","addShaderHook","hook","opts","Object","assign","_hookFunctions","push","stateHash","createRenderPipeline","options","props","_getModuleList","hash","_hashRenderPipeline","_pipelineCache","renderPipeline","getUniforms","_createRenderPipeline","_getUniforms","x","_useCounts","release","pipeline","destroy","platformInfo","gpu","info","features","assembled","hookFunctions","createShader","stage","source","vsHash","_getHash","fsHash","moduleHashes","map","m","name","sort","varyingHashes","v","defineKeys","keys","injectKeys","defineHashes","injectHashes","key","parameterHash","JSON","stringify","join","_hashes","undefined","_hashCounter","appModules","Array","_defaultModules","length","seen","count","i","len","module"],"mappings":"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","sourcesContent":["import type {RenderPipelineProps, RenderPipelineParameters} from '@luma.gl/api';\nimport {Device, RenderPipeline, ComputePipeline} from '@luma.gl/api/';\nimport type { ShaderModule } from '@luma.gl/shadertools';\nimport {assembleShaders} from '@luma.gl/shadertools';\n\nexport type GetRenderPipelineOptions = {\n vs: string,\n fs: string,\n topology;\n parameters?: RenderPipelineParameters;\n\n modules?: ShaderModule[];\n defines?: Record<string, string>,\n inject?: Record<string, string>,\n transpileToGLSL100?: boolean;\n\n varyings?: string[],\n bufferMode?: number, \n};\n\nexport type GetComputePipelineOptions = {\n cs: string,\n parameters?: RenderPipelineParameters;\n\n modules?: ShaderModule[];\n defines?: Record<string, string>,\n inject?: Record<string, string>,\n transpileToGLSL100?: boolean;\n\n varyings?: string[],\n bufferMode?: number,\n};\n\nconst DEFAULT_RENDER_PIPELINE_OPTIONS: Required<GetRenderPipelineOptions> = {\n vs: '',\n fs: '',\n modules: [],\n defines: {},\n inject: {},\n transpileToGLSL100: false,\n\n varyings: [],\n bufferMode: 0x8c8d, // // varyings/bufferMode for xform feedback, 0x8c8d: SEPARATE_ATTRIBS\n topology: 'triangle-list',\n parameters: {} \n};\n\n/** Efficiently create shared pipelines with varying parameters */\nexport default class PipelineFactory {\n readonly device: Device;\n\n stateHash: number = 0; // Used to change hashing if hooks are modified\n private _hashCounter: number = 0;\n private readonly _hashes: Record<string, number> = {};\n private readonly _useCounts: Record<string, number> = {};\n\n private readonly _pipelineCache: Record<string, RenderPipeline> = {};\n\n private readonly _getUniforms: Record<string, any> = {};\n private readonly _hookFunctions: any[] = [];\n private _defaultModules: any[] = [];\n // private readonly _registeredModules = {}; // TODO: Remove? This isn't used anywhere in luma.gl\n\n static getDefaultPipelineFactory(device: Device): PipelineFactory {\n // @ts-expect-error Add to device\n device.defaultPipelineFactory = device.defaultPipelineFactory || new PipelineFactory(device);\n // @ts-expect-error Add to device\n return device.defaultPipelineFactory;\n }\n\n constructor(device: Device) {\n this.device = device;\n }\n\n // addDefaultModule(module: ShaderModule): void {\n // if (!this._defaultModules.find((m) => m.name === (typeof module === 'string' ? module : module.name))) {\n // this._defaultModules.push(module);\n // }\n // this.stateHash++;\n // }\n\n // removeDefaultModule(module: ShaderModule): void {\n // const moduleName = typeof module === 'string' ? module : module.name;\n // this._defaultModules = this._defaultModules.filter((m) => m.name !== moduleName);\n // this.stateHash++;\n // }\n\n addShaderHook(hook, opts?): void {\n if (opts) {\n hook = Object.assign(opts, {hook});\n }\n this._hookFunctions.push(hook);\n this.stateHash++;\n }\n\n createRenderPipeline(options: GetRenderPipelineOptions): {\n renderPipeline: RenderPipeline;\n getUniforms: (props: Record<string, Record<string, any>>) => Record<string, any>;\n } {\n const props: Required<GetRenderPipelineOptions> = {...DEFAULT_RENDER_PIPELINE_OPTIONS, ...options};\n\n const modules = this._getModuleList(props.modules); // Combine with default modules\n\n const hash = this._hashRenderPipeline({...props, modules});\n\n if (!this._pipelineCache[hash]) {\n const {renderPipeline, getUniforms} = this._createRenderPipeline({...props, modules});\n renderPipeline.hash = hash;\n this._pipelineCache[hash] = renderPipeline;\n this._getUniforms[hash] = getUniforms || ((x: Record<string, Record<string, any>>) => {});\n this._useCounts[hash] = 0;\n }\n\n this._useCounts[hash]++;\n\n return {\n renderPipeline: this._pipelineCache[hash],\n getUniforms: this._getUniforms[hash]\n };\n }\n\n release(pipeline: RenderPipeline): void {\n const hash = pipeline.hash;\n this._useCounts[hash]--;\n if (this._useCounts[hash] === 0) {\n this._pipelineCache[hash].destroy();\n delete this._pipelineCache[hash];\n delete this._getUniforms[hash];\n delete this._useCounts[hash];\n }\n }\n\n getUniforms(pipeline: RenderPipeline) {\n return this._getUniforms[pipeline.hash] || null;\n }\n\n // PRIVATE\n\n _createRenderPipeline(props: GetRenderPipelineOptions): {\n renderPipeline: RenderPipeline,\n getUniforms: (props: Record<string, Record<string, any>>) => Record<string, any>\n } {\n const platformInfo = {\n gpu: this.device.info.gpu,\n features: this.device.features\n };\n\n const assembled = assembleShaders(platformInfo, {...props, hookFunctions: this._hookFunctions});\n\n const renderPipeline = this.device.createRenderPipeline({\n ...props,\n vs: this.device.createShader({stage: 'vertex', source: assembled.vs}),\n fs: assembled.fs && this.device.createShader({stage: 'fragment', source: assembled.fs}),\n });\n\n return {renderPipeline, getUniforms: assembled.getUniforms};\n }\n\n /** Calculate a hash based on all the inputs for a render pipeline */\n _hashRenderPipeline(props: GetRenderPipelineOptions): string {\n const vsHash = this._getHash(props.vs);\n const fsHash = this._getHash(props.fs);\n\n const moduleHashes = props.modules.map((m) => this._getHash(typeof m === 'string' ? m : m.name)).sort();\n const varyingHashes = props.varyings.map((v) => this._getHash(v));\n\n const defineKeys = Object.keys(props.defines).sort();\n const injectKeys = Object.keys(props.inject).sort();\n const defineHashes = [];\n const injectHashes = [];\n\n for (const key of defineKeys) {\n defineHashes.push(this._getHash(key));\n defineHashes.push(this._getHash(props.defines[key]));\n }\n\n for (const key of injectKeys) {\n injectHashes.push(this._getHash(key));\n injectHashes.push(this._getHash(props.inject[key]));\n }\n\n // TODO - hash parameters!\n const parameterHash = JSON.stringify(props.parameters);\n\n return `${vsHash}/${fsHash}D${defineHashes.join('/')}M${moduleHashes.join(\n '/'\n )}I${injectHashes.join('/')}V${varyingHashes.join('/')}H${this.stateHash}B${props.bufferMode}${\n props.transpileToGLSL100 ? 'T' : ''\n }P${parameterHash}`;\n }\n\n _getHash(key: string): number {\n if (this._hashes[key] === undefined) {\n this._hashes[key] = this._hashCounter++;\n }\n return this._hashes[key];\n }\n\n // Dedupe and combine with default modules\n _getModuleList(appModules: ShaderModule[] = []): ShaderModule[] {\n const modules = new Array(this._defaultModules.length + appModules.length);\n const seen: Record<string, boolean> = {};\n let count = 0;\n\n for (let i = 0, len = this._defaultModules.length; i < len; ++i) {\n const module = this._defaultModules[i];\n const name = module.name;\n modules[count++] = module;\n seen[name] = true;\n }\n\n for (let i = 0, len = appModules.length; i < len; ++i) {\n const module = appModules[i];\n const name = module.name;\n if (!seen[name]) {\n modules[count++] = module;\n seen[name] = true;\n }\n }\n\n modules.length = count;\n\n return modules;\n }\n}\n"],"file":"pipeline-factory.js"}
|
|
@@ -1,27 +1,14 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DeviceProps } from '@luma.gl/api';
|
|
2
|
+
import type { AnimationProps } from '../lib/animation-props';
|
|
2
3
|
import AnimationLoop from './animation-loop';
|
|
3
4
|
/**
|
|
4
5
|
* Minimal animation loop that initializes models in constructor
|
|
5
6
|
* Simplifying type management
|
|
7
|
+
* v9 API
|
|
6
8
|
*/
|
|
7
9
|
export declare abstract class RenderLoop {
|
|
8
10
|
constructor(animationProps?: AnimationProps);
|
|
9
|
-
onRender(animationProps: AnimationProps): void;
|
|
10
|
-
onFinalize(animationProps: AnimationProps): void;
|
|
11
|
-
static getAnimationLoop(RenderLoopConstructor: typeof RenderLoop): WrappedAnimationLoop;
|
|
12
11
|
/** Instantiates and runs the render loop */
|
|
13
|
-
static run(RenderLoopConstructor: typeof RenderLoop,
|
|
14
|
-
start?: boolean;
|
|
15
|
-
}): WrappedAnimationLoop;
|
|
12
|
+
static run(RenderLoopConstructor: typeof RenderLoop, deviceProps?: DeviceProps): AnimationLoop;
|
|
16
13
|
}
|
|
17
|
-
declare class WrappedAnimationLoop extends AnimationLoop {
|
|
18
|
-
RenderLoopConstructor: typeof RenderLoop;
|
|
19
|
-
renderLoop: RenderLoop;
|
|
20
|
-
getInfo(): any;
|
|
21
|
-
constructor(RenderLoopConstructor: typeof RenderLoop);
|
|
22
|
-
onInitialize(animationProps: AnimationProps): void;
|
|
23
|
-
onRender(animationProps: AnimationProps): void;
|
|
24
|
-
onFinalize(animationProps: AnimationProps): void;
|
|
25
|
-
}
|
|
26
|
-
export {};
|
|
27
14
|
//# sourceMappingURL=render-loop.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-loop.d.ts","sourceRoot":"","sources":["../../src/lib/render-loop.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render-loop.d.ts","sourceRoot":"","sources":["../../src/lib/render-loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,wBAAwB,CAAC;AAC3D,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAE7C;;;;GAIG;AACH,8BAAsB,UAAU;gBAClB,cAAc,CAAC,EAAE,cAAc;IAE3C,4CAA4C;IAC5C,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,OAAO,UAAU,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,aAAa;CAS/F"}
|
package/dist/lib/render-loop.js
CHANGED
|
@@ -3,33 +3,22 @@ import AnimationLoop from './animation-loop';
|
|
|
3
3
|
export class RenderLoop {
|
|
4
4
|
constructor(animationProps) {}
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
onFinalize(animationProps) {}
|
|
9
|
-
|
|
10
|
-
static getAnimationLoop(RenderLoopConstructor) {
|
|
11
|
-
return new WrappedAnimationLoop(RenderLoopConstructor);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
static run(RenderLoopConstructor, options) {
|
|
15
|
-
const animationLoop = RenderLoop.getAnimationLoop(RenderLoopConstructor);
|
|
16
|
-
|
|
17
|
-
if ((options === null || options === void 0 ? void 0 : options.start) !== false) {
|
|
18
|
-
animationLoop.start();
|
|
19
|
-
}
|
|
20
|
-
|
|
6
|
+
static run(RenderLoopConstructor, deviceProps) {
|
|
7
|
+
const animationLoop = new SyncInitAnimationLoop(RenderLoopConstructor, deviceProps);
|
|
21
8
|
return animationLoop;
|
|
22
9
|
}
|
|
23
10
|
|
|
24
11
|
}
|
|
25
12
|
|
|
26
|
-
class
|
|
13
|
+
class SyncInitAnimationLoop extends AnimationLoop {
|
|
27
14
|
getInfo() {
|
|
28
15
|
return this.RenderLoopConstructor.info;
|
|
29
16
|
}
|
|
30
17
|
|
|
31
|
-
constructor(RenderLoopConstructor) {
|
|
32
|
-
super(
|
|
18
|
+
constructor(RenderLoopConstructor, deviceProps) {
|
|
19
|
+
super({
|
|
20
|
+
deviceProps
|
|
21
|
+
});
|
|
33
22
|
|
|
34
23
|
_defineProperty(this, "RenderLoopConstructor", void 0);
|
|
35
24
|
|
|
@@ -43,13 +32,17 @@ class WrappedAnimationLoop extends AnimationLoop {
|
|
|
43
32
|
}
|
|
44
33
|
|
|
45
34
|
onRender(animationProps) {
|
|
46
|
-
|
|
35
|
+
var _this$renderLoop, _this$renderLoop$onRe, _this$renderLoop2, _this$renderLoop2$fra;
|
|
36
|
+
|
|
37
|
+
(_this$renderLoop = this.renderLoop) === null || _this$renderLoop === void 0 ? void 0 : (_this$renderLoop$onRe = _this$renderLoop.onRender) === null || _this$renderLoop$onRe === void 0 ? void 0 : _this$renderLoop$onRe.call(_this$renderLoop, animationProps);
|
|
38
|
+
(_this$renderLoop2 = this.renderLoop) === null || _this$renderLoop2 === void 0 ? void 0 : (_this$renderLoop2$fra = _this$renderLoop2.frame) === null || _this$renderLoop2$fra === void 0 ? void 0 : _this$renderLoop2$fra.call(_this$renderLoop2, animationProps);
|
|
47
39
|
}
|
|
48
40
|
|
|
49
41
|
onFinalize(animationProps) {
|
|
50
|
-
var _this$
|
|
42
|
+
var _this$renderLoop3, _this$renderLoop3$onF, _this$renderLoop4, _this$renderLoop4$des;
|
|
51
43
|
|
|
52
|
-
(_this$
|
|
44
|
+
(_this$renderLoop3 = this.renderLoop) === null || _this$renderLoop3 === void 0 ? void 0 : (_this$renderLoop3$onF = _this$renderLoop3.onFinalize) === null || _this$renderLoop3$onF === void 0 ? void 0 : _this$renderLoop3$onF.call(_this$renderLoop3, animationProps);
|
|
45
|
+
(_this$renderLoop4 = this.renderLoop) === null || _this$renderLoop4 === void 0 ? void 0 : (_this$renderLoop4$des = _this$renderLoop4.destroy) === null || _this$renderLoop4$des === void 0 ? void 0 : _this$renderLoop4$des.call(_this$renderLoop4, animationProps);
|
|
53
46
|
}
|
|
54
47
|
|
|
55
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/render-loop.ts"],"names":["AnimationLoop","RenderLoop","constructor","animationProps","
|
|
1
|
+
{"version":3,"sources":["../../src/lib/render-loop.ts"],"names":["AnimationLoop","RenderLoop","constructor","animationProps","run","RenderLoopConstructor","deviceProps","animationLoop","SyncInitAnimationLoop","getInfo","info","onInitialize","renderLoop","onRender","frame","onFinalize","destroy"],"mappings":";AAEA,OAAOA,aAAP,MAA0B,kBAA1B;AAOA,OAAO,MAAeC,UAAf,CAA0B;AAC/BC,EAAAA,WAAW,CAACC,cAAD,EAAkC,CAAE;;AAGrC,SAAHC,GAAG,CAACC,qBAAD,EAA2CC,WAA3C,EAAqF;AAE7F,UAAMC,aAAa,GAAG,IAAIC,qBAAJ,CAA0BH,qBAA1B,EAAiDC,WAAjD,CAAtB;AAKA,WAAOC,aAAP;AACD;;AAZ8B;;AAgBjC,MAAMC,qBAAN,SAAoCR,aAApC,CAAkD;AAIhDS,EAAAA,OAAO,GAAG;AAER,WAAO,KAAKJ,qBAAL,CAA2BK,IAAlC;AACD;;AAEDR,EAAAA,WAAW,CAACG,qBAAD,EAA2CC,WAA3C,EAAsE;AAC/E,UAAM;AAACA,MAAAA;AAAD,KAAN;;AAD+E;;AAAA;;AAE/E,SAAKD,qBAAL,GAA6BA,qBAA7B;AACD;;AAEDM,EAAAA,YAAY,CAACR,cAAD,EAAiC;AAE3C,SAAKS,UAAL,GAAkB,IAAI,KAAKP,qBAAT,CAA+BF,cAA/B,CAAlB;AACD;;AAEDU,EAAAA,QAAQ,CAACV,cAAD,EAAiC;AAAA;;AAEvC,6BAAKS,UAAL,+FAAiBC,QAAjB,uGAA4BV,cAA5B;AAEA,8BAAKS,UAAL,iGAAiBE,KAAjB,wGAAyBX,cAAzB;AACD;;AAEDY,EAAAA,UAAU,CAACZ,cAAD,EAAiC;AAAA;;AAEzC,8BAAKS,UAAL,iGAAiBG,UAAjB,wGAA8BZ,cAA9B;AAEA,8BAAKS,UAAL,iGAAiBI,OAAjB,wGAA2Bb,cAA3B;AACD;;AA/B+C","sourcesContent":["import type {DeviceProps} from '@luma.gl/api';\nimport type {AnimationProps} from '../lib/animation-props';\nimport AnimationLoop from './animation-loop';\n\n/**\n * Minimal animation loop that initializes models in constructor\n * Simplifying type management\n * v9 API\n */\nexport abstract class RenderLoop {\n constructor(animationProps?: AnimationProps) {}\n\n /** Instantiates and runs the render loop */\n static run(RenderLoopConstructor: typeof RenderLoop, deviceProps?: DeviceProps): AnimationLoop {\n // Create an animation loop;\n const animationLoop = new SyncInitAnimationLoop(RenderLoopConstructor, deviceProps);\n\n // Start the loop automatically\n // animationLoop.start();\n\n return animationLoop;\n }\n}\n\n/** Instantiates the RenderLoop once the device is created */\nclass SyncInitAnimationLoop extends AnimationLoop {\n RenderLoopConstructor: typeof RenderLoop;\n renderLoop: RenderLoop;\n\n getInfo() {\n // @ts-ignore\n return this.RenderLoopConstructor.info;\n }\n\n constructor(RenderLoopConstructor: typeof RenderLoop, deviceProps?: DeviceProps) {\n super({deviceProps});\n this.RenderLoopConstructor = RenderLoopConstructor;\n }\n\n onInitialize(animationProps: AnimationProps) {\n // @ts-expect-error\n this.renderLoop = new this.RenderLoopConstructor(animationProps);\n }\n\n onRender(animationProps: AnimationProps) {\n // @ts-expect-error API still TBD\n this.renderLoop?.onRender?.(animationProps);\n // @ts-expect-error API still TBD\n this.renderLoop?.frame?.(animationProps);\n }\n\n onFinalize(animationProps: AnimationProps) {\n // @ts-expect-error API still TBD\n this.renderLoop?.onFinalize?.(animationProps);\n // @ts-expect-error API still TBD\n this.renderLoop?.destroy?.(animationProps);\n }\n}\n"],"file":"render-loop.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luma.gl/engine",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0-alpha.3",
|
|
4
4
|
"description": "WebGL2 Components for High Performance Rendering and Computation",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@babel/runtime": "^7.0.0",
|
|
34
|
-
"@luma.gl/constants": "
|
|
35
|
-
"@luma.gl/shadertools": "
|
|
36
|
-
"@luma.gl/webgl": "
|
|
34
|
+
"@luma.gl/constants": "9.0.0-alpha.3",
|
|
35
|
+
"@luma.gl/shadertools": "9.0.0-alpha.3",
|
|
36
|
+
"@luma.gl/webgl": "9.0.0-alpha.3",
|
|
37
37
|
"@math.gl/core": "^3.5.0",
|
|
38
38
|
"@probe.gl/log": "^3.5.0",
|
|
39
39
|
"@probe.gl/stats": "^3.5.0"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "3f259d0de774c6b98dd5ded61e64a0bd9f58b61e"
|
|
42
42
|
}
|
|
@@ -124,7 +124,7 @@ export class Timeline {
|
|
|
124
124
|
this.setTime(0);
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
attachAnimation(animation: AnimationOptions, channelHandle
|
|
127
|
+
attachAnimation(animation: AnimationOptions, channelHandle?: number): number {
|
|
128
128
|
const animationHandle = animationHandles++;
|
|
129
129
|
|
|
130
130
|
this.animations.set(animationHandle, {
|