@luma.gl/engine 8.6.0-alpha.5 → 9.0.0-alpha.11

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 (129) hide show
  1. package/dist/animation/key-frames.d.ts +1 -0
  2. package/dist/animation/key-frames.d.ts.map +1 -1
  3. package/dist/animation/key-frames.js.map +1 -1
  4. package/dist/animation/timeline.d.ts +2 -2
  5. package/dist/animation/timeline.d.ts.map +1 -1
  6. package/dist/animation/timeline.js.map +1 -1
  7. package/dist/geometries/cone-geometry.d.ts.map +1 -1
  8. package/dist/geometries/cone-geometry.js +1 -1
  9. package/dist/geometries/cone-geometry.js.map +1 -1
  10. package/dist/geometries/cube-geometry.d.ts +4 -0
  11. package/dist/geometries/cube-geometry.d.ts.map +1 -1
  12. package/dist/geometries/cube-geometry.js +31 -7
  13. package/dist/geometries/cube-geometry.js.map +1 -1
  14. package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
  15. package/dist/geometries/cylinder-geometry.js +1 -1
  16. package/dist/geometries/cylinder-geometry.js.map +1 -1
  17. package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
  18. package/dist/geometries/ico-sphere-geometry.js +1 -1
  19. package/dist/geometries/ico-sphere-geometry.js.map +1 -1
  20. package/dist/geometries/plane-geometry.d.ts.map +1 -1
  21. package/dist/geometries/plane-geometry.js +1 -1
  22. package/dist/geometries/plane-geometry.js.map +1 -1
  23. package/dist/geometries/sphere-geometry.d.ts.map +1 -1
  24. package/dist/geometries/sphere-geometry.js +1 -1
  25. package/dist/geometries/sphere-geometry.js.map +1 -1
  26. package/dist/geometries/truncated-cone-geometry.d.ts +15 -3
  27. package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
  28. package/dist/geometries/truncated-cone-geometry.js +29 -15
  29. package/dist/geometries/truncated-cone-geometry.js.map +1 -1
  30. package/dist/geometry/geometry-table.d.ts +15 -0
  31. package/dist/geometry/geometry-table.d.ts.map +1 -0
  32. package/dist/geometry/geometry-table.js +2 -0
  33. package/dist/{transform/transform-types.js.map → geometry/geometry-table.js.map} +1 -1
  34. package/dist/geometry/geometry-utils.js.map +1 -1
  35. package/dist/geometry/geometry.d.ts +32 -14
  36. package/dist/geometry/geometry.d.ts.map +1 -1
  37. package/dist/geometry/geometry.js +57 -34
  38. package/dist/geometry/geometry.js.map +1 -1
  39. package/dist/geometry/primitive-utils.d.ts +1 -0
  40. package/dist/geometry/primitive-utils.d.ts.map +1 -0
  41. package/dist/geometry/primitive-utils.js +2 -0
  42. package/dist/geometry/primitive-utils.js.map +1 -0
  43. package/dist/index.d.ts +6 -7
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +4 -6
  46. package/dist/index.js.map +1 -1
  47. package/dist/lib/animation-loop.d.ts +25 -87
  48. package/dist/lib/animation-loop.d.ts.map +1 -1
  49. package/dist/lib/animation-loop.js +111 -197
  50. package/dist/lib/animation-loop.js.map +1 -1
  51. package/dist/lib/animation-props.d.ts +24 -0
  52. package/dist/lib/animation-props.d.ts.map +1 -0
  53. package/dist/lib/animation-props.js +2 -0
  54. package/dist/lib/animation-props.js.map +1 -0
  55. package/dist/lib/clip-space.d.ts +1 -0
  56. package/dist/lib/clip-space.d.ts.map +1 -0
  57. package/dist/lib/clip-space.js +2 -0
  58. package/dist/lib/clip-space.js.map +1 -0
  59. package/dist/lib/model-utils.d.ts +4 -3
  60. package/dist/lib/model-utils.d.ts.map +1 -1
  61. package/dist/lib/model-utils.js +24 -70
  62. package/dist/lib/model-utils.js.map +1 -1
  63. package/dist/lib/model.d.ts +34 -104
  64. package/dist/lib/model.d.ts.map +1 -1
  65. package/dist/lib/model.js +111 -502
  66. package/dist/lib/model.js.map +1 -1
  67. package/dist/lib/pipeline-factory.d.ts +60 -0
  68. package/dist/lib/pipeline-factory.d.ts.map +1 -0
  69. package/dist/lib/pipeline-factory.js +219 -0
  70. package/dist/lib/pipeline-factory.js.map +1 -0
  71. package/dist/lib/render-loop.d.ts +10 -18
  72. package/dist/lib/render-loop.d.ts.map +1 -1
  73. package/dist/lib/render-loop.js +32 -35
  74. package/dist/lib/render-loop.js.map +1 -1
  75. package/package.json +6 -6
  76. package/src/animation/key-frames.ts +1 -0
  77. package/src/animation/timeline.ts +2 -2
  78. package/src/geometries/cone-geometry.ts +1 -1
  79. package/src/geometries/cube-geometry.ts +160 -8
  80. package/src/geometries/cylinder-geometry.ts +1 -1
  81. package/src/geometries/ico-sphere-geometry.ts +2 -2
  82. package/src/geometries/plane-geometry.ts +1 -1
  83. package/src/geometries/sphere-geometry.ts +2 -2
  84. package/src/geometries/truncated-cone-geometry.ts +30 -12
  85. package/src/geometry/geometry-table.ts +16 -0
  86. package/src/geometry/geometry-utils.ts +1 -1
  87. package/src/geometry/geometry.ts +97 -47
  88. package/src/geometry/primitive-utils.ts +30 -0
  89. package/src/index.ts +13 -12
  90. package/src/lib/animation-loop.ts +141 -319
  91. package/src/lib/animation-props.ts +31 -0
  92. package/src/{utils → lib}/clip-space.ts +5 -2
  93. package/src/lib/model-utils.ts +60 -32
  94. package/src/lib/model.ts +127 -639
  95. package/src/lib/pipeline-factory.ts +234 -0
  96. package/src/lib/render-loop.ts +44 -40
  97. package/dist/lib/program-manager.d.ts +0 -39
  98. package/dist/lib/program-manager.d.ts.map +0 -1
  99. package/dist/lib/program-manager.js +0 -175
  100. package/dist/lib/program-manager.js.map +0 -1
  101. package/dist/transform/buffer-transform.d.ts +0 -36
  102. package/dist/transform/buffer-transform.d.ts.map +0 -1
  103. package/dist/transform/buffer-transform.js +0 -255
  104. package/dist/transform/buffer-transform.js.map +0 -1
  105. package/dist/transform/texture-transform.d.ts +0 -57
  106. package/dist/transform/texture-transform.d.ts.map +0 -1
  107. package/dist/transform/texture-transform.js +0 -412
  108. package/dist/transform/texture-transform.js.map +0 -1
  109. package/dist/transform/transform-shader-utils.d.ts +0 -26
  110. package/dist/transform/transform-shader-utils.d.ts.map +0 -1
  111. package/dist/transform/transform-shader-utils.js +0 -149
  112. package/dist/transform/transform-shader-utils.js.map +0 -1
  113. package/dist/transform/transform-types.d.ts +0 -44
  114. package/dist/transform/transform-types.d.ts.map +0 -1
  115. package/dist/transform/transform-types.js +0 -2
  116. package/dist/transform/transform.d.ts +0 -47
  117. package/dist/transform/transform.d.ts.map +0 -1
  118. package/dist/transform/transform.js +0 -198
  119. package/dist/transform/transform.js.map +0 -1
  120. package/dist/utils/clip-space.d.ts +0 -5
  121. package/dist/utils/clip-space.d.ts.map +0 -1
  122. package/dist/utils/clip-space.js +0 -34
  123. package/dist/utils/clip-space.js.map +0 -1
  124. package/src/lib/program-manager.ts +0 -187
  125. package/src/transform/buffer-transform.ts +0 -214
  126. package/src/transform/texture-transform.ts +0 -344
  127. package/src/transform/transform-shader-utils.ts +0 -169
  128. package/src/transform/transform-types.ts +0 -42
  129. package/src/transform/transform.ts +0 -189
@@ -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","fs","id","handle","undefined","userData","modules","moduleSettings","geometry","Model","constructor","device","props","Error","getShaderSource","vertexCount","topology","pipelineFactory","getDefaultPipelineFactory","pipeline","getUniforms","createRenderPipeline","parameters","layout","_getModuleUniforms","_setGeometry","setUniforms","setProps","destroy","draw","renderPass","instanceCount","indices","setIndexBuffer","attributes","setAttributes","bindings","setBindings","uniforms","updateModuleSettings","Object","assign","geometryBuffers","indexBuffer","shader","info","type","wgsl","glsl"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\n\nimport type {Device, Buffer, RenderPipelineProps, RenderPass, Binding, PrimitiveTopology} 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 | null;\n fs?: {glsl?: string; wgsl?: string} | string | null;\n modules?: ShaderModule[];\n moduleSettings?: Record<string, Record<string, any>>;\n geometry?: Geometry | null;\n};\n\nconst DEFAULT_MODEL_PROPS: Required<ModelProps> = {\n ...RenderPipeline._DEFAULT_PROPS,\n vs: null,\n fs: null,\n id: 'unnamed',\n handle: undefined,\n userData: {},\n modules: [],\n moduleSettings: {},\n geometry: null\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 | null = null;\n readonly topology: PrimitiveTopology;\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 = this.props.id;\n this.device = device;\n\n // Create the pipeline\n if (!props.vs) {\n throw new Error('no vertex shader');\n }\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 || 'triangle-list';\n }\n\n const pipelineFactory = PipelineFactory.getDefaultPipelineFactory(this.device);\n const {pipeline, getUniforms} = pipelineFactory.createRenderPipeline({\n ...this.props,\n vs: this.vs,\n fs: this.fs,\n topology: this.topology,\n parameters: props.parameters,\n layout: props.layout\n });\n\n this.pipeline = pipeline;\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,60 @@
1
+ import type { RenderPipelineParameters, PrimitiveTopology, ShaderLayout } 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 | null;
7
+ topology: PrimitiveTopology;
8
+ layout?: ShaderLayout | null;
9
+ parameters?: RenderPipelineParameters;
10
+ modules?: ShaderModule[];
11
+ defines?: Record<string, string | number | boolean>;
12
+ inject?: Record<string, string>;
13
+ transpileToGLSL100?: boolean;
14
+ varyings?: string[];
15
+ bufferMode?: number;
16
+ };
17
+ export declare type GetComputePipelineOptions = {
18
+ cs: string;
19
+ parameters?: RenderPipelineParameters;
20
+ modules?: ShaderModule[];
21
+ defines?: Record<string, string>;
22
+ inject?: Record<string, string>;
23
+ transpileToGLSL100?: boolean;
24
+ varyings?: string[];
25
+ bufferMode?: number;
26
+ };
27
+ declare type GetUniformsFunc = (props?: Record<string, any>) => Record<string, any>;
28
+ /** Efficiently create shared pipelines with varying parameters */
29
+ export declare class PipelineFactory {
30
+ readonly device: Device;
31
+ stateHash: number;
32
+ private _hashCounter;
33
+ private readonly _hashes;
34
+ private readonly _useCounts;
35
+ private readonly _pipelineCache;
36
+ private readonly _getUniforms;
37
+ private readonly _hookFunctions;
38
+ private _defaultModules;
39
+ static getDefaultPipelineFactory(device: Device): PipelineFactory;
40
+ constructor(device: Device);
41
+ addDefaultModule(module: ShaderModule): void;
42
+ removeDefaultModule(module: ShaderModule): void;
43
+ addShaderHook(hook: string, opts?: any): void;
44
+ createRenderPipeline(options: GetRenderPipelineOptions): {
45
+ pipeline: RenderPipeline;
46
+ getUniforms: GetUniformsFunc;
47
+ };
48
+ release(pipeline: RenderPipeline): void;
49
+ getUniforms(pipeline: RenderPipeline): GetUniformsFunc;
50
+ _createRenderPipeline(props: GetRenderPipelineOptions): {
51
+ pipeline: RenderPipeline;
52
+ getUniforms: GetUniformsFunc;
53
+ };
54
+ /** Calculate a hash based on all the inputs for a render pipeline */
55
+ _hashRenderPipeline(props: GetRenderPipelineOptions): string;
56
+ _getHash(key: string): number;
57
+ _getModuleList(appModules?: ShaderModule[]): ShaderModule[];
58
+ }
59
+ export {};
60
+ //# 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":"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"}
@@ -0,0 +1,219 @@
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
+ layout: null,
11
+ varyings: [],
12
+ bufferMode: 0x8c8d,
13
+ topology: 'triangle-list',
14
+ parameters: {}
15
+ };
16
+ export class PipelineFactory {
17
+ static getDefaultPipelineFactory(device) {
18
+ device.defaultPipelineFactory = device.defaultPipelineFactory || new PipelineFactory(device);
19
+ return device.defaultPipelineFactory;
20
+ }
21
+
22
+ constructor(device) {
23
+ _defineProperty(this, "device", void 0);
24
+
25
+ _defineProperty(this, "stateHash", 0);
26
+
27
+ _defineProperty(this, "_hashCounter", 0);
28
+
29
+ _defineProperty(this, "_hashes", {});
30
+
31
+ _defineProperty(this, "_useCounts", {});
32
+
33
+ _defineProperty(this, "_pipelineCache", {});
34
+
35
+ _defineProperty(this, "_getUniforms", {});
36
+
37
+ _defineProperty(this, "_hookFunctions", []);
38
+
39
+ _defineProperty(this, "_defaultModules", []);
40
+
41
+ this.device = device;
42
+ }
43
+
44
+ addDefaultModule(module) {
45
+ if (!this._defaultModules.find(m => m.name === (typeof module === 'string' ? module : module.name))) {
46
+ this._defaultModules.push(module);
47
+ }
48
+
49
+ this.stateHash++;
50
+ }
51
+
52
+ removeDefaultModule(module) {
53
+ const moduleName = typeof module === 'string' ? module : module.name;
54
+ this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);
55
+ this.stateHash++;
56
+ }
57
+
58
+ addShaderHook(hook, opts) {
59
+ if (opts) {
60
+ hook = Object.assign(opts, {
61
+ hook
62
+ });
63
+ }
64
+
65
+ this._hookFunctions.push(hook);
66
+
67
+ this.stateHash++;
68
+ }
69
+
70
+ createRenderPipeline(options) {
71
+ const props = { ...DEFAULT_RENDER_PIPELINE_OPTIONS,
72
+ ...options
73
+ };
74
+
75
+ const modules = this._getModuleList(props.modules);
76
+
77
+ const hash = this._hashRenderPipeline({ ...props,
78
+ modules
79
+ });
80
+
81
+ if (!this._pipelineCache[hash]) {
82
+ const {
83
+ pipeline,
84
+ getUniforms
85
+ } = this._createRenderPipeline({ ...props,
86
+ modules
87
+ });
88
+
89
+ pipeline.hash = hash;
90
+ this._pipelineCache[hash] = pipeline;
91
+
92
+ this._getUniforms[hash] = getUniforms || (x => ({}));
93
+
94
+ this._useCounts[hash] = 0;
95
+ }
96
+
97
+ this._useCounts[hash]++;
98
+ return {
99
+ pipeline: this._pipelineCache[hash],
100
+ getUniforms: this._getUniforms[hash]
101
+ };
102
+ }
103
+
104
+ release(pipeline) {
105
+ const hash = pipeline.hash;
106
+ this._useCounts[hash]--;
107
+
108
+ if (this._useCounts[hash] === 0) {
109
+ this._pipelineCache[hash].destroy();
110
+
111
+ delete this._pipelineCache[hash];
112
+ delete this._getUniforms[hash];
113
+ delete this._useCounts[hash];
114
+ }
115
+ }
116
+
117
+ getUniforms(pipeline) {
118
+ return this._getUniforms[pipeline.hash] || null;
119
+ }
120
+
121
+ _createRenderPipeline(props) {
122
+ const platformInfo = {
123
+ gpu: this.device.info.gpu,
124
+ features: this.device.features
125
+ };
126
+
127
+ if (!props.fs) {
128
+ throw new Error('fs');
129
+ }
130
+
131
+ const assembled = assembleShaders(platformInfo, { ...props,
132
+ fs: props.fs,
133
+ hookFunctions: this._hookFunctions
134
+ });
135
+ const pipeline = this.device.createRenderPipeline({ ...props,
136
+ vs: this.device.createShader({
137
+ stage: 'vertex',
138
+ source: assembled.vs
139
+ }),
140
+ fs: assembled.fs ? this.device.createShader({
141
+ stage: 'fragment',
142
+ source: assembled.fs
143
+ }) : null
144
+ });
145
+ return {
146
+ pipeline,
147
+ getUniforms: assembled.getUniforms
148
+ };
149
+ }
150
+
151
+ _hashRenderPipeline(props) {
152
+ const {
153
+ modules = [],
154
+ varyings = [],
155
+ defines = {},
156
+ inject = {},
157
+ parameters = {}
158
+ } = props;
159
+
160
+ const vsHash = this._getHash(props.vs);
161
+
162
+ const fsHash = props.fs ? this._getHash(props.fs) : 0;
163
+ const moduleHashes = modules.map(m => this._getHash(typeof m === 'string' ? m : m.name)).sort();
164
+ const varyingHashes = varyings.map(v => this._getHash(v));
165
+ const defineKeys = Object.keys(defines).sort();
166
+ const injectKeys = Object.keys(inject).sort();
167
+ const defineHashes = [];
168
+ const injectHashes = [];
169
+
170
+ for (const key of defineKeys) {
171
+ defineHashes.push(this._getHash(key));
172
+ defineHashes.push(this._getHash(String(defines[key])));
173
+ }
174
+
175
+ for (const key of injectKeys) {
176
+ injectHashes.push(this._getHash(key));
177
+ injectHashes.push(this._getHash(inject[key]));
178
+ }
179
+
180
+ const parameterHash = JSON.stringify(parameters);
181
+ 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);
182
+ }
183
+
184
+ _getHash(key) {
185
+ if (this._hashes[key] === undefined) {
186
+ this._hashes[key] = this._hashCounter++;
187
+ }
188
+
189
+ return this._hashes[key];
190
+ }
191
+
192
+ _getModuleList(appModules = []) {
193
+ const modules = new Array(this._defaultModules.length + appModules.length);
194
+ const seen = {};
195
+ let count = 0;
196
+
197
+ for (let i = 0, len = this._defaultModules.length; i < len; ++i) {
198
+ const module = this._defaultModules[i];
199
+ const name = module.name;
200
+ modules[count++] = module;
201
+ seen[name] = true;
202
+ }
203
+
204
+ for (let i = 0, len = appModules.length; i < len; ++i) {
205
+ const module = appModules[i];
206
+ const name = module.name;
207
+
208
+ if (!seen[name]) {
209
+ modules[count++] = module;
210
+ seen[name] = true;
211
+ }
212
+ }
213
+
214
+ modules.length = count;
215
+ return modules;
216
+ }
217
+
218
+ }
219
+ //# 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","layout","varyings","bufferMode","topology","parameters","PipelineFactory","getDefaultPipelineFactory","device","defaultPipelineFactory","constructor","addDefaultModule","module","_defaultModules","find","m","name","push","stateHash","removeDefaultModule","moduleName","filter","addShaderHook","hook","opts","Object","assign","_hookFunctions","createRenderPipeline","options","props","_getModuleList","hash","_hashRenderPipeline","_pipelineCache","pipeline","getUniforms","_createRenderPipeline","_getUniforms","x","_useCounts","release","destroy","platformInfo","gpu","info","features","Error","assembled","hookFunctions","createShader","stage","source","vsHash","_getHash","fsHash","moduleHashes","map","sort","varyingHashes","v","defineKeys","keys","injectKeys","defineHashes","injectHashes","key","String","parameterHash","JSON","stringify","join","_hashes","undefined","_hashCounter","appModules","Array","length","seen","count","i","len"],"mappings":"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","sourcesContent":["import type {RenderPipelineProps, RenderPipelineParameters, PrimitiveTopology, ShaderLayout} 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 | null;\n topology: PrimitiveTopology;\n layout?: ShaderLayout | null;\n parameters?: RenderPipelineParameters;\n\n modules?: ShaderModule[];\n defines?: Record<string, string | number | boolean>;\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 layout: null,\n\n varyings: [],\n bufferMode: 0x8c8d, // // varyings/bufferMode for xform feedback, 0x8c8d: SEPARATE_ATTRIBS\n topology: 'triangle-list',\n parameters: {} \n};\n\ntype GetUniformsFunc = (props?: Record<string, any>) => Record<string, any>;\n\n/** Efficiently create shared pipelines with varying parameters */\nexport 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, GetUniformsFunc> = {};\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: string, 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 pipeline: RenderPipeline;\n getUniforms: GetUniformsFunc;\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 {pipeline, getUniforms} = this._createRenderPipeline({...props, modules});\n pipeline.hash = hash;\n this._pipelineCache[hash] = pipeline;\n this._getUniforms[hash] = getUniforms || ((x?: unknown) => ({}));\n this._useCounts[hash] = 0;\n }\n\n this._useCounts[hash]++;\n\n return {\n pipeline: 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 pipeline: RenderPipeline,\n getUniforms: GetUniformsFunc\n } {\n const platformInfo = {\n gpu: this.device.info.gpu,\n features: this.device.features\n };\n\n if (!props.fs) {\n throw new Error('fs');\n }\n\n const assembled = assembleShaders(platformInfo, {...props, fs: props.fs, hookFunctions: this._hookFunctions});\n\n const pipeline = 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}) : null,\n });\n\n return {pipeline, 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 {modules = [], varyings = [], defines = {}, inject = {}, parameters = {}} = props;\n const vsHash = this._getHash(props.vs);\n const fsHash = props.fs ? this._getHash(props.fs) : 0;\n\n const moduleHashes = modules.map((m) => this._getHash(typeof m === 'string' ? m : m.name)).sort();\n const varyingHashes = varyings.map((v) => this._getHash(v));\n\n const defineKeys = Object.keys(defines).sort();\n const injectKeys = Object.keys(inject).sort();\n const defineHashes: number[] = [];\n const injectHashes: number[] = [];\n\n for (const key of defineKeys) {\n defineHashes.push(this._getHash(key));\n defineHashes.push(this._getHash(String(defines[key])));\n }\n\n for (const key of injectKeys) {\n injectHashes.push(this._getHash(key));\n injectHashes.push(this._getHash(inject[key]));\n }\n\n // TODO - hash parameters!\n const parameterHash = JSON.stringify(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,19 @@
1
- import type { AnimationProps } from './animation-loop';
2
- import AnimationLoop from './animation-loop';
1
+ import type { DeviceProps } from '@luma.gl/api';
2
+ import type { AnimationProps } from '../lib/animation-props';
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 {
10
+ animationLoop?: AnimationLoop;
8
11
  constructor(animationProps?: AnimationProps);
9
- onRender(animationProps: AnimationProps): void;
10
- onFinalize(animationProps: AnimationProps): void;
11
- static getAnimationLoop(RenderLoopConstructor: typeof RenderLoop): WrappedAnimationLoop;
12
+ destroy(): void;
13
+ onInitialize(animationProps: AnimationProps): Promise<unknown>;
14
+ abstract onRender(animationProps: AnimationProps): unknown;
15
+ abstract onFinalize(animationProps: AnimationProps): void;
12
16
  /** Instantiates and runs the render loop */
13
- static run(RenderLoopConstructor: typeof RenderLoop, options?: {
14
- start?: boolean;
15
- }): WrappedAnimationLoop;
17
+ static run(RenderLoopConstructor: typeof RenderLoop, deviceProps?: DeviceProps): AnimationLoop;
16
18
  }
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
19
  //# 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":"AACA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AACrD,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAG7C;;;GAGG;AACH,8BAAsB,UAAU;gBAClB,cAAc,CAAC,EAAE,cAAc;IAC3C,QAAQ,CAAC,cAAc,EAAE,cAAc;IACvC,UAAU,CAAC,cAAc,EAAE,cAAc;IAEzC,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,OAAO,UAAU;IAIhE,4CAA4C;IAC5C,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,OAAO,UAAU,EAAE,OAAO,CAAC,EAAE;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,oBAAoB;CAOxG;AAED,cAAM,oBAAqB,SAAQ,aAAa;IAC9C,qBAAqB,EAAE,OAAO,UAAU,CAAC;IACzC,UAAU,EAAE,UAAU,CAAC;IAEvB,OAAO;gBAKK,qBAAqB,EAAE,OAAO,UAAU;IAKpD,YAAY,CAAC,cAAc,EAAE,cAAc;IAK3C,QAAQ,CAAC,cAAc,EAAE,cAAc;IAIvC,UAAU,CAAC,cAAc,EAAE,cAAc;CAG1C"}
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,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAE/C;;;;GAIG;AACH,8BAAsB,UAAU;IAE9B,aAAa,CAAC,EAAE,aAAa,CAAC;gBAElB,cAAc,CAAC,EAAE,cAAc;IAE3C,OAAO,IAAI,IAAI;IAIT,YAAY,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IACpE,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO;IAC1D,QAAQ,CAAC,UAAU,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;IAEzD,4CAA4C;IAC5C,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,OAAO,UAAU,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,aAAa;CAmC/F"}
@@ -1,55 +1,52 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import AnimationLoop from './animation-loop';
2
+ import { AnimationLoop } from './animation-loop';
3
3
  export class RenderLoop {
4
- constructor(animationProps) {}
5
-
6
- onRender(animationProps) {}
7
-
8
- onFinalize(animationProps) {}
9
-
10
- static getAnimationLoop(RenderLoopConstructor) {
11
- return new WrappedAnimationLoop(RenderLoopConstructor);
4
+ constructor(animationProps) {
5
+ _defineProperty(this, "animationLoop", void 0);
12
6
  }
13
7
 
14
- static run(RenderLoopConstructor, options) {
15
- const animationLoop = RenderLoop.getAnimationLoop(RenderLoopConstructor);
8
+ destroy() {
9
+ var _this$animationLoop;
16
10
 
17
- if ((options === null || options === void 0 ? void 0 : options.start) !== false) {
18
- animationLoop.start();
19
- }
11
+ (_this$animationLoop = this.animationLoop) === null || _this$animationLoop === void 0 ? void 0 : _this$animationLoop.destroy();
12
+ }
20
13
 
21
- return animationLoop;
14
+ async onInitialize(animationProps) {
15
+ return null;
22
16
  }
23
17
 
24
- }
18
+ static run(RenderLoopConstructor, deviceProps) {
19
+ let renderLoop = null;
20
+ const animationLoop = new AnimationLoop({
21
+ deviceProps,
25
22
 
26
- class WrappedAnimationLoop extends AnimationLoop {
27
- getInfo() {
28
- return this.RenderLoopConstructor.info;
29
- }
23
+ async onInitialize(animationProps) {
24
+ var _renderLoop;
30
25
 
31
- constructor(RenderLoopConstructor) {
32
- super();
26
+ renderLoop = new RenderLoopConstructor(animationProps);
27
+ renderLoop.animationLoop = animationLoop;
28
+ return await ((_renderLoop = renderLoop) === null || _renderLoop === void 0 ? void 0 : _renderLoop.onInitialize(animationProps));
29
+ },
33
30
 
34
- _defineProperty(this, "RenderLoopConstructor", void 0);
31
+ onRender(animationProps) {
32
+ var _renderLoop2;
35
33
 
36
- _defineProperty(this, "renderLoop", void 0);
34
+ (_renderLoop2 = renderLoop) === null || _renderLoop2 === void 0 ? void 0 : _renderLoop2.onRender(animationProps);
35
+ },
37
36
 
38
- this.RenderLoopConstructor = RenderLoopConstructor;
39
- }
37
+ onFinalize(animationProps) {
38
+ var _renderLoop3;
40
39
 
41
- onInitialize(animationProps) {
42
- this.renderLoop = new this.RenderLoopConstructor(animationProps);
43
- }
40
+ (_renderLoop3 = renderLoop) === null || _renderLoop3 === void 0 ? void 0 : _renderLoop3.onFinalize(animationProps);
41
+ }
44
42
 
45
- onRender(animationProps) {
46
- this.renderLoop.onRender(animationProps);
47
- }
43
+ });
48
44
 
49
- onFinalize(animationProps) {
50
- var _this$renderLoop, _this$renderLoop$onFi;
45
+ animationLoop.getInfo = () => {
46
+ return this.RenderLoopConstructor.info;
47
+ };
51
48
 
52
- (_this$renderLoop = this.renderLoop) === null || _this$renderLoop === void 0 ? void 0 : (_this$renderLoop$onFi = _this$renderLoop.onFinalize) === null || _this$renderLoop$onFi === void 0 ? void 0 : _this$renderLoop$onFi.call(_this$renderLoop, animationProps);
49
+ return animationLoop;
53
50
  }
54
51
 
55
52
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/render-loop.ts"],"names":["AnimationLoop","RenderLoop","constructor","animationProps","onRender","onFinalize","getAnimationLoop","RenderLoopConstructor","WrappedAnimationLoop","run","options","animationLoop","start","getInfo","info","onInitialize","renderLoop"],"mappings":";AAEA,OAAOA,aAAP,MAA0B,kBAA1B;AAOA,OAAO,MAAeC,UAAf,CAA0B;AAC/BC,EAAAA,WAAW,CAACC,cAAD,EAAkC,CAAE;;AAC/CC,EAAAA,QAAQ,CAACD,cAAD,EAAiC,CAAE;;AAC3CE,EAAAA,UAAU,CAACF,cAAD,EAAiC,CAAE;;AAEtB,SAAhBG,gBAAgB,CAACC,qBAAD,EAA2C;AAChE,WAAO,IAAIC,oBAAJ,CAAyBD,qBAAzB,CAAP;AACD;;AAGS,SAAHE,GAAG,CAACF,qBAAD,EAA2CG,OAA3C,EAA8F;AACtG,UAAMC,aAAa,GAAGV,UAAU,CAACK,gBAAX,CAA4BC,qBAA5B,CAAtB;;AACA,QAAI,CAAAG,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEE,KAAT,MAAmB,KAAvB,EAA8B;AAC5BD,MAAAA,aAAa,CAACC,KAAd;AACD;;AACD,WAAOD,aAAP;AACD;;AAhB8B;;AAmBjC,MAAMH,oBAAN,SAAmCR,aAAnC,CAAiD;AAI/Ca,EAAAA,OAAO,GAAG;AAER,WAAO,KAAKN,qBAAL,CAA2BO,IAAlC;AACD;;AAEDZ,EAAAA,WAAW,CAACK,qBAAD,EAA2C;AACpD;;AADoD;;AAAA;;AAEpD,SAAKA,qBAAL,GAA6BA,qBAA7B;AACD;;AAEDQ,EAAAA,YAAY,CAACZ,cAAD,EAAiC;AAE3C,SAAKa,UAAL,GAAkB,IAAI,KAAKT,qBAAT,CAA+BJ,cAA/B,CAAlB;AACD;;AAEDC,EAAAA,QAAQ,CAACD,cAAD,EAAiC;AACvC,SAAKa,UAAL,CAAgBZ,QAAhB,CAAyBD,cAAzB;AACD;;AAEDE,EAAAA,UAAU,CAACF,cAAD,EAAiC;AAAA;;AACzC,6BAAKa,UAAL,+FAAiBX,UAAjB,uGAA8BF,cAA9B;AACD;;AAzB8C","sourcesContent":["import {Stats} from '@probe.gl/stats';\nimport type {AnimationProps} from './animation-loop';\nimport AnimationLoop from './animation-loop';\nimport {Timeline} from '../animation/timeline'\n\n/**\n * Minimal animation loop that initializes models in constructor\n * Simplifying type management\n */\nexport abstract class RenderLoop {\n constructor(animationProps?: AnimationProps) {}\n onRender(animationProps: AnimationProps) {}\n onFinalize(animationProps: AnimationProps) {}\n\n static getAnimationLoop(RenderLoopConstructor: typeof RenderLoop) {\n return new WrappedAnimationLoop(RenderLoopConstructor);\n }\n\n /** Instantiates and runs the render loop */\n static run(RenderLoopConstructor: typeof RenderLoop, options?: {start?: boolean}): WrappedAnimationLoop {\n const animationLoop = RenderLoop.getAnimationLoop(RenderLoopConstructor);\n if (options?.start !== false) {\n animationLoop.start();\n }\n return animationLoop;\n }\n}\n\nclass WrappedAnimationLoop 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) {\n super();\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 this.renderLoop.onRender(animationProps);\n }\n\n onFinalize(animationProps: AnimationProps) {\n this.renderLoop?.onFinalize?.(animationProps);\n }\n}\n\n"],"file":"render-loop.js"}
1
+ {"version":3,"sources":["../../src/lib/render-loop.ts"],"names":["AnimationLoop","RenderLoop","constructor","animationProps","destroy","animationLoop","onInitialize","run","RenderLoopConstructor","deviceProps","renderLoop","onRender","onFinalize","getInfo","info"],"mappings":";AAEA,SAAQA,aAAR,QAA4B,kBAA5B;AAOA,OAAO,MAAeC,UAAf,CAA0B;AAI/BC,EAAAA,WAAW,CAACC,cAAD,EAAkC;AAAA;AAAE;;AAE/CC,EAAAA,OAAO,GAAS;AAAA;;AACd,gCAAKC,aAAL,4EAAoBD,OAApB;AACD;;AAEiB,QAAZE,YAAY,CAACH,cAAD,EAAmD;AAAE,WAAO,IAAP;AAAc;;AAK3E,SAAHI,GAAG,CAACC,qBAAD,EAA2CC,WAA3C,EAAqF;AAC7F,QAAIC,UAA6B,GAAG,IAApC;AAGA,UAAML,aAAa,GAAG,IAAIL,aAAJ,CAAkB;AACtCS,MAAAA,WADsC;;AAGtC,YAAMH,YAAN,CAAmBH,cAAnB,EAAqE;AAAA;;AAEnEO,QAAAA,UAAU,GAAG,IAAIF,qBAAJ,CAA0BL,cAA1B,CAAb;AACAO,QAAAA,UAAU,CAAEL,aAAZ,GAA4BA,aAA5B;AAEA,eAAO,sBAAMK,UAAN,gDAAM,YAAYJ,YAAZ,CAAyBH,cAAzB,CAAN,CAAP;AACD,OATqC;;AAWtCQ,MAAAA,QAAQ,CAACR,cAAD,EAAiC;AAAA;;AACvC,wBAAAO,UAAU,UAAV,oDAAYC,QAAZ,CAAqBR,cAArB;AACD,OAbqC;;AAetCS,MAAAA,UAAU,CAACT,cAAD,EAAiC;AAAA;;AACzC,wBAAAO,UAAU,UAAV,oDAAYE,UAAZ,CAAuBT,cAAvB;AACD;;AAjBqC,KAAlB,CAAtB;;AAqBAE,IAAAA,aAAa,CAACQ,OAAd,GAAwB,MAAM;AAE5B,aAAO,KAAKL,qBAAL,CAA2BM,IAAlC;AACD,KAHD;;AAQA,WAAOT,aAAP;AACD;;AAjD8B","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\n animationLoop?: AnimationLoop;\n\n constructor(animationProps?: AnimationProps) {}\n\n destroy(): void {\n this.animationLoop?.destroy();\n }\n\n async onInitialize(animationProps: AnimationProps): Promise<unknown> { return null; }\n abstract onRender(animationProps: AnimationProps): unknown;\n abstract onFinalize(animationProps: AnimationProps): void;\n\n /** Instantiates and runs the render loop */\n static run(RenderLoopConstructor: typeof RenderLoop, deviceProps?: DeviceProps): AnimationLoop {\n let renderLoop: RenderLoop | null = null;\n\n // Create an animation loop;\n const animationLoop = new AnimationLoop({\n deviceProps,\n\n async onInitialize(animationProps: AnimationProps): Promise<unknown> {\n // @ts-expect-error abstract to prevent instantiation\n renderLoop = new RenderLoopConstructor(animationProps);\n renderLoop!.animationLoop = animationLoop;\n // Any async loading can be handled here\n return await renderLoop?.onInitialize(animationProps);\n },\n \n onRender(animationProps: AnimationProps) {\n renderLoop?.onRender(animationProps);\n },\n \n onFinalize(animationProps: AnimationProps) {\n renderLoop?.onFinalize(animationProps);\n }\n });\n\n // @ts-expect-error Hack: adds info for the website to find\n animationLoop.getInfo = () => {\n // @ts-ignore\n return this.RenderLoopConstructor.info;\n }\n\n // Start the loop automatically\n // animationLoop.start();\n\n return animationLoop;\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": "8.6.0-alpha.5",
3
+ "version": "9.0.0-alpha.11",
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": "8.6.0-alpha.5",
35
- "@luma.gl/shadertools": "8.6.0-alpha.5",
36
- "@luma.gl/webgl": "8.6.0-alpha.5",
34
+ "@luma.gl/constants": "9.0.0-alpha.11",
35
+ "@luma.gl/shadertools": "9.0.0-alpha.11",
36
+ "@luma.gl/webgl": "9.0.0-alpha.11",
37
37
  "@math.gl/core": "^3.5.0",
38
38
  "@probe.gl/log": "^3.5.0",
39
- "@probe.gl/stats": "^3.5.0"
39
+ "@probe.gl/stats": "^3.5.2"
40
40
  },
41
- "gitHead": "c07a1da6a4cac293a1b10658adcaafe872ac9efe"
41
+ "gitHead": "3a99f57970a609d50948851aec7a56d56685ab62"
42
42
  }
@@ -1,6 +1,7 @@
1
1
  // keyframes
2
2
  export type KeyFrame<T> = [number, T];
3
3
 
4
+ /** Holds a list of key frames (timestamped values) */
4
5
  export class KeyFrames<T = number> {
5
6
  startIndex: number = -1;
6
7
  endIndex: number = -1;