@luma.gl/engine 8.6.0-alpha.5 → 9.0.0-alpha.10
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 +2 -2
- 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 +31 -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 +32 -14
- package/dist/geometry/geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.js +57 -34
- 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 +6 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/animation-loop.d.ts +23 -84
- package/dist/lib/animation-loop.d.ts.map +1 -1
- package/dist/lib/animation-loop.js +106 -193
- 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 +111 -502
- package/dist/lib/model.js.map +1 -1
- package/dist/lib/pipeline-factory.d.ts +60 -0
- package/dist/lib/pipeline-factory.d.ts.map +1 -0
- package/dist/lib/pipeline-factory.js +219 -0
- package/dist/lib/pipeline-factory.js.map +1 -0
- package/dist/lib/render-loop.d.ts +5 -18
- package/dist/lib/render-loop.d.ts.map +1 -1
- package/dist/lib/render-loop.js +16 -23
- package/dist/lib/render-loop.js.map +1 -1
- package/package.json +6 -6
- package/src/animation/key-frames.ts +1 -0
- package/src/animation/timeline.ts +2 -2
- package/src/geometries/cone-geometry.ts +1 -1
- package/src/geometries/cube-geometry.ts +160 -8
- package/src/geometries/cylinder-geometry.ts +1 -1
- package/src/geometries/ico-sphere-geometry.ts +2 -2
- 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 +97 -47
- package/src/geometry/primitive-utils.ts +30 -0
- package/src/index.ts +13 -12
- package/src/lib/animation-loop.ts +136 -314
- 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 +127 -639
- package/src/lib/pipeline-factory.ts +234 -0
- package/src/lib/render-loop.ts +24 -22
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/animation-loop.ts"],"names":["luma","lumaStats","log","isWebGL","resetParameters","requestAnimationFrame","cancelAnimationFrame","Query","Framebuffer","isBrowser","isPage","document","statIdCounter","DEFAULT_ANIMATION_LOOP_PROPS","onCreateDevice","props","createDevice","onCreateContext","onAddHTML","onInitialize","onRender","onFinalize","onError","error","console","device","debug","useDevicePixels","autoResizeViewport","autoResizeDrawingBuffer","stats","get","gl","glOptions","createFramebuffer","AnimationLoop","constructor","deprecated","useDevicePixelRatio","cpuTime","gpuTime","frameRate","setProps","start","bind","stop","_onMousemove","_onMouseleave","destroy","_setDisplay","delete","setNeedsRedraw","reason","needsRedraw","opts","_start","_running","_getPageLoadPromise","appContext","_initialized","_initialize","animationProps","_addCallbackData","_cancelAnimationFrame","_requestAnimationFrame","redraw","isContextLost","_beginTimers","_setupFrame","_updateCallbackData","_renderFrame","_clearNeedsRedraw","_resolveNextFrame","_nextFramePromise","_endTimers","_finalizeCallbackData","attachTimeline","timeline","detachTimeline","waitForRender","Promise","resolve","toDataURL","canvas","deviceProps","getHTMLControlValue","id","defaultValue","element","getElementById","Number","value","_createDevice","_createFramebuffer","_startEventHandling","_initializeCallbackData","_resizeCanvasDrawingBuffer","_resizeViewport","_gpuTimeQuery","isSupported","_pageLoadPromise","reject","readyState","window","addEventListener","display","animationLoop","_animationFrameId","_animationFrame","_resizeFramebuffer","startTime","Date","now","engineTime","tick","tock","time","_mousePosition","framebuffer","_timeline","_loop","_animationLoop","width","height","aspect","_getSizeAndAspect","update","Math","floor","getTime","Object","assign","Error","_createInfoDiv","wrapperDiv","createElement","body","appendChild","style","position","div","left","bottom","background","html","innerHTML","drawingBufferWidth","drawingBufferHeight","clientHeight","clientWidth","viewport","resize","timeEnd","timeStart","isResultAvailable","isTimerDisjoint","addTime","getTimerMilliseconds","beginTimeElapsedQuery","end","e","offsetX","offsetY"],"mappings":"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","sourcesContent":["import {luma, Device} from '@luma.gl/api';\nimport {\n lumaStats,\n // TODO - remove dependency on framebuffer (bundle size impact)\n log,\n assert\n} from '@luma.gl/api';\nimport type {WebGLDeviceProps} from '@luma.gl/webgl'\nimport {WebGLDevice} from '@luma.gl/webgl';\nimport {\n isWebGL,\n // createGLContext,\n // instrumentGLContext,\n // resizeGLContext,\n resetParameters\n} from '@luma.gl/webgl';\n\n\nimport {\n requestAnimationFrame,\n cancelAnimationFrame,\n Query,\n // TODO - remove dependency on framebuffer (bundle size impact)\n Framebuffer\n} from '@luma.gl/webgl';\n\nimport { Stats, Stat } from '@probe.gl/stats'\nimport {isBrowser} from '@probe.gl/env';\n\nimport { Timeline } from '../animation/timeline'\n\n\ntype DeviceProps = WebGLDeviceProps;\ntype ContextProps = WebGLDeviceProps;\n\nconst isPage = isBrowser() && typeof document !== 'undefined';\n\nlet statIdCounter = 0;\n\n/** AnimationLoop properties */\nexport type AnimationLoopProps = {\n onCreateDevice?: (props: DeviceProps) => Device;\n onCreateContext?: (props: ContextProps) => WebGLRenderingContext; // TODO: signature from createGLContext\n onAddHTML?: (div: HTMLDivElement) => string; // innerHTML\n onInitialize?: (animationProps: AnimationProps) => {} | void;\n onRender?: (animationProps: AnimationProps) => void;\n onFinalize?: (animationProps: AnimationProps) => void;\n onError?: (reason: any) => void;\n\n stats?: Stats;\n\n device?: Device;\n glOptions?: ContextProps; // createGLContext options\n debug?: boolean;\n\n // view parameters\n autoResizeViewport?: boolean;\n autoResizeDrawingBuffer?: boolean;\n useDevicePixels?: number | boolean;\n\n /** @deprecated Use .device */\n gl?: WebGLRenderingContext\n /** @deprecated Will be removed */\n createFramebuffer?: boolean;\n};\n\nexport type AnimationProps = {\n device: Device;\n\n stop: () => AnimationLoop\n canvas: HTMLCanvasElement | OffscreenCanvas\n // Initial values\n useDevicePixels: number | boolean\n needsRedraw?: string\n // Animation props\n startTime: number\n engineTime: number\n tick: number\n tock: number\n\n // Timeline time for back compatibility\n time: number\n\n width: number\n height: number\n aspect: number\n\n timeline: Timeline\n animationLoop: AnimationLoop\n\n // Experimental\n _mousePosition?: [number, number] // [offsetX, offsetY],\n\n /** @deprecated Will be removed, create your own Framebuffer */\n framebuffer: Framebuffer\n /** @deprecated Use .device */\n gl: WebGLRenderingContext\n\n /** @deprecated Use .timeline */\n _timeline: Timeline\n /** @deprecated Use .animationLoop */\n _loop: AnimationLoop\n /** @deprecated Use .animationLoop */\n _animationLoop: AnimationLoop\n}\n\nconst DEFAULT_ANIMATION_LOOP_PROPS: Required<AnimationLoopProps> = {\n onCreateDevice: (props: DeviceProps) => luma.createDevice(props),\n onCreateContext: null,\n onAddHTML: null,\n onInitialize: () => ({}),\n onRender: () => {},\n onFinalize: () => {},\n onError: (error) => console.error(error), // eslint-disable-line no-console\n\n device: null,\n debug: false,\n\n // view parameters\n useDevicePixels: true,\n autoResizeViewport: true,\n autoResizeDrawingBuffer: true,\n stats: lumaStats.get(`animation-loop-${statIdCounter++}`),\n\n // deprecated\n // onCreateContext: (opts) => createGLContext(opts),\n gl: null,\n glOptions: {},\n createFramebuffer: false\n};\n\n/** Convenient animation loop */\nexport default class AnimationLoop {\n device: Device;\n canvas: HTMLCanvasElement | OffscreenCanvas;\n\n props: Required<AnimationLoopProps>;\n animationProps: AnimationProps;\n framebuffer: Framebuffer = null;\n timeline: Timeline = null;\n stats: Stats;\n cpuTime: Stat;\n gpuTime: Stat;\n frameRate: Stat;\n\n display: any;\n\n needsRedraw: string | null = 'initialized';\n\n _initialized: boolean = false;\n _running: boolean = false;\n _animationFrameId = null;\n _pageLoadPromise: Promise<{}> | null = null;\n _nextFramePromise: Promise<AnimationLoop> | null = null;\n _resolveNextFrame: ((AnimationLoop) => void) | null = null;\n _cpuStartTime: number = 0;\n\n _gpuTimeQuery: Query | null = null;\n\n /** @deprecated */\n gl: WebGLRenderingContext;\n\n /*\n * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context\n */\n constructor(props: AnimationLoopProps = {}) {\n this.props = {...DEFAULT_ANIMATION_LOOP_PROPS, ...props};\n props = this.props;\n\n let {useDevicePixels = true} = this.props;\n\n if ('useDevicePixelRatio' in props) {\n log.deprecated('useDevicePixelRatio', 'useDevicePixels')();\n // @ts-expect-error\n useDevicePixels = props.useDevicePixelRatio;\n }\n\n // state\n this.device = props.device;\n // @ts-expect-error\n this.gl = (this.device && this.device.gl) || props.gl;\n\n this.stats = props.stats;\n this.cpuTime = this.stats.get('CPU Time');\n this.gpuTime = this.stats.get('GPU Time');\n this.frameRate = this.stats.get('Frame Rate');\n\n this.setProps({\n autoResizeViewport: props.autoResizeViewport,\n autoResizeDrawingBuffer: props.autoResizeDrawingBuffer,\n useDevicePixels\n });\n\n // Bind methods\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n\n destroy(): void {\n this.stop();\n this._setDisplay(null);\n }\n\n /** @deprecated Use .destroy() */\n delete(): void {\n this.destroy();\n }\n\n setNeedsRedraw(reason: string): this {\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n\n setProps(props: AnimationLoopProps): this {\n if ('autoResizeViewport' in props) {\n this.props.autoResizeViewport = props.autoResizeViewport;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;\n }\n if ('useDevicePixels' in props) {\n this.props.useDevicePixels = props.useDevicePixels;\n }\n return this;\n }\n\n start(opts = {}) {\n this._start(opts);\n return this;\n }\n\n /** Starts a render loop if not already running\n * @param {Object} context - contains frame specific info (E.g. tick, width, height, etc)\n */\n async _start(opts) {\n if (this._running) {\n return this;\n }\n this._running = true;\n\n // console.debug(`Starting ${this.constructor.name}`);\n // Wait for start promise before rendering frame\n try {\n await this._getPageLoadPromise();\n\n // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\n\n let appContext;\n if (!this._initialized) {\n this._initialized = true;\n this._initialize(opts);\n\n // Note: onIntialize can return a promise (in case app needs to load resources)\n appContext = await this.onInitialize(this.animationProps);\n this._addCallbackData(appContext || {});\n }\n\n // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\n\n // Start the loop\n if (appContext !== false) {\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame();\n this._requestAnimationFrame();\n }\n\n return this;\n } catch (error) {\n this.props.onError(error);\n // this._running = false; // TODO\n return null;\n }\n }\n\n /** Explicitly draw a frame */\n redraw(): this {\n if (this.isContextLost()) {\n return this;\n }\n\n this._beginTimers();\n\n this._setupFrame();\n this._updateCallbackData();\n\n this._renderFrame(this.animationProps);\n\n // clear needsRedraw flag\n this._clearNeedsRedraw();\n\n if (this._resolveNextFrame) {\n this._resolveNextFrame(this);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n }\n\n this._endTimers();\n\n return this;\n }\n\n // Stops a render loop if already running, finalizing\n stop() {\n // console.debug(`Stopping ${this.constructor.name}`);\n if (this._running) {\n this._finalizeCallbackData();\n this._cancelAnimationFrame();\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._running = false;\n }\n return this;\n }\n\n attachTimeline(timeline: Timeline): Timeline {\n this.timeline = timeline;\n return this.timeline;\n }\n\n detachTimeline(): void {\n this.timeline = null;\n }\n\n waitForRender(): Promise<AnimationLoop> {\n this.setNeedsRedraw('waitForRender');\n\n if (!this._nextFramePromise) {\n this._nextFramePromise = new Promise((resolve) => {\n this._resolveNextFrame = resolve;\n });\n }\n return this._nextFramePromise;\n }\n\n async toDataURL() {\n this.setNeedsRedraw('toDataURL');\n\n await this.waitForRender();\n\n return this.gl.canvas.toDataURL();\n }\n\n isContextLost(): boolean {\n return this.gl.isContextLost();\n }\n\n onCreateDevice(deviceProps: DeviceProps) {\n return this.props.onCreateDevice(deviceProps);\n }\n\n onInitialize(animationProps: AnimationProps): {} | void {\n return this.props.onInitialize(animationProps);\n }\n\n onRender(animationProps: AnimationProps) {\n return this.props.onRender(animationProps);\n }\n\n onFinalize(animationProps: AnimationProps) {\n return this.props.onFinalize(animationProps);\n }\n\n // DEPRECATED/REMOVED METHODS\n\n /** @deprecated Use .onCreateDevice() */\n onCreateContext(props: ContextProps) {\n return this.props.onCreateContext(props);\n }\n\n /** @deprecated */\n getHTMLControlValue(id, defaultValue = 1) {\n const element = document.getElementById(id);\n // @ts-expect-error Not all html elements have value\n return element ? Number(element.value) : defaultValue;\n }\n\n // PRIVATE METHODS\n\n _initialize(props: AnimationLoopProps) {\n // Create the WebGL context\n this._createDevice(props);\n this._createFramebuffer();\n this._startEventHandling();\n\n // Initialize the callback data\n this._initializeCallbackData();\n this._updateCallbackData();\n\n // Default viewport setup, in case onInitialize wants to render\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n\n this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;\n }\n\n _getPageLoadPromise() {\n if (!this._pageLoadPromise) {\n this._pageLoadPromise = isPage\n ? new Promise((resolve, reject) => {\n if (isPage && document.readyState === 'complete') {\n resolve(document);\n return;\n }\n window.addEventListener('load', () => {\n resolve(document);\n });\n })\n : Promise.resolve({});\n }\n return this._pageLoadPromise;\n }\n\n _setDisplay(display) {\n if (this.display) {\n this.display.delete();\n this.display.animationLoop = null;\n }\n\n // store animation loop on the display\n if (display) {\n display.animationLoop = this;\n }\n\n this.display = display;\n }\n\n _requestAnimationFrame() {\n if (!this._running) {\n return;\n }\n\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.requestAnimationFrame) {\n // this._animationFrameId = this.display.requestAnimationFrame(this._animationFrame.bind(this));\n // }\n this._animationFrameId = requestAnimationFrame(this._animationFrame.bind(this));\n }\n\n _cancelAnimationFrame() {\n if (this._animationFrameId !== null) {\n return;\n }\n\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.cancelAnimationFrame) {\n // this.display.cancelAnimationFrame(this._animationFrameId);\n // }\n cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = null;\n }\n\n _animationFrame() {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._requestAnimationFrame();\n }\n\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(props: AnimationProps) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(props);\n return;\n }\n\n // call callback\n this.onRender(props);\n // end callback\n }\n\n _clearNeedsRedraw() {\n this.needsRedraw = null;\n }\n\n _setupFrame() {\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n this._resizeFramebuffer();\n }\n\n // Initialize the object that will be passed to app callbacks\n _initializeCallbackData() {\n // @ts-expect-error\n this.animationProps = {\n device: this.device,\n gl: this.gl,\n\n stop: this.stop,\n canvas: this.gl.canvas,\n\n // Initial values\n useDevicePixels: this.props.useDevicePixels,\n needsRedraw: null,\n\n // Animation props\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n\n timeline: this.timeline,\n animationLoop: this,\n\n // Timeline time for back compatibility\n time: 0,\n\n // Experimental\n _mousePosition: null, // Event props\n\n // Deprecated\n framebuffer: this.framebuffer,\n _timeline: this.timeline,\n _loop: this,\n _animationLoop: this\n };\n }\n\n // Update the context object that will be passed to app callbacks\n _updateCallbackData() {\n const {width, height, aspect} = this._getSizeAndAspect();\n if (width !== this.animationProps.width || height !== this.animationProps.height) {\n this.setNeedsRedraw('drawing buffer resized');\n }\n if (aspect !== this.animationProps.aspect) {\n this.setNeedsRedraw('drawing buffer aspect changed');\n }\n\n this.animationProps.width = width;\n this.animationProps.height = height;\n this.animationProps.aspect = aspect;\n\n this.animationProps.needsRedraw = this.needsRedraw;\n\n // Update time properties\n this.animationProps.engineTime = Date.now() - this.animationProps.startTime;\n\n if (this.timeline) {\n this.timeline.update(this.animationProps.engineTime);\n }\n\n this.animationProps.tick = Math.floor((this.animationProps.time / 1000) * 60);\n this.animationProps.tock++;\n\n // For back compatibility\n this.animationProps.time = this.timeline\n ? this.timeline.getTime()\n : this.animationProps.engineTime;\n }\n\n _finalizeCallbackData() {\n // call callback\n this.onFinalize(this.animationProps);\n // end callback\n }\n\n /** Add application's data to the app context object */\n _addCallbackData(appContext) {\n if (typeof appContext === 'object' && appContext !== null) {\n this.animationProps = Object.assign({}, this.animationProps, appContext);\n }\n }\n\n /** Either uses supplied or existing context, or calls provided callback to create one */\n _createDevice(props: DeviceProps) {\n const deviceProps = {...this.props, ...props, ...this.props.glOptions};\n\n // TODO - support this.onCreateContext\n // Create the WebGL context if necessary\n // this.gl = this.props.gl ? instrumentGLContext(this.props.gl, deviceProps) : this.onCreateContext(deviceProps);\n\n this.device = this.onCreateDevice(deviceProps);\n // @ts-expect-error\n this.gl = this.device.gl;\n\n if (!isWebGL(this.gl)) {\n throw new Error('AnimationLoop.onCreateContext - illegal context returned');\n }\n\n // Reset the WebGL context.\n resetParameters(this.gl);\n\n this._createInfoDiv();\n }\n\n _createInfoDiv() {\n if (this.gl.canvas && this.props.onAddHTML) {\n const wrapperDiv = document.createElement('div');\n document.body.appendChild(wrapperDiv);\n wrapperDiv.style.position = 'relative';\n const div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '10px';\n div.style.bottom = '10px';\n div.style.width = '300px';\n div.style.background = 'white';\n wrapperDiv.appendChild(this.gl.canvas);\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n\n _getSizeAndAspect() {\n // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n const width = this.gl.drawingBufferWidth;\n const height = this.gl.drawingBufferHeight;\n\n // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n let aspect = 1;\n const {canvas} = this.gl;\n\n if (canvas && canvas.clientHeight) {\n aspect = canvas.clientWidth / canvas.clientHeight;\n } else if (width > 0 && height > 0) {\n aspect = width / height;\n }\n\n return {width, height, aspect};\n }\n\n /** Default viewport setup */\n _resizeViewport() {\n if (this.props.autoResizeViewport) {\n this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);\n }\n }\n\n /** \n * Resize the render buffer of the canvas to match canvas client size\n * Optionally multiplying with devicePixel ratio\n */\n _resizeCanvasDrawingBuffer() {\n if (this.props.autoResizeDrawingBuffer) {\n (this.device as WebGLDevice).resize({useDevicePixels: this.props.useDevicePixels});\n }\n }\n\n _beginTimers() {\n this.frameRate.timeEnd();\n this.frameRate.timeStart();\n\n // Check if timer for last frame has completed.\n // GPU timer results are never available in the same\n // frame they are captured.\n if (\n this._gpuTimeQuery &&\n this._gpuTimeQuery.isResultAvailable() &&\n !this._gpuTimeQuery.isTimerDisjoint()\n ) {\n this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());\n }\n\n if (this._gpuTimeQuery) {\n // GPU time query start\n this._gpuTimeQuery.beginTimeElapsedQuery();\n }\n\n this.cpuTime.timeStart();\n }\n\n _endTimers() {\n this.cpuTime.timeEnd();\n\n if (this._gpuTimeQuery) {\n // GPU time query end. Results will be available on next frame.\n this._gpuTimeQuery.end();\n }\n }\n\n // Event handling\n\n _startEventHandling() {\n const {canvas} = this.gl;\n if (canvas) {\n canvas.addEventListener('mousemove', this._onMousemove);\n canvas.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n _onMousemove(e) {\n this.animationProps._mousePosition = [e.offsetX, e.offsetY];\n }\n _onMouseleave(e) {\n this.animationProps._mousePosition = null;\n }\n\n // Deprecated\n\n /** @deprecated */\n _createFramebuffer() {\n // Setup default framebuffer\n if (this.props.createFramebuffer) {\n this.framebuffer = new Framebuffer(this.gl);\n }\n }\n\n /** @deprecated */\n _resizeFramebuffer() {\n if (this.framebuffer) {\n this.framebuffer.resize({\n width: this.gl.drawingBufferWidth,\n height: this.gl.drawingBufferHeight\n });\n }\n } \n}\n"],"file":"animation-loop.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/animation-loop.ts"],"names":["luma","requestAnimationFrame","cancelAnimationFrame","Stats","isBrowser","isPage","document","statIdCounter","DEFAULT_ANIMATION_LOOP_PROPS","onCreateDevice","props","createDevice","onAddHTML","onInitialize","onRender","onFinalize","onError","error","console","device","deviceProps","debug","stats","get","useDevicePixels","autoResizeViewport","autoResizeDrawingBuffer","AnimationLoop","constructor","gl","id","cpuTime","gpuTime","frameRate","setProps","start","bind","stop","_onMousemove","_onMouseleave","destroy","_setDisplay","delete","setNeedsRedraw","reason","needsRedraw","_running","appContext","_initialized","_createDevice","_initialize","_getAnimationProps","_cancelAnimationFrame","_requestAnimationFrame","err","Error","redraw","isLost","_beginTimers","_setupFrame","_updateAnimationProps","_renderFrame","_clearNeedsRedraw","_resolveNextFrame","_nextFramePromise","_endTimers","animationProps","attachTimeline","timeline","detachTimeline","waitForRender","Promise","resolve","toDataURL","canvas","HTMLCanvasElement","_startEventHandling","_initializeAnimationProps","_resizeCanvasDrawingBuffer","_resizeViewport","display","animationLoop","_animationFrameId","_animationFrame","canvasContext","width","height","aspect","time","startTime","Date","now","engineTime","tick","tock","_mousePosition","_getSizeAndAspect","update","Math","floor","getTime","_createInfoDiv","wrapperDiv","createElement","body","appendChild","style","position","div","left","bottom","background","html","innerHTML","getPixelSize","clientHeight","clientWidth","viewport","drawingBufferWidth","drawingBufferHeight","resize","timeEnd","timeStart","addEventListener","event","MouseEvent","offsetX","offsetY"],"mappings":"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","sourcesContent":["import {luma, Device, DeviceProps} from '@luma.gl/api';\nimport {requestAnimationFrame, cancelAnimationFrame} from '@luma.gl/api';\nimport {Timeline} from '../animation/timeline';\nimport {AnimationProps} from '../lib/animation-props';\nimport {Stats, Stat} from '@probe.gl/stats';\nimport {isBrowser} from '@probe.gl/env';\n\nconst isPage = isBrowser() && typeof document !== 'undefined';\n\nlet statIdCounter = 0;\n\ntype ContextProps = DeviceProps;\n\n/** AnimationLoop properties */\nexport type AnimationLoopProps = {\n onCreateDevice?: (props: DeviceProps) => Promise<Device>;\n onAddHTML?: (div: HTMLDivElement) => string; // innerHTML\n onInitialize?: (animationProps: AnimationProps) => void;\n onRender?: (animationProps: AnimationProps) => void;\n onFinalize?: (animationProps: AnimationProps) => void;\n onError?: (reason: Error) => void;\n\n device?: Device | null;\n deviceProps?: DeviceProps;\n stats?: Stats;\n\n // view parameters\n debug?: boolean;\n autoResizeViewport?: boolean;\n autoResizeDrawingBuffer?: boolean;\n useDevicePixels?: number | boolean;\n};\n\nconst DEFAULT_ANIMATION_LOOP_PROPS: Required<AnimationLoopProps> = {\n onCreateDevice: (props: DeviceProps): Promise<Device> => luma.createDevice(props),\n onAddHTML: () => '',\n onInitialize: () => ({}),\n onRender: () => {},\n onFinalize: () => {},\n onError: (error) => console.error(error), // eslint-disable-line no-console\n\n device: null,\n deviceProps: {},\n debug: false,\n stats: luma.stats.get(`animation-loop-${statIdCounter++}`),\n\n // view parameters\n useDevicePixels: true,\n autoResizeViewport: true,\n autoResizeDrawingBuffer: true,\n};\n\n/** Convenient animation loop */\nexport class AnimationLoop {\n device: Device | null = null;\n canvas: HTMLCanvasElement | OffscreenCanvas | null = null;\n\n props: Required<AnimationLoopProps>;\n animationProps: AnimationProps | null = null;\n timeline: Timeline | null = null;\n stats: Stats;\n cpuTime: Stat;\n gpuTime: Stat;\n frameRate: Stat;\n\n display: any;\n\n needsRedraw: string | false = 'initialized';\n\n _initialized: boolean = false;\n _running: boolean = false;\n _animationFrameId: any = null;\n _nextFramePromise: Promise<AnimationLoop> | null = null;\n _resolveNextFrame: ((AnimationLoop) => void) | null = null;\n _cpuStartTime: number = 0;\n\n // _gpuTimeQuery: Query | null = null;\n\n /*\n * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context\n */\n constructor(props: AnimationLoopProps = {}) {\n this.props = {...DEFAULT_ANIMATION_LOOP_PROPS, ...props};\n props = this.props;\n\n let {useDevicePixels = true} = this.props;\n\n // state\n this.device = props.device || null;\n // @ts-expect-error\n this.gl = (this.device && this.device.gl) || props.gl;\n\n this.stats = props.stats || new Stats({id: 'animation-loop-stats'});\n this.cpuTime = this.stats.get('CPU Time');\n this.gpuTime = this.stats.get('GPU Time');\n this.frameRate = this.stats.get('Frame Rate');\n\n this.setProps({\n autoResizeViewport: props.autoResizeViewport,\n autoResizeDrawingBuffer: props.autoResizeDrawingBuffer,\n useDevicePixels\n });\n\n // Bind methods\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n\n destroy(): void {\n this.stop();\n this._setDisplay(null);\n }\n\n /** @deprecated Use .destroy() */\n delete(): void {\n this.destroy();\n }\n\n setNeedsRedraw(reason: string): this {\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n\n // TODO - move to CanvasContext\n setProps(props: AnimationLoopProps): this {\n if ('autoResizeViewport' in props) {\n this.props.autoResizeViewport = props.autoResizeViewport || false;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer || false;\n }\n if ('useDevicePixels' in props) {\n this.props.useDevicePixels = props.useDevicePixels || false;\n }\n return this;\n }\n\n /** Starts a render loop if not already running */\n async start() {\n if (this._running) {\n return this;\n }\n this._running = true;\n\n try {\n // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\n\n let appContext;\n if (!this._initialized) {\n this._initialized = true;\n // Create the WebGL context\n await this._createDevice();\n this._initialize();\n\n // Note: onIntialize can return a promise (e.g. in case app needs to load resources)\n await this.props.onInitialize(this._getAnimationProps());\n }\n\n // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\n\n // Start the loop\n if (appContext !== false) {\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame();\n this._requestAnimationFrame();\n }\n\n return this;\n } catch (err: unknown) {\n const error = err instanceof Error ? err : new Error('Unknown error')\n this.props.onError(error);\n // this._running = false; // TODO\n throw error;\n }\n }\n\n /** Explicitly draw a frame */\n redraw(): this {\n if (this.device?.isLost) {\n return this;\n }\n\n this._beginTimers();\n\n this._setupFrame();\n this._updateAnimationProps();\n\n this._renderFrame(this._getAnimationProps());\n\n // clear needsRedraw flag\n this._clearNeedsRedraw();\n\n if (this._resolveNextFrame) {\n this._resolveNextFrame(this);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n }\n\n this._endTimers();\n\n return this;\n }\n\n // Stops a render loop if already running, finalizing\n stop() {\n // console.debug(`Stopping ${this.constructor.name}`);\n if (this._running) {\n // call callback\n // If stop is called immediately, we can end up in a state where props haven't been initialized...\n if (this.animationProps) {\n this.props.onFinalize(this.animationProps);\n }\n\n this._cancelAnimationFrame();\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._running = false;\n }\n return this;\n }\n\n attachTimeline(timeline: Timeline): Timeline {\n this.timeline = timeline;\n return this.timeline;\n }\n\n detachTimeline(): void {\n this.timeline = null;\n }\n\n waitForRender(): Promise<AnimationLoop> {\n this.setNeedsRedraw('waitForRender');\n\n if (!this._nextFramePromise) {\n this._nextFramePromise = new Promise((resolve) => {\n this._resolveNextFrame = resolve;\n });\n }\n return this._nextFramePromise;\n }\n\n async toDataURL(): Promise<string> {\n this.setNeedsRedraw('toDataURL');\n await this.waitForRender();\n if (this.canvas instanceof HTMLCanvasElement) {\n return this.canvas.toDataURL();\n }\n throw new Error('OffscreenCanvas');\n }\n\n // PRIVATE METHODS\n\n _initialize() {\n this._startEventHandling();\n\n // Initialize the callback data\n this._initializeAnimationProps();\n this._updateAnimationProps();\n\n // Default viewport setup, in case onInitialize wants to render\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n\n // this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;\n }\n\n _setDisplay(display) {\n if (this.display) {\n this.display.delete();\n this.display.animationLoop = null;\n }\n\n // store animation loop on the display\n if (display) {\n display.animationLoop = this;\n }\n\n this.display = display;\n }\n\n _requestAnimationFrame() {\n if (!this._running) {\n return;\n }\n\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.requestAnimationFrame) {\n // this._animationFrameId = this.display.requestAnimationFrame(this._animationFrame.bind(this));\n // }\n this._animationFrameId = requestAnimationFrame(this._animationFrame.bind(this));\n }\n\n _cancelAnimationFrame() {\n if (this._animationFrameId !== null) {\n return;\n }\n\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.cancelAnimationFrame) {\n // this.display.cancelAnimationFrame(this._animationFrameId);\n // }\n cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = null;\n }\n\n _animationFrame() {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._requestAnimationFrame();\n }\n\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(props: AnimationProps) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(props);\n return;\n }\n\n // call callback\n this.props.onRender(props);\n // end callback\n }\n\n _clearNeedsRedraw() {\n this.needsRedraw = false;\n }\n\n _setupFrame() {\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n }\n\n // Initialize the object that will be passed to app callbacks\n _initializeAnimationProps() {\n if (!this.device) {\n throw new Error('loop');\n }\n this.animationProps = {\n animationLoop: this,\n device: this.device,\n canvas: this.device?.canvasContext?.canvas!,\n timeline: this.timeline,\n\n // Initial values\n useDevicePixels: this.props.useDevicePixels,\n needsRedraw: false,\n\n // Placeholders\n width: 1,\n height: 1,\n aspect: 1,\n\n // Animation props\n time: 0,\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n\n // Experimental\n _mousePosition: null // Event props\n };\n }\n\n _getAnimationProps(): AnimationProps {\n if (!this.animationProps) {\n throw new Error('animationProps');\n }\n return this.animationProps;\n }\n\n // Update the context object that will be passed to app callbacks\n _updateAnimationProps(): void {\n if (!this.animationProps) {\n return;\n }\n\n const {width, height, aspect} = this._getSizeAndAspect();\n if (width !== this.animationProps.width || height !== this.animationProps.height) {\n this.setNeedsRedraw('drawing buffer resized');\n }\n if (aspect !== this.animationProps.aspect) {\n this.setNeedsRedraw('drawing buffer aspect changed');\n }\n\n this.animationProps.width = width;\n this.animationProps.height = height;\n this.animationProps.aspect = aspect;\n\n this.animationProps.needsRedraw = this.needsRedraw;\n\n // Update time properties\n this.animationProps.engineTime = Date.now() - this.animationProps.startTime;\n\n if (this.timeline) {\n this.timeline.update(this.animationProps.engineTime);\n }\n\n this.animationProps.tick = Math.floor((this.animationProps.time / 1000) * 60);\n this.animationProps.tock++;\n\n // For back compatibility\n this.animationProps.time = this.timeline\n ? this.timeline.getTime()\n : this.animationProps.engineTime;\n }\n\n /** Either uses supplied or existing context, or calls provided callback to create one */\n async _createDevice() {\n const deviceProps = {...this.props, ...this.props.deviceProps};\n this.device = await this.props.onCreateDevice(deviceProps);\n this.canvas = this.device.canvasContext?.canvas!;\n this._createInfoDiv();\n }\n\n _createInfoDiv() {\n if (this.canvas && this.props.onAddHTML) {\n const wrapperDiv = document.createElement('div');\n document.body.appendChild(wrapperDiv);\n wrapperDiv.style.position = 'relative';\n const div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '10px';\n div.style.bottom = '10px';\n div.style.width = '300px';\n div.style.background = 'white';\n if (this.canvas instanceof HTMLCanvasElement) {\n wrapperDiv.appendChild(this.canvas);\n }\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n\n _getSizeAndAspect(): {width: number; height: number; aspect: number} {\n if (!this.device) {\n return {width: 1, height: 1, aspect: 1};\n }\n // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n const [width, height] = this.device?.canvasContext?.getPixelSize() || [1, 1];\n\n // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n let aspect = 1;\n const canvas = this.device?.canvasContext?.canvas;\n\n // @ts-expect-error\n if (canvas && canvas.clientHeight) {\n // @ts-expect-error\n aspect = canvas.clientWidth / canvas.clientHeight;\n } else if (width > 0 && height > 0) {\n aspect = width / height;\n }\n\n return {width, height, aspect};\n }\n\n /** Default viewport setup */\n _resizeViewport() {\n // @ts-expect-error Expose on canvasContext\n if (this.props.autoResizeViewport && this.device.gl) {\n // @ts-expect-error Expose canvasContext\n this.device.gl.viewport(0, 0, this.device.gl.drawingBufferWidth, this.device.gl.drawingBufferHeight);\n }\n }\n\n /**\n * Resize the render buffer of the canvas to match canvas client size\n * Optionally multiplying with devicePixel ratio\n */\n _resizeCanvasDrawingBuffer() {\n if (this.props.autoResizeDrawingBuffer) {\n this.device?.canvasContext?.resize({useDevicePixels: this.props.useDevicePixels});\n }\n }\n\n _beginTimers() {\n this.frameRate.timeEnd();\n this.frameRate.timeStart();\n\n // Check if timer for last frame has completed.\n // GPU timer results are never available in the same\n // frame they are captured.\n // if (\n // this._gpuTimeQuery &&\n // this._gpuTimeQuery.isResultAvailable() &&\n // !this._gpuTimeQuery.isTimerDisjoint()\n // ) {\n // this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());\n // }\n\n // if (this._gpuTimeQuery) {\n // // GPU time query start\n // this._gpuTimeQuery.beginTimeElapsedQuery();\n // }\n\n // this.cpuTime.timeStart();\n }\n\n _endTimers() {\n this.cpuTime.timeEnd();\n\n // if (this._gpuTimeQuery) {\n // // GPU time query end. Results will be available on next frame.\n // this._gpuTimeQuery.end();\n // }\n }\n\n // Event handling\n\n _startEventHandling() {\n if (this.canvas) {\n this.canvas.addEventListener('mousemove', this._onMousemove);\n this.canvas.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n _onMousemove(event: Event) {\n if (event instanceof MouseEvent) {\n this._getAnimationProps()._mousePosition = [event.offsetX, event.offsetY];\n }\n }\n\n _onMouseleave(event: Event) {\n this._getAnimationProps()._mousePosition = null;\n }\n}\n"],"file":"animation-loop.js"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="offscreencanvas" />
|
|
2
|
+
import { Device } from '@luma.gl/api';
|
|
3
|
+
import { Timeline } from '../animation/timeline';
|
|
4
|
+
import type { AnimationLoop } from './animation-loop';
|
|
5
|
+
/** Properties passed to every render frame */
|
|
6
|
+
export declare type AnimationProps = {
|
|
7
|
+
device: Device;
|
|
8
|
+
animationLoop: AnimationLoop;
|
|
9
|
+
/** @todo Should be canvasContext */
|
|
10
|
+
canvas: HTMLCanvasElement | OffscreenCanvas;
|
|
11
|
+
useDevicePixels: number | boolean;
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
aspect: number;
|
|
15
|
+
time: number;
|
|
16
|
+
startTime: number;
|
|
17
|
+
engineTime: number;
|
|
18
|
+
tick: number;
|
|
19
|
+
tock: number;
|
|
20
|
+
needsRedraw?: string | false;
|
|
21
|
+
timeline: Timeline | null;
|
|
22
|
+
_mousePosition?: [number, number] | null;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=animation-props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation-props.d.ts","sourceRoot":"","sources":["../../src/lib/animation-props.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAEpD,+CAA+C;AAC/C,oBAAY,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAE7B,oCAAoC;IACpC,MAAM,EAAE,iBAAiB,GAAG,eAAe,CAAC;IAC5C,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAGf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAGb,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAE7B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAG1B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"animation-props.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=clip-space.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clip-space.d.ts","sourceRoot":"","sources":["../../src/lib/clip-space.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"clip-space.js"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Buffer } from '@luma.gl/
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
1
|
+
import { Device, Buffer } from '@luma.gl/api';
|
|
2
|
+
import type Geometry from '../geometry/geometry';
|
|
3
|
+
export declare function getIndexBufferFromGeometry(device: Device, geometry: Geometry): Buffer | undefined;
|
|
4
|
+
export declare function getAttributeBuffersFromGeometry(device: Device, geometry: Geometry): Record<string, Buffer>;
|
|
4
5
|
//# sourceMappingURL=model-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-utils.d.ts","sourceRoot":"","sources":["../../src/lib/model-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-utils.d.ts","sourceRoot":"","sources":["../../src/lib/model-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAS,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAsDjD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAYjG;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc1G"}
|
package/dist/lib/model-utils.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Buffer, assert } from '@luma.gl/webgl';
|
|
1
|
+
import { Buffer, assert } from '@luma.gl/api';
|
|
3
2
|
const GLTF_TO_LUMA_ATTRIBUTE_MAP = {
|
|
4
3
|
POSITION: 'positions',
|
|
5
4
|
NORMAL: 'normals',
|
|
@@ -8,84 +7,39 @@ const GLTF_TO_LUMA_ATTRIBUTE_MAP = {
|
|
|
8
7
|
TEXCOORD_1: 'texCoords1',
|
|
9
8
|
TEXCOORD_2: 'texCoords2'
|
|
10
9
|
};
|
|
11
|
-
export function
|
|
10
|
+
export function getIndexBufferFromGeometry(device, geometry) {
|
|
11
|
+
if (!geometry.indices) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const data = geometry.indices.value || geometry.indices;
|
|
16
|
+
assert(data instanceof Uint16Array || data instanceof Uint32Array, 'attribute array for "indices" must be of integer type');
|
|
17
|
+
return device.createBuffer({
|
|
18
|
+
usage: Buffer.INDEX,
|
|
19
|
+
data
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export function getAttributeBuffersFromGeometry(device, geometry) {
|
|
12
23
|
const buffers = {};
|
|
13
|
-
let indices = geometry.indices;
|
|
14
24
|
|
|
15
|
-
for (const name
|
|
16
|
-
const
|
|
17
|
-
const remappedName = mapAttributeName(name, options);
|
|
25
|
+
for (const [name, attribute] of Object.entries(geometry.attributes)) {
|
|
26
|
+
const remappedName = mapAttributeName(name);
|
|
18
27
|
|
|
19
|
-
if (
|
|
20
|
-
|
|
21
|
-
} else if (attribute.constant) {
|
|
22
|
-
buffers[remappedName] = attribute.value;
|
|
28
|
+
if (attribute.constant) {
|
|
29
|
+
throw new Error('constant attributes not supported');
|
|
23
30
|
} else {
|
|
24
31
|
const typedArray = attribute.value;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
inferAttributeAccessor(name, accessor);
|
|
32
|
+
buffers[remappedName] = device.createBuffer({
|
|
33
|
+
data: typedArray,
|
|
34
|
+
id: "".concat(remappedName, "-buffer")
|
|
35
|
+
});
|
|
30
36
|
}
|
|
31
37
|
}
|
|
32
38
|
|
|
33
|
-
if (indices) {
|
|
34
|
-
const data = indices.value || indices;
|
|
35
|
-
assert(data instanceof Uint16Array || data instanceof Uint32Array, 'attribute array for "indices" must be of integer type');
|
|
36
|
-
const accessor = {
|
|
37
|
-
size: 1,
|
|
38
|
-
isIndexed: indices.isIndexed === undefined ? true : indices.isIndexed
|
|
39
|
-
};
|
|
40
|
-
buffers.indices = [new Buffer(gl, {
|
|
41
|
-
data,
|
|
42
|
-
target: GL.ELEMENT_ARRAY_BUFFER
|
|
43
|
-
}), accessor];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
39
|
return buffers;
|
|
47
40
|
}
|
|
48
41
|
|
|
49
|
-
function mapAttributeName(name
|
|
50
|
-
|
|
51
|
-
attributeMap = GLTF_TO_LUMA_ATTRIBUTE_MAP
|
|
52
|
-
} = options || {};
|
|
53
|
-
return attributeMap && attributeMap[name] || name;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export function inferAttributeAccessor(attributeName, attribute) {
|
|
57
|
-
let category;
|
|
58
|
-
|
|
59
|
-
switch (attributeName) {
|
|
60
|
-
case 'texCoords':
|
|
61
|
-
case 'texCoord1':
|
|
62
|
-
case 'texCoord2':
|
|
63
|
-
case 'texCoord3':
|
|
64
|
-
category = 'uvs';
|
|
65
|
-
break;
|
|
66
|
-
|
|
67
|
-
case 'vertices':
|
|
68
|
-
case 'positions':
|
|
69
|
-
case 'normals':
|
|
70
|
-
case 'pickingColors':
|
|
71
|
-
category = 'vectors';
|
|
72
|
-
break;
|
|
73
|
-
|
|
74
|
-
default:
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
switch (category) {
|
|
78
|
-
case 'vectors':
|
|
79
|
-
attribute.size = attribute.size || 3;
|
|
80
|
-
break;
|
|
81
|
-
|
|
82
|
-
case 'uvs':
|
|
83
|
-
attribute.size = attribute.size || 2;
|
|
84
|
-
break;
|
|
85
|
-
|
|
86
|
-
default:
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
assert(Number.isFinite(attribute.size), "attribute ".concat(attributeName, " needs size"));
|
|
42
|
+
function mapAttributeName(name) {
|
|
43
|
+
return GLTF_TO_LUMA_ATTRIBUTE_MAP[name] || name;
|
|
90
44
|
}
|
|
91
45
|
//# sourceMappingURL=model-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/model-utils.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["../../src/lib/model-utils.ts"],"names":["Buffer","assert","GLTF_TO_LUMA_ATTRIBUTE_MAP","POSITION","NORMAL","COLOR_0","TEXCOORD_0","TEXCOORD_1","TEXCOORD_2","getIndexBufferFromGeometry","device","geometry","indices","undefined","data","value","Uint16Array","Uint32Array","createBuffer","usage","INDEX","getAttributeBuffersFromGeometry","buffers","name","attribute","Object","entries","attributes","remappedName","mapAttributeName","constant","Error","typedArray","id"],"mappings":"AAAA,SAAgBA,MAAhB,EAAwBC,MAAxB,QAAqC,cAArC;AAIA,MAAMC,0BAA0B,GAAG;AACjCC,EAAAA,QAAQ,EAAE,WADuB;AAEjCC,EAAAA,MAAM,EAAE,SAFyB;AAGjCC,EAAAA,OAAO,EAAE,QAHwB;AAIjCC,EAAAA,UAAU,EAAE,WAJqB;AAKjCC,EAAAA,UAAU,EAAE,YALqB;AAMjCC,EAAAA,UAAU,EAAE;AANqB,CAAnC;AAmDA,OAAO,SAASC,0BAAT,CAAoCC,MAApC,EAAoDC,QAApD,EAA4F;AACjG,MAAI,CAACA,QAAQ,CAACC,OAAd,EAAuB;AACrB,WAAOC,SAAP;AACD;;AAGD,QAAMC,IAAI,GAAGH,QAAQ,CAACC,OAAT,CAAiBG,KAAjB,IAA0BJ,QAAQ,CAACC,OAAhD;AACAX,EAAAA,MAAM,CACJa,IAAI,YAAYE,WAAhB,IAA+BF,IAAI,YAAYG,WAD3C,EAEJ,uDAFI,CAAN;AAIA,SAAOP,MAAM,CAACQ,YAAP,CAAoB;AAACC,IAAAA,KAAK,EAAEnB,MAAM,CAACoB,KAAf;AAAsBN,IAAAA;AAAtB,GAApB,CAAP;AACD;AAED,OAAO,SAASO,+BAAT,CAAyCX,MAAzC,EAAyDC,QAAzD,EAAqG;AAC1G,QAAMW,OAA+B,GAAG,EAAxC;;AAEA,OAAK,MAAM,CAACC,IAAD,EAAOC,SAAP,CAAX,IAAgCC,MAAM,CAACC,OAAP,CAAef,QAAQ,CAACgB,UAAxB,CAAhC,EAAqE;AACnE,UAAMC,YAAY,GAAGC,gBAAgB,CAACN,IAAD,CAArC;;AACA,QAAIC,SAAS,CAACM,QAAd,EAAwB;AACtB,YAAM,IAAIC,KAAJ,CAAU,mCAAV,CAAN;AACD,KAFD,MAEO;AACL,YAAMC,UAAU,GAAGR,SAAS,CAACT,KAA7B;AACAO,MAAAA,OAAO,CAACM,YAAD,CAAP,GAAwBlB,MAAM,CAACQ,YAAP,CAAoB;AAACJ,QAAAA,IAAI,EAAEkB,UAAP;AAAmBC,QAAAA,EAAE,YAAKL,YAAL;AAArB,OAApB,CAAxB;AACD;AACF;;AAED,SAAON,OAAP;AACD;;AAED,SAASO,gBAAT,CAA0BN,IAA1B,EAAgD;AAC9C,SAAOrB,0BAA0B,CAACqB,IAAD,CAA1B,IAAoCA,IAA3C;AACD","sourcesContent":["import {Device, Buffer, assert} from '@luma.gl/api';\nimport type Geometry from '../geometry/geometry';\n\n// Support for mapping new geometries with glTF attribute names to \"classic\" luma.gl shader names\nconst GLTF_TO_LUMA_ATTRIBUTE_MAP = {\n POSITION: 'positions',\n NORMAL: 'normals',\n COLOR_0: 'colors',\n TEXCOORD_0: 'texCoords',\n TEXCOORD_1: 'texCoords1',\n TEXCOORD_2: 'texCoords2'\n};\n\n/*\nexport function getAttributeLayoutsFromGeometry(geometry: Geometry) {\n const layouts: Record<string, {}> = {};\n let indices = geometry.indices;\n\n for (const [name, attribute] of Object.entries(geometry.attributes)) {\n const remappedName = mapAttributeName(name);\n\n if (attribute.constant) {\n throw new Error('constant attributes not supported');\n } else {\n const typedArray = attribute.value;\n // Create accessor by copying the attribute and removing `value``\n const accessor = {...attribute};\n delete accessor.value;\n buffers[remappedName] = [device.createBuffer(typedArray), accessor];\n\n inferAttributeAccessor(name, accessor);\n }\n }\n}\n\nexport class Table {\n length: number;\n // columns: Record<string, TypedArray> = {};\n}\n\nexport class GPUTable {\n length: number;\n columns: Record<string, Buffer> = {};\n}\n\nexport function convertTableToGPUTable(table: Table) {\n // for (const ) {}\n}\n\nexport function renameTableColumns(table: Table, map: (name: string) => string) {\n const newColumns = table.columns.reduce()\n table.clone();\n}\n*/\n\nexport function getIndexBufferFromGeometry(device: Device, geometry: Geometry): Buffer | undefined {\n if (!geometry.indices) {\n return undefined;\n }\n\n // @ts-expect-error\n const data = geometry.indices.value || geometry.indices;\n assert(\n data instanceof Uint16Array || data instanceof Uint32Array,\n 'attribute array for \"indices\" must be of integer type'\n );\n return device.createBuffer({usage: Buffer.INDEX, data});\n}\n\nexport function getAttributeBuffersFromGeometry(device: Device, geometry: Geometry): Record<string, Buffer> {\n const buffers: Record<string, Buffer> = {};\n\n for (const [name, attribute] of Object.entries(geometry.attributes)) {\n const remappedName = mapAttributeName(name);\n if (attribute.constant) {\n throw new Error('constant attributes not supported');\n } else {\n const typedArray = attribute.value;\n buffers[remappedName] = device.createBuffer({data: typedArray, id: `${remappedName}-buffer`});\n }\n }\n\n return buffers;\n}\n\nfunction mapAttributeName(name: string): string {\n return GLTF_TO_LUMA_ATTRIBUTE_MAP[name] || name;\n}\n\n/*\n// Check for well known attribute names\n// eslint-disable-next-line complexity\nexport function inferAttributeAccessor(attributeName, attribute) {\n let category;\n switch (attributeName) {\n case 'texCoords':\n case 'texCoord1':\n case 'texCoord2':\n case 'texCoord3':\n category = 'uvs';\n break;\n case 'vertices':\n case 'positions':\n case 'normals':\n case 'pickingColors':\n category = 'vectors';\n break;\n default:\n }\n\n // Check for categorys\n switch (category) {\n case 'vectors':\n attribute.size = attribute.size || 3;\n break;\n case 'uvs':\n attribute.size = attribute.size || 2;\n break;\n default:\n }\n\n assert(Number.isFinite(attribute.size), `attribute ${attributeName} needs size`);\n}\n*/\n"],"file":"model-utils.js"}
|
package/dist/lib/model.d.ts
CHANGED
|
@@ -1,111 +1,41 @@
|
|
|
1
|
-
import { Device } from '@luma.gl/api';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
export declare type ModelProps =
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
geometry?: object;
|
|
18
|
-
vertexCount?: number;
|
|
19
|
-
drawMode?: number;
|
|
20
|
-
isInstanced?: boolean;
|
|
21
|
-
instanceCount?: number;
|
|
22
|
-
programManager?: ProgramManager;
|
|
23
|
-
onBeforeRender?: () => void;
|
|
24
|
-
onAfterRender?: () => void;
|
|
25
|
-
_feedbackBuffers?: object;
|
|
26
|
-
isIndexed?: boolean;
|
|
27
|
-
indexType?: any;
|
|
28
|
-
indexOffset?: number;
|
|
29
|
-
vertexArrayInstanced?: boolean;
|
|
30
|
-
/** @deprecated Use isInstanced */
|
|
31
|
-
instanced?: boolean;
|
|
32
|
-
};
|
|
33
|
-
export declare type ModelDrawOptions = {
|
|
34
|
-
moduleSettings?: any;
|
|
35
|
-
framebuffer?: any;
|
|
36
|
-
uniforms?: any;
|
|
37
|
-
attributes?: any;
|
|
38
|
-
transformFeedback?: any;
|
|
39
|
-
parameters?: any;
|
|
40
|
-
vertexArray?: any;
|
|
1
|
+
import type { Device, Buffer, RenderPipelineProps, RenderPass, Binding, PrimitiveTopology } from '@luma.gl/api';
|
|
2
|
+
import { RenderPipeline } from '@luma.gl/api';
|
|
3
|
+
import type { ShaderModule } from '@luma.gl/shadertools';
|
|
4
|
+
import type Geometry from '../geometry/geometry';
|
|
5
|
+
export declare type ModelProps = Omit<RenderPipelineProps, 'vs' | 'fs'> & {
|
|
6
|
+
vs?: {
|
|
7
|
+
glsl?: string;
|
|
8
|
+
wgsl?: string;
|
|
9
|
+
} | string | null;
|
|
10
|
+
fs?: {
|
|
11
|
+
glsl?: string;
|
|
12
|
+
wgsl?: string;
|
|
13
|
+
} | string | null;
|
|
14
|
+
modules?: ShaderModule[];
|
|
15
|
+
moduleSettings?: Record<string, Record<string, any>>;
|
|
16
|
+
geometry?: Geometry | null;
|
|
41
17
|
};
|
|
18
|
+
/** v9 API */
|
|
42
19
|
export default class Model {
|
|
43
20
|
readonly device: Device;
|
|
44
|
-
readonly
|
|
21
|
+
readonly pipeline: RenderPipeline;
|
|
45
22
|
readonly id: string;
|
|
46
|
-
readonly
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
props: ModelProps
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
attributes: Record<string, any>;
|
|
54
|
-
_attributes: Record<string, any>;
|
|
55
|
-
uniforms: Record<string, any>;
|
|
56
|
-
drawMode: any;
|
|
57
|
-
instanceCount: number;
|
|
58
|
-
pickable: boolean;
|
|
59
|
-
programProps: ProgramProps & {
|
|
60
|
-
program?: Program;
|
|
61
|
-
modules: any;
|
|
62
|
-
inject: any;
|
|
63
|
-
defines: any;
|
|
64
|
-
varyings: any;
|
|
65
|
-
bufferMode: any;
|
|
66
|
-
transpileToGLSL100: any;
|
|
67
|
-
};
|
|
68
|
-
vertexArray: VertexArray;
|
|
69
|
-
program: Program;
|
|
70
|
-
transformFeedback: TransformFeedback | undefined;
|
|
71
|
-
_programDirty: boolean;
|
|
72
|
-
_programManagerState: any;
|
|
73
|
-
_managedProgram: any;
|
|
74
|
-
geometryBuffers: {};
|
|
75
|
-
isInstanced: boolean;
|
|
76
|
-
geometry: {};
|
|
77
|
-
constructor(device: Device, props?: ModelProps);
|
|
78
|
-
constructor(gl: WebGLRenderingContext, props?: ModelProps);
|
|
79
|
-
initialize(props: ModelProps): void;
|
|
80
|
-
setProps(props: any): void;
|
|
23
|
+
readonly vs: string;
|
|
24
|
+
readonly fs: string | null;
|
|
25
|
+
readonly topology: PrimitiveTopology;
|
|
26
|
+
readonly vertexCount: any;
|
|
27
|
+
props: Required<ModelProps>;
|
|
28
|
+
private _getModuleUniforms;
|
|
29
|
+
constructor(device: Device, props: ModelProps);
|
|
81
30
|
destroy(): void;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
setDrawMode(drawMode: any): this;
|
|
92
|
-
setVertexCount(vertexCount: any): this;
|
|
93
|
-
setInstanceCount(instanceCount: any): this;
|
|
94
|
-
setGeometry(geometry: any): this;
|
|
95
|
-
setAttributes(attributes?: {}): this;
|
|
96
|
-
setUniforms(uniforms?: {}): this;
|
|
97
|
-
getModuleUniforms(opts?: any): any;
|
|
98
|
-
updateModuleSettings(opts?: any): this;
|
|
99
|
-
clear(opts: any): this;
|
|
100
|
-
draw(opts?: ModelDrawOptions): boolean;
|
|
101
|
-
transform(opts?: ModelDrawOptions): this;
|
|
102
|
-
render(uniforms?: {}): boolean;
|
|
103
|
-
_setModelProps(props: any): void;
|
|
104
|
-
_checkProgram(): void;
|
|
105
|
-
_deleteGeometryBuffers(): void;
|
|
106
|
-
_setAnimationProps(animationProps: any): void;
|
|
107
|
-
_setFeedbackBuffers(feedbackBuffers?: {}): this;
|
|
108
|
-
_logDrawCallStart(logLevel: number): number;
|
|
109
|
-
_logDrawCallEnd(logLevel: any, vertexArray: any, uniforms: any, framebuffer?: any): void;
|
|
31
|
+
draw(renderPass?: RenderPass): this;
|
|
32
|
+
setProps(props: ModelProps): this;
|
|
33
|
+
updateModuleSettings(props: Record<string, any>): this;
|
|
34
|
+
setIndexBuffer(indices: Buffer): this;
|
|
35
|
+
setAttributes(attributes: Record<string, Buffer>): this;
|
|
36
|
+
/** Set the bindings */
|
|
37
|
+
setBindings(bindings: Record<string, Binding>): this;
|
|
38
|
+
setUniforms(uniforms: Record<string, any>): this;
|
|
39
|
+
_setGeometry(geometry: Geometry): void;
|
|
110
40
|
}
|
|
111
41
|
//# sourceMappingURL=model.d.ts.map
|
package/dist/lib/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/lib/model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/lib/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAC9G,OAAO,EAAC,cAAc,EAAe,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAIjD,oBAAY,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG;IAEhE,EAAE,CAAC,EAAE;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACpD,EAAE,CAAC,EAAE;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACpD,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC5B,CAAC;AAcF,aAAa;AACb,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,WAAW,MAAC;IACrB,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE5B,OAAO,CAAC,kBAAkB,CAAuE;gBAErF,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;IA2C7C,OAAO,IAAI,IAAI;IAIf,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IASnC,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAmBjC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAMtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMrC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAMvD,uBAAuB;IACvB,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAMpD,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAMhD,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAWvC"}
|