@luma.gl/engine 8.5.15 → 8.5.17
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/dist.js +5946 -6070
- package/dist/dist.min.js +1 -1
- package/dist/es5/animation/key-frames.js.map +1 -1
- package/dist/es5/animation/timeline.js +1 -1
- package/dist/es5/animation/timeline.js.map +1 -1
- package/dist/es5/geometries/cone-geometry.js +6 -4
- package/dist/es5/geometries/cone-geometry.js.map +1 -1
- package/dist/es5/geometries/cube-geometry.js +6 -4
- package/dist/es5/geometries/cube-geometry.js.map +1 -1
- package/dist/es5/geometries/cylinder-geometry.js +6 -4
- package/dist/es5/geometries/cylinder-geometry.js.map +1 -1
- package/dist/es5/geometries/ico-sphere-geometry.js +6 -4
- package/dist/es5/geometries/ico-sphere-geometry.js.map +1 -1
- package/dist/es5/geometries/plane-geometry.js +6 -4
- package/dist/es5/geometries/plane-geometry.js.map +1 -1
- package/dist/es5/geometries/sphere-geometry.js +6 -4
- package/dist/es5/geometries/sphere-geometry.js.map +1 -1
- package/dist/es5/geometries/truncated-cone-geometry.js +6 -4
- package/dist/es5/geometries/truncated-cone-geometry.js.map +1 -1
- package/dist/es5/geometry/geometry-utils.js.map +1 -1
- package/dist/es5/geometry/geometry.js +10 -12
- package/dist/es5/geometry/geometry.js.map +1 -1
- package/dist/es5/index.js +24 -24
- package/dist/es5/lib/animation-loop.d.ts +1 -1
- package/dist/es5/lib/animation-loop.js +2 -2
- package/dist/es5/lib/animation-loop.js.map +1 -1
- package/dist/es5/lib/model-utils.js +2 -2
- package/dist/es5/lib/model-utils.js.map +1 -1
- package/dist/es5/lib/model.js +1 -1
- package/dist/es5/lib/model.js.map +1 -1
- package/dist/es5/lib/program-manager.js +8 -10
- package/dist/es5/lib/program-manager.js.map +1 -1
- package/dist/es5/transform/buffer-transform.js +1 -1
- package/dist/es5/transform/buffer-transform.js.map +1 -1
- package/dist/es5/transform/texture-transform.js.map +1 -1
- package/dist/es5/transform/transform-shader-utils.js +1 -1
- package/dist/es5/transform/transform-shader-utils.js.map +1 -1
- package/dist/es5/transform/transform.js +6 -8
- package/dist/es5/transform/transform.js.map +1 -1
- package/dist/es5/utils/clip-space.js +4 -2
- package/dist/es5/utils/clip-space.js.map +1 -1
- package/dist/esm/geometries/cone-geometry.js +2 -1
- package/dist/esm/geometries/cone-geometry.js.map +1 -1
- package/dist/esm/geometries/cube-geometry.js +2 -1
- package/dist/esm/geometries/cube-geometry.js.map +1 -1
- package/dist/esm/geometries/cylinder-geometry.js +2 -1
- package/dist/esm/geometries/cylinder-geometry.js.map +1 -1
- package/dist/esm/geometries/ico-sphere-geometry.js +3 -2
- package/dist/esm/geometries/ico-sphere-geometry.js.map +1 -1
- package/dist/esm/geometries/plane-geometry.js +6 -5
- package/dist/esm/geometries/plane-geometry.js.map +1 -1
- package/dist/esm/geometries/sphere-geometry.js +2 -1
- package/dist/esm/geometries/sphere-geometry.js.map +1 -1
- package/dist/esm/geometries/truncated-cone-geometry.js +2 -1
- package/dist/esm/geometries/truncated-cone-geometry.js.map +1 -1
- package/dist/esm/geometry/geometry.js +4 -3
- package/dist/esm/geometry/geometry.js.map +1 -1
- package/dist/esm/lib/animation-loop.d.ts +1 -1
- package/dist/esm/lib/animation-loop.js +19 -15
- package/dist/esm/lib/animation-loop.js.map +1 -1
- package/dist/esm/lib/model-utils.js +1 -1
- package/dist/esm/lib/model-utils.js.map +1 -1
- package/dist/esm/lib/model.js +23 -13
- package/dist/esm/lib/model.js.map +1 -1
- package/dist/esm/lib/program-manager.js +5 -3
- package/dist/esm/lib/program-manager.js.map +1 -1
- package/dist/esm/transform/buffer-transform.js +20 -10
- package/dist/esm/transform/buffer-transform.js.map +1 -1
- package/dist/esm/transform/texture-transform.js +21 -11
- package/dist/esm/transform/texture-transform.js.map +1 -1
- package/dist/esm/transform/transform-shader-utils.js +23 -25
- package/dist/esm/transform/transform-shader-utils.js.map +1 -1
- package/dist/esm/transform/transform.js +13 -6
- package/dist/esm/transform/transform.js.map +1 -1
- package/dist/esm/utils/clip-space.js +1 -16
- package/dist/esm/utils/clip-space.js.map +1 -1
- package/package.json +8 -8
- package/src/lib/animation-loop.d.ts +1 -1
- package/src/lib/model.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/animation-loop.js"],"names":["isWebGL","createGLContext","instrumentGLContext","resizeGLContext","resetParameters","requestAnimationFrame","cancelAnimationFrame","Query","lumaStats","Framebuffer","log","assert","isBrowser","isPage","document","statIdCounter","AnimationLoop","constructor","props","onCreateContext","opts","onAddHTML","onInitialize","onRender","onFinalize","onError","gl","glOptions","debug","createFramebuffer","autoResizeViewport","autoResizeDrawingBuffer","stats","get","useDevicePixels","deprecated","useDevicePixelRatio","needsRedraw","timeline","cpuTime","gpuTime","frameRate","_initialized","_running","_animationFrameId","_nextFramePromise","_resolveNextFrame","_cpuStartTime","setProps","start","bind","stop","_pageLoadPromise","_onMousemove","_onMouseleave","delete","_setDisplay","setNeedsRedraw","reason","startPromise","_getPageLoadPromise","then","_createWebGLContext","_createFramebuffer","_startEventHandling","_initializeCallbackData","_updateCallbackData","_resizeCanvasDrawingBuffer","_resizeViewport","_gpuTimeQuery","isSupported","animationProps","appContext","_addCallbackData","_startLoop","catch","redraw","isContextLost","_beginTimers","_setupFrame","_renderFrame","_clearNeedsRedraw","offScreen","commit","_endTimers","_finalizeCallbackData","_cancelAnimationFrame","attachTimeline","detachTimeline","waitForRender","Promise","resolve","toDataURL","canvas","args","getHTMLControlValue","id","defaultValue","element","getElementById","Number","value","setViewParameters","removed","renderFrame","_requestAnimationFrame","reject","readyState","window","addEventListener","display","animationLoop","animationFrameId","renderFrameCallback","undefined","_resizeFramebuffer","framebuffer","startTime","Date","now","engineTime","tick","tock","time","_timeline","_loop","_animationLoop","_mousePosition","width","height","aspect","_getSizeAndAspect","update","Math","floor","getTime","_offScreen","Object","assign","OffscreenCanvas","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 {\n isWebGL,\n createGLContext,\n instrumentGLContext,\n resizeGLContext,\n resetParameters\n} from '@luma.gl/gltools';\n\nimport {\n requestAnimationFrame,\n cancelAnimationFrame,\n Query,\n lumaStats,\n // TODO - remove dependency on framebuffer (bundle size impact)\n Framebuffer,\n log,\n assert\n} from '@luma.gl/webgl';\n\nimport {isBrowser} from '@probe.gl/env';\n\nconst isPage = isBrowser() && typeof document !== 'undefined';\n\nlet statIdCounter = 0;\n\nexport default class AnimationLoop {\n /*\n * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context\n */\n constructor(props = {}) {\n const {\n onCreateContext = opts => createGLContext(opts),\n onAddHTML = null,\n onInitialize = () => {},\n onRender = () => {},\n onFinalize = () => {},\n onError,\n\n gl = null,\n glOptions = {},\n debug = false,\n\n createFramebuffer = false,\n\n // view parameters\n autoResizeViewport = true,\n autoResizeDrawingBuffer = true,\n stats = lumaStats.get(`animation-loop-${statIdCounter++}`)\n } = props;\n\n let {useDevicePixels = true} = props;\n\n if ('useDevicePixelRatio' in props) {\n log.deprecated('useDevicePixelRatio', 'useDevicePixels')();\n // @ts-ignore\n useDevicePixels = props.useDevicePixelRatio;\n }\n\n this.props = {\n onCreateContext,\n onAddHTML,\n onInitialize,\n onRender,\n onFinalize,\n onError,\n\n gl,\n glOptions,\n debug,\n createFramebuffer\n };\n\n // state\n this.gl = gl;\n this.needsRedraw = null;\n this.timeline = null;\n this.stats = 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._initialized = false;\n this._running = false;\n this._animationFrameId = null;\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._cpuStartTime = 0;\n\n this.setProps({\n autoResizeViewport,\n 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._pageLoadPromise = null;\n\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n\n delete() {\n this.stop();\n this._setDisplay(null);\n }\n\n setNeedsRedraw(reason) {\n assert(typeof reason === 'string');\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n\n setProps(props) {\n if ('autoResizeViewport' in props) {\n this.autoResizeViewport = props.autoResizeViewport;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;\n }\n if ('useDevicePixels' in props) {\n this.useDevicePixels = props.useDevicePixels;\n }\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 start(opts = {}) {\n if (this._running) {\n return this;\n }\n this._running = true;\n // console.debug(`Starting ${this.constructor.name}`);\n // Wait for start promise before rendering frame\n const startPromise = this._getPageLoadPromise()\n .then(() => {\n if (!this._running || this._initialized) {\n return null;\n }\n\n // Create the WebGL context\n this._createWebGLContext(opts);\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 this._initialized = true;\n\n // Note: onIntialize can return a promise (in case it needs to load resources)\n return this.onInitialize(this.animationProps);\n })\n .then(appContext => {\n if (this._running) {\n this._addCallbackData(appContext || {});\n if (appContext !== false) {\n this._startLoop();\n }\n }\n });\n\n if (this.props.onError) {\n startPromise.catch(this.props.onError);\n }\n\n return this;\n }\n\n // Redraw now\n redraw() {\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 // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit\n // Chrome's offscreen canvas does not require gl.commit\n if (this.offScreen && this.gl.commit) {\n this.gl.commit();\n }\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(this._animationFrameId);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._animationFrameId = null;\n this._running = false;\n }\n return this;\n }\n\n attachTimeline(timeline) {\n this.timeline = timeline;\n\n return this.timeline;\n }\n\n detachTimeline() {\n this.timeline = null;\n }\n\n waitForRender() {\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() {\n return this.gl.isContextLost();\n }\n\n onCreateContext(...args) {\n return this.props.onCreateContext(...args);\n }\n\n onInitialize(...args) {\n return this.props.onInitialize(...args);\n }\n\n onRender(...args) {\n return this.props.onRender(...args);\n }\n\n onFinalize(...args) {\n return this.props.onFinalize(...args);\n }\n\n // DEPRECATED/REMOVED METHODS\n\n getHTMLControlValue(id, defaultValue = 1) {\n const element = document.getElementById(id);\n // @ts-ignore Not all html elements have value\n return element ? Number(element.value) : defaultValue;\n }\n\n // Update parameters\n setViewParameters() {\n log.removed('AnimationLoop.setViewParameters', 'AnimationLoop.setProps')();\n return this;\n }\n\n // PRIVATE METHODS\n\n _startLoop() {\n const renderFrame = () => {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n };\n\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n }\n\n // PRIVATE METHODS\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 _cancelAnimationFrame(animationFrameId) {\n // E.g. VR display has a separate animation frame to sync with headset\n if (this.display && this.display.cancelAnimationFrame) {\n return this.display.cancelAnimationFrame(animationFrameId);\n }\n\n return cancelAnimationFrame(animationFrameId);\n }\n\n _requestAnimationFrame(renderFrameCallback) {\n if (this._running) {\n // E.g. VR display has a separate animation frame to sync with headset\n if (this.display && this.display.requestAnimationFrame) {\n return this.display.requestAnimationFrame(renderFrameCallback);\n }\n\n return requestAnimationFrame(renderFrameCallback);\n }\n return undefined;\n }\n\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(...args) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(...args);\n return;\n }\n\n // call callback\n this.onRender(...args);\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 this.animationProps = {\n gl: this.gl,\n\n stop: this.stop,\n canvas: this.gl.canvas,\n framebuffer: this.framebuffer,\n\n // Initial values\n useDevicePixels: this.useDevicePixels,\n needsRedraw: null,\n\n // Animation props\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n\n // Timeline time for back compatibility\n time: 0,\n\n // Experimental\n _timeline: this.timeline,\n _loop: this,\n _animationLoop: this,\n _mousePosition: null // Event props\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 // experimental\n this.animationProps._offScreen = this.offScreen;\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 _createWebGLContext(opts) {\n this.offScreen =\n opts.canvas &&\n typeof OffscreenCanvas !== 'undefined' &&\n opts.canvas instanceof OffscreenCanvas;\n\n // Create the WebGL context if necessary\n opts = Object.assign({}, opts, this.props.glOptions);\n this.gl = this.props.gl ? instrumentGLContext(this.props.gl, opts) : this.onCreateContext(opts);\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.autoResizeViewport) {\n this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);\n }\n }\n\n // Resize the render buffer of the canvas to match canvas client size\n // Optionally multiplying with devicePixel ratio\n _resizeCanvasDrawingBuffer() {\n if (this.autoResizeDrawingBuffer) {\n resizeGLContext(this.gl, {useDevicePixels: this.useDevicePixels});\n }\n }\n\n // TBD - deprecated?\n _createFramebuffer() {\n // Setup default framebuffer\n if (this.props.createFramebuffer) {\n this.framebuffer = new Framebuffer(this.gl);\n }\n }\n\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 _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"],"file":"animation-loop.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/animation-loop.js"],"names":["isWebGL","createGLContext","instrumentGLContext","resizeGLContext","resetParameters","requestAnimationFrame","cancelAnimationFrame","Query","lumaStats","Framebuffer","log","assert","isBrowser","isPage","document","statIdCounter","AnimationLoop","constructor","props","onCreateContext","opts","onAddHTML","onInitialize","onRender","onFinalize","onError","gl","glOptions","debug","createFramebuffer","autoResizeViewport","autoResizeDrawingBuffer","stats","get","useDevicePixels","deprecated","useDevicePixelRatio","needsRedraw","timeline","cpuTime","gpuTime","frameRate","_initialized","_running","_animationFrameId","_nextFramePromise","_resolveNextFrame","_cpuStartTime","setProps","start","bind","stop","_pageLoadPromise","_onMousemove","_onMouseleave","delete","_setDisplay","setNeedsRedraw","reason","startPromise","_getPageLoadPromise","then","_createWebGLContext","_createFramebuffer","_startEventHandling","_initializeCallbackData","_updateCallbackData","_resizeCanvasDrawingBuffer","_resizeViewport","_gpuTimeQuery","isSupported","animationProps","appContext","_addCallbackData","_startLoop","catch","redraw","isContextLost","_beginTimers","_setupFrame","_renderFrame","_clearNeedsRedraw","offScreen","commit","_endTimers","_finalizeCallbackData","_cancelAnimationFrame","attachTimeline","detachTimeline","waitForRender","Promise","resolve","toDataURL","canvas","getHTMLControlValue","id","defaultValue","element","getElementById","Number","value","setViewParameters","removed","renderFrame","_requestAnimationFrame","reject","readyState","window","addEventListener","display","animationLoop","animationFrameId","renderFrameCallback","undefined","_resizeFramebuffer","framebuffer","startTime","Date","now","engineTime","tick","tock","time","_timeline","_loop","_animationLoop","_mousePosition","width","height","aspect","_getSizeAndAspect","update","Math","floor","getTime","_offScreen","Object","assign","OffscreenCanvas","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 {\n isWebGL,\n createGLContext,\n instrumentGLContext,\n resizeGLContext,\n resetParameters\n} from '@luma.gl/gltools';\n\nimport {\n requestAnimationFrame,\n cancelAnimationFrame,\n Query,\n lumaStats,\n // TODO - remove dependency on framebuffer (bundle size impact)\n Framebuffer,\n log,\n assert\n} from '@luma.gl/webgl';\n\nimport {isBrowser} from '@probe.gl/env';\n\nconst isPage = isBrowser() && typeof document !== 'undefined';\n\nlet statIdCounter = 0;\n\nexport default class AnimationLoop {\n /*\n * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context\n */\n constructor(props = {}) {\n const {\n onCreateContext = opts => createGLContext(opts),\n onAddHTML = null,\n onInitialize = () => {},\n onRender = () => {},\n onFinalize = () => {},\n onError,\n\n gl = null,\n glOptions = {},\n debug = false,\n\n createFramebuffer = false,\n\n // view parameters\n autoResizeViewport = true,\n autoResizeDrawingBuffer = true,\n stats = lumaStats.get(`animation-loop-${statIdCounter++}`)\n } = props;\n\n let {useDevicePixels = true} = props;\n\n if ('useDevicePixelRatio' in props) {\n log.deprecated('useDevicePixelRatio', 'useDevicePixels')();\n // @ts-ignore\n useDevicePixels = props.useDevicePixelRatio;\n }\n\n this.props = {\n onCreateContext,\n onAddHTML,\n onInitialize,\n onRender,\n onFinalize,\n onError,\n\n gl,\n glOptions,\n debug,\n createFramebuffer\n };\n\n // state\n this.gl = gl;\n this.needsRedraw = null;\n this.timeline = null;\n this.stats = 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._initialized = false;\n this._running = false;\n this._animationFrameId = null;\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._cpuStartTime = 0;\n\n this.setProps({\n autoResizeViewport,\n 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._pageLoadPromise = null;\n\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n\n delete() {\n this.stop();\n this._setDisplay(null);\n }\n\n setNeedsRedraw(reason) {\n assert(typeof reason === 'string');\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n\n setProps(props) {\n if ('autoResizeViewport' in props) {\n this.autoResizeViewport = props.autoResizeViewport;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;\n }\n if ('useDevicePixels' in props) {\n this.useDevicePixels = props.useDevicePixels;\n }\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 start(opts = {}) {\n if (this._running) {\n return this;\n }\n this._running = true;\n // console.debug(`Starting ${this.constructor.name}`);\n // Wait for start promise before rendering frame\n const startPromise = this._getPageLoadPromise()\n .then(() => {\n if (!this._running || this._initialized) {\n return null;\n }\n\n // Create the WebGL context\n this._createWebGLContext(opts);\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 this._initialized = true;\n\n // Note: onIntialize can return a promise (in case it needs to load resources)\n return this.onInitialize(this.animationProps);\n })\n .then(appContext => {\n if (this._running) {\n this._addCallbackData(appContext || {});\n if (appContext !== false) {\n this._startLoop();\n }\n }\n });\n\n if (this.props.onError) {\n startPromise.catch(this.props.onError);\n }\n\n return this;\n }\n\n // Redraw now\n redraw() {\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 // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit\n // Chrome's offscreen canvas does not require gl.commit\n if (this.offScreen && this.gl.commit) {\n this.gl.commit();\n }\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(this._animationFrameId);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._animationFrameId = null;\n this._running = false;\n }\n return this;\n }\n\n attachTimeline(timeline) {\n this.timeline = timeline;\n\n return this.timeline;\n }\n\n detachTimeline() {\n this.timeline = null;\n }\n\n waitForRender() {\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() {\n return this.gl.isContextLost();\n }\n\n onCreateContext(...args) {\n return this.props.onCreateContext(...args);\n }\n\n onInitialize(...args) {\n return this.props.onInitialize(...args);\n }\n\n onRender(...args) {\n return this.props.onRender(...args);\n }\n\n onFinalize(...args) {\n return this.props.onFinalize(...args);\n }\n\n // DEPRECATED/REMOVED METHODS\n\n getHTMLControlValue(id, defaultValue = 1) {\n const element = document.getElementById(id);\n // @ts-ignore Not all html elements have value\n return element ? Number(element.value) : defaultValue;\n }\n\n // Update parameters\n setViewParameters() {\n log.removed('AnimationLoop.setViewParameters', 'AnimationLoop.setProps')();\n return this;\n }\n\n // PRIVATE METHODS\n\n _startLoop() {\n const renderFrame = () => {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n };\n\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n }\n\n // PRIVATE METHODS\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 _cancelAnimationFrame(animationFrameId) {\n // E.g. VR display has a separate animation frame to sync with headset\n if (this.display && this.display.cancelAnimationFrame) {\n return this.display.cancelAnimationFrame(animationFrameId);\n }\n\n return cancelAnimationFrame(animationFrameId);\n }\n\n _requestAnimationFrame(renderFrameCallback) {\n if (this._running) {\n // E.g. VR display has a separate animation frame to sync with headset\n if (this.display && this.display.requestAnimationFrame) {\n return this.display.requestAnimationFrame(renderFrameCallback);\n }\n\n return requestAnimationFrame(renderFrameCallback);\n }\n return undefined;\n }\n\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(...args) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(...args);\n return;\n }\n\n // call callback\n this.onRender(...args);\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 this.animationProps = {\n gl: this.gl,\n\n stop: this.stop,\n canvas: this.gl.canvas,\n framebuffer: this.framebuffer,\n\n // Initial values\n useDevicePixels: this.useDevicePixels,\n needsRedraw: null,\n\n // Animation props\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n\n // Timeline time for back compatibility\n time: 0,\n\n // Experimental\n _timeline: this.timeline,\n _loop: this,\n _animationLoop: this,\n _mousePosition: null // Event props\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 // experimental\n this.animationProps._offScreen = this.offScreen;\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 _createWebGLContext(opts) {\n this.offScreen =\n opts.canvas &&\n typeof OffscreenCanvas !== 'undefined' &&\n opts.canvas instanceof OffscreenCanvas;\n\n // Create the WebGL context if necessary\n opts = Object.assign({}, opts, this.props.glOptions);\n this.gl = this.props.gl ? instrumentGLContext(this.props.gl, opts) : this.onCreateContext(opts);\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.autoResizeViewport) {\n this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);\n }\n }\n\n // Resize the render buffer of the canvas to match canvas client size\n // Optionally multiplying with devicePixel ratio\n _resizeCanvasDrawingBuffer() {\n if (this.autoResizeDrawingBuffer) {\n resizeGLContext(this.gl, {useDevicePixels: this.useDevicePixels});\n }\n }\n\n // TBD - deprecated?\n _createFramebuffer() {\n // Setup default framebuffer\n if (this.props.createFramebuffer) {\n this.framebuffer = new Framebuffer(this.gl);\n }\n }\n\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 _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"],"file":"animation-loop.js"}
|
|
@@ -85,6 +85,6 @@ export function inferAttributeAccessor(attributeName, attribute) {
|
|
|
85
85
|
default:
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
assert(Number.isFinite(attribute.size),
|
|
88
|
+
assert(Number.isFinite(attribute.size), "attribute ".concat(attributeName, " needs size"));
|
|
89
89
|
}
|
|
90
90
|
//# sourceMappingURL=model-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/model-utils.js"],"names":["Buffer","assert","GLTF_TO_LUMA_ATTRIBUTE_MAP","POSITION","NORMAL","COLOR_0","TEXCOORD_0","TEXCOORD_1","TEXCOORD_2","getBuffersFromGeometry","gl","geometry","options","buffers","indices","name","attributes","attribute","remappedName","mapAttributeName","constant","value","typedArray","accessor","inferAttributeAccessor","data","Uint16Array","Uint32Array","size","isIndexed","undefined","target","attributeMap","attributeName","category","Number","isFinite"],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/model-utils.js"],"names":["Buffer","assert","GLTF_TO_LUMA_ATTRIBUTE_MAP","POSITION","NORMAL","COLOR_0","TEXCOORD_0","TEXCOORD_1","TEXCOORD_2","getBuffersFromGeometry","gl","geometry","options","buffers","indices","name","attributes","attribute","remappedName","mapAttributeName","constant","value","typedArray","accessor","inferAttributeAccessor","data","Uint16Array","Uint32Array","size","isIndexed","undefined","target","attributeMap","attributeName","category","Number","isFinite"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {Buffer, assert} from '@luma.gl/webgl';\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\nexport function getBuffersFromGeometry(gl, geometry, options) {\n const buffers = {};\n let indices = geometry.indices;\n\n for (const name in geometry.attributes) {\n const attribute = geometry.attributes[name];\n const remappedName = mapAttributeName(name, options);\n\n if (name === 'indices') {\n indices = attribute;\n } else if (attribute.constant) {\n buffers[remappedName] = attribute.value;\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] = [new Buffer(gl, typedArray), accessor];\n\n inferAttributeAccessor(name, accessor);\n }\n }\n\n if (indices) {\n const data = indices.value || indices;\n assert(\n data instanceof Uint16Array || data instanceof Uint32Array,\n 'attribute array for \"indices\" must be of integer type'\n );\n const accessor = {\n size: 1,\n isIndexed: indices.isIndexed === undefined ? true : indices.isIndexed\n };\n buffers.indices = [\n new Buffer(gl, {\n data,\n target: GL.ELEMENT_ARRAY_BUFFER\n }),\n accessor\n ];\n }\n\n return buffers;\n}\n\nfunction mapAttributeName(name, options) {\n const {attributeMap = GLTF_TO_LUMA_ATTRIBUTE_MAP} = options || {};\n return (attributeMap && attributeMap[name]) || name;\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"],"file":"model-utils.js"}
|
package/dist/esm/lib/model.js
CHANGED
|
@@ -11,7 +11,8 @@ const NOOP = () => {};
|
|
|
11
11
|
|
|
12
12
|
const DRAW_PARAMS = {};
|
|
13
13
|
export default class Model {
|
|
14
|
-
constructor(gl
|
|
14
|
+
constructor(gl) {
|
|
15
|
+
let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
15
16
|
const {
|
|
16
17
|
id = uid('model')
|
|
17
18
|
} = props;
|
|
@@ -174,7 +175,9 @@ export default class Model {
|
|
|
174
175
|
return this;
|
|
175
176
|
}
|
|
176
177
|
|
|
177
|
-
setAttributes(
|
|
178
|
+
setAttributes() {
|
|
179
|
+
let attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
180
|
+
|
|
178
181
|
if (isObjectEmpty(attributes)) {
|
|
179
182
|
return this;
|
|
180
183
|
}
|
|
@@ -190,7 +193,8 @@ export default class Model {
|
|
|
190
193
|
return this;
|
|
191
194
|
}
|
|
192
195
|
|
|
193
|
-
setUniforms(
|
|
196
|
+
setUniforms() {
|
|
197
|
+
let uniforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
194
198
|
Object.assign(this.uniforms, uniforms);
|
|
195
199
|
return this;
|
|
196
200
|
}
|
|
@@ -217,7 +221,9 @@ export default class Model {
|
|
|
217
221
|
return this;
|
|
218
222
|
}
|
|
219
223
|
|
|
220
|
-
draw(
|
|
224
|
+
draw() {
|
|
225
|
+
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
226
|
+
|
|
221
227
|
this._checkProgram();
|
|
222
228
|
|
|
223
229
|
const {
|
|
@@ -284,7 +290,8 @@ export default class Model {
|
|
|
284
290
|
return didDraw;
|
|
285
291
|
}
|
|
286
292
|
|
|
287
|
-
transform(
|
|
293
|
+
transform() {
|
|
294
|
+
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
288
295
|
const {
|
|
289
296
|
discard = true,
|
|
290
297
|
feedbackBuffers,
|
|
@@ -317,7 +324,8 @@ export default class Model {
|
|
|
317
324
|
return this;
|
|
318
325
|
}
|
|
319
326
|
|
|
320
|
-
render(
|
|
327
|
+
render() {
|
|
328
|
+
let uniforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
321
329
|
log.warn('Model.render() is deprecated. Use Model.setUniforms() and Model.draw()')();
|
|
322
330
|
return this.setUniforms(uniforms).draw();
|
|
323
331
|
}
|
|
@@ -432,7 +440,9 @@ export default class Model {
|
|
|
432
440
|
}
|
|
433
441
|
}
|
|
434
442
|
|
|
435
|
-
_setFeedbackBuffers(
|
|
443
|
+
_setFeedbackBuffers() {
|
|
444
|
+
let feedbackBuffers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
445
|
+
|
|
436
446
|
if (isObjectEmpty(feedbackBuffers)) {
|
|
437
447
|
return this;
|
|
438
448
|
}
|
|
@@ -455,7 +465,7 @@ export default class Model {
|
|
|
455
465
|
}
|
|
456
466
|
|
|
457
467
|
this.lastLogTime = Date.now();
|
|
458
|
-
log.group(LOG_DRAW_PRIORITY,
|
|
468
|
+
log.group(LOG_DRAW_PRIORITY, ">>> DRAWING MODEL ".concat(this.id), {
|
|
459
469
|
collapsed: log.level <= 2
|
|
460
470
|
})();
|
|
461
471
|
return logLevel;
|
|
@@ -468,7 +478,7 @@ export default class Model {
|
|
|
468
478
|
|
|
469
479
|
const attributeTable = getDebugTableForVertexArray({
|
|
470
480
|
vertexArray,
|
|
471
|
-
header:
|
|
481
|
+
header: "".concat(this.id, " attributes"),
|
|
472
482
|
attributes: this._attributes
|
|
473
483
|
});
|
|
474
484
|
const {
|
|
@@ -476,7 +486,7 @@ export default class Model {
|
|
|
476
486
|
unusedTable,
|
|
477
487
|
unusedCount
|
|
478
488
|
} = getDebugTableForUniforms({
|
|
479
|
-
header:
|
|
489
|
+
header: "".concat(this.id, " uniforms"),
|
|
480
490
|
program: this.program,
|
|
481
491
|
uniforms: Object.assign({}, this.program.uniforms, uniforms)
|
|
482
492
|
});
|
|
@@ -484,7 +494,7 @@ export default class Model {
|
|
|
484
494
|
table: missingTable,
|
|
485
495
|
count: missingCount
|
|
486
496
|
} = getDebugTableForUniforms({
|
|
487
|
-
header:
|
|
497
|
+
header: "".concat(this.id, " uniforms"),
|
|
488
498
|
program: this.program,
|
|
489
499
|
uniforms: Object.assign({}, this.program.uniforms, uniforms),
|
|
490
500
|
undefinedOnly: true
|
|
@@ -506,11 +516,11 @@ export default class Model {
|
|
|
506
516
|
if (framebuffer) {
|
|
507
517
|
framebuffer.log({
|
|
508
518
|
logLevel: LOG_DRAW_PRIORITY,
|
|
509
|
-
message:
|
|
519
|
+
message: "Rendered to ".concat(framebuffer.id)
|
|
510
520
|
});
|
|
511
521
|
}
|
|
512
522
|
|
|
513
|
-
log.groupEnd(LOG_DRAW_PRIORITY
|
|
523
|
+
log.groupEnd(LOG_DRAW_PRIORITY)();
|
|
514
524
|
}
|
|
515
525
|
|
|
516
526
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/model.js"],"names":["isWebGL","ProgramManager","Program","VertexArray","clear","TransformFeedback","Buffer","log","isObjectEmpty","uid","assert","getDebugTableForUniforms","getDebugTableForVertexArray","getDebugTableForProgramConfiguration","getBuffersFromGeometry","LOG_DRAW_PRIORITY","LOG_DRAW_TIMEOUT","ERR_MODEL_PARAMS","NOOP","DRAW_PARAMS","Model","constructor","gl","props","id","lastLogTime","animated","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","vertexCount","geometryBuffers","isInstanced","instanced","instanceCount","_setModelProps","geometry","Number","isFinite","setProps","delete","key","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","forEach","model","unbindBuffers","bindBuffers","render","_feedbackBuffers","needsUpdate","stateHash","get","buffer","_setAnimationProps","animationProps","setBuffers","logLevel","logDrawTimeout","Date","now","group","collapsed","level","attributeTable","header","table","uniformTable","unusedTable","unusedCount","missingTable","count","missingCount","undefinedOnly","keys","configTable","configuration","message","groupEnd"],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\n\nimport GL from '@luma.gl/constants';\nimport {isWebGL} from '@luma.gl/gltools';\nimport ProgramManager from './program-manager';\nimport {\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 {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 default class Model {\n constructor(gl, props = {}) {\n // Deduce a helpful id\n const {id = uid('model')} = props;\n assert(isWebGL(gl));\n this.id = id;\n this.gl = gl;\n this.id = props.id || uid('Model');\n this.lastLogTime = 0; // TODO - move to probe.gl\n this.animated = false;\n this.initialize(props);\n }\n\n initialize(props) {\n this.props = {};\n\n this.programManager = props.programManager || ProgramManager.getDefaultProgramManager(this.gl);\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 vs,\n fs,\n modules,\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 delete() {\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 // GETTERS\n\n getDrawMode() {\n return this.drawMode;\n }\n\n getVertexCount() {\n return this.vertexCount;\n }\n\n getInstanceCount() {\n return this.instanceCount;\n }\n\n getAttributes() {\n return this.attributes;\n }\n\n getProgram() {\n return this.program;\n }\n\n setProgram(props) {\n const {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n 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) {\n this.drawMode = drawMode;\n return this;\n }\n\n setVertexCount(vertexCount) {\n assert(Number.isFinite(vertexCount));\n this.vertexCount = vertexCount;\n return this;\n }\n\n setInstanceCount(instanceCount) {\n assert(Number.isFinite(instanceCount));\n this.instanceCount = instanceCount;\n return this;\n }\n\n setGeometry(geometry) {\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 = {}) {\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 = {}) {\n Object.assign(this.uniforms, uniforms);\n\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) {\n const uniforms = this.getModuleUniforms(opts || {});\n return this.setUniforms(uniforms);\n }\n\n // DRAW CALLS\n\n clear(opts) {\n clear(this.program.gl, opts);\n return this;\n }\n\n draw(opts = {}) {\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\n transform(opts = {}) {\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 = {}) {\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) {\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() {\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 {\n vs,\n fs,\n modules,\n inject,\n defines,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = this.programProps;\n program = this.programManager.get({\n vs,\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 // @ts-ignore TODO\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() {\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.delete();\n }\n }\n }\n\n // Updates (evaluates) all function valued uniforms based on a new set of animationProps\n // experimental\n _setAnimationProps(animationProps) {\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 = {}) {\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) {\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) {\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-ignore\n attributes: this._attributes\n });\n\n const {table: uniformTable, unusedTable, unusedCount} = 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, `>>> DRAWING MODEL ${this.id}`)();\n }\n}\n"],"file":"model.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/model.js"],"names":["isWebGL","ProgramManager","Program","VertexArray","clear","TransformFeedback","Buffer","log","isObjectEmpty","uid","assert","getDebugTableForUniforms","getDebugTableForVertexArray","getDebugTableForProgramConfiguration","getBuffersFromGeometry","LOG_DRAW_PRIORITY","LOG_DRAW_TIMEOUT","ERR_MODEL_PARAMS","NOOP","DRAW_PARAMS","Model","constructor","gl","props","id","lastLogTime","animated","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","vertexCount","geometryBuffers","isInstanced","instanced","instanceCount","_setModelProps","geometry","Number","isFinite","setProps","delete","key","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","forEach","model","unbindBuffers","bindBuffers","render","_feedbackBuffers","needsUpdate","stateHash","get","buffer","_setAnimationProps","animationProps","setBuffers","logLevel","logDrawTimeout","Date","now","group","collapsed","level","attributeTable","header","table","uniformTable","unusedTable","unusedCount","missingTable","count","missingCount","undefinedOnly","keys","configTable","configuration","message","groupEnd"],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\n\nimport GL from '@luma.gl/constants';\nimport {isWebGL} from '@luma.gl/gltools';\nimport ProgramManager from './program-manager';\nimport {\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 {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 default class Model {\n constructor(gl, props = {}) {\n // Deduce a helpful id\n const {id = uid('model')} = props;\n assert(isWebGL(gl));\n this.id = id;\n this.gl = gl;\n this.id = props.id || uid('Model');\n this.lastLogTime = 0; // TODO - move to probe.gl\n this.animated = false;\n this.initialize(props);\n }\n\n initialize(props) {\n this.props = {};\n\n this.programManager = props.programManager || ProgramManager.getDefaultProgramManager(this.gl);\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 vs,\n fs,\n modules,\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 delete() {\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 // GETTERS\n\n getDrawMode() {\n return this.drawMode;\n }\n\n getVertexCount() {\n return this.vertexCount;\n }\n\n getInstanceCount() {\n return this.instanceCount;\n }\n\n getAttributes() {\n return this.attributes;\n }\n\n getProgram() {\n return this.program;\n }\n\n setProgram(props) {\n const {\n program,\n vs,\n fs,\n modules,\n defines,\n inject,\n varyings,\n bufferMode,\n 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) {\n this.drawMode = drawMode;\n return this;\n }\n\n setVertexCount(vertexCount) {\n assert(Number.isFinite(vertexCount));\n this.vertexCount = vertexCount;\n return this;\n }\n\n setInstanceCount(instanceCount) {\n assert(Number.isFinite(instanceCount));\n this.instanceCount = instanceCount;\n return this;\n }\n\n setGeometry(geometry) {\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 = {}) {\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 = {}) {\n Object.assign(this.uniforms, uniforms);\n\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) {\n const uniforms = this.getModuleUniforms(opts || {});\n return this.setUniforms(uniforms);\n }\n\n // DRAW CALLS\n\n clear(opts) {\n clear(this.program.gl, opts);\n return this;\n }\n\n draw(opts = {}) {\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\n transform(opts = {}) {\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 = {}) {\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) {\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() {\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 {\n vs,\n fs,\n modules,\n inject,\n defines,\n varyings,\n bufferMode,\n transpileToGLSL100\n } = this.programProps;\n program = this.programManager.get({\n vs,\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 // @ts-ignore TODO\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() {\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.delete();\n }\n }\n }\n\n // Updates (evaluates) all function valued uniforms based on a new set of animationProps\n // experimental\n _setAnimationProps(animationProps) {\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 = {}) {\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) {\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) {\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-ignore\n attributes: this._attributes\n });\n\n const {table: uniformTable, unusedTable, unusedCount} = 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"}
|
|
@@ -46,7 +46,8 @@ export default class ProgramManager {
|
|
|
46
46
|
this.stateHash++;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
get(
|
|
49
|
+
get() {
|
|
50
|
+
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
50
51
|
const {
|
|
51
52
|
vs = '',
|
|
52
53
|
fs = '',
|
|
@@ -80,7 +81,7 @@ export default class ProgramManager {
|
|
|
80
81
|
injectHashes.push(this._getHash(inject[key]));
|
|
81
82
|
}
|
|
82
83
|
|
|
83
|
-
const hash =
|
|
84
|
+
const hash = "".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(bufferMode).concat(transpileToGLSL100 ? 'T' : '');
|
|
84
85
|
|
|
85
86
|
if (!this._programCache[hash]) {
|
|
86
87
|
const assembled = assembleShaders(this.gl, {
|
|
@@ -134,7 +135,8 @@ export default class ProgramManager {
|
|
|
134
135
|
return this._hashes[key];
|
|
135
136
|
}
|
|
136
137
|
|
|
137
|
-
_getModuleList(
|
|
138
|
+
_getModuleList() {
|
|
139
|
+
let appModules = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
138
140
|
const modules = new Array(this._defaultModules.length + appModules.length);
|
|
139
141
|
const seen = {};
|
|
140
142
|
let count = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/program-manager.js"],"names":["assembleShaders","Program","ProgramManager","getDefaultProgramManager","gl","luma","defaultProgramManager","constructor","_programCache","_getUniforms","_registeredModules","_hookFunctions","_defaultModules","_hashes","_hashCounter","stateHash","_useCounts","addDefaultModule","module","find","m","name","push","removeDefaultModule","moduleName","filter","addShaderHook","hook","opts","Object","assign","get","props","vs","fs","defines","inject","varyings","bufferMode","transpileToGLSL100","modules","_getModuleList","vsHash","_getHash","fsHash","moduleHashes","map","sort","varyingHashes","v","defineKeys","keys","injectKeys","defineHashes","injectHashes","key","hash","join","assembled","hookFunctions","getUniforms","x","program","release","delete","undefined","appModules","Array","length","seen","count","i","len"],"mappings":"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","sourcesContent":["import {assembleShaders} from '@luma.gl/shadertools';\nimport {Program} from '@luma.gl/webgl';\n\nexport default class ProgramManager {\n static getDefaultProgramManager(gl) {\n gl.luma = gl.luma || {};\n gl.luma.defaultProgramManager = gl.luma.defaultProgramManager || new ProgramManager(gl);\n\n return gl.luma.defaultProgramManager;\n }\n\n constructor(gl) {\n this.gl = gl;\n\n this._programCache = {};\n this._getUniforms = {};\n this._registeredModules = {}; // TODO: Remove? This isn't used anywhere in luma.gl\n this._hookFunctions = [];\n this._defaultModules = [];\n\n this._hashes = {};\n this._hashCounter = 0;\n this.stateHash = 0; // Used change hashing if hooks are modified\n this._useCounts = {};\n }\n\n addDefaultModule(module) {\n if (!this._defaultModules.find(m => m.name === module.name)) {\n this._defaultModules.push(module);\n }\n\n this.stateHash++;\n }\n\n removeDefaultModule(module) {\n const moduleName = typeof module === 'string' ? module : module.name;\n this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);\n this.stateHash++;\n }\n\n addShaderHook(hook, opts) {\n if (opts) {\n hook = Object.assign(opts, {hook});\n }\n\n this._hookFunctions.push(hook);\n\n this.stateHash++;\n }\n\n get(props = {}) {\n const {\n vs = '',\n fs = '',\n defines = {},\n inject = {},\n varyings = [],\n bufferMode = 0x8c8d,\n transpileToGLSL100 = false\n } = props; // varyings/bufferMode for xform feedback, 0x8c8d = SEPARATE_ATTRIBS\n\n const modules = this._getModuleList(props.modules); // Combine with default modules\n\n const vsHash = this._getHash(vs);\n const fsHash = this._getHash(fs);\n const moduleHashes = modules.map(m => this._getHash(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 = [];\n const injectHashes = [];\n\n for (const key of defineKeys) {\n defineHashes.push(this._getHash(key));\n defineHashes.push(this._getHash(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 const hash = `${vsHash}/${fsHash}D${defineHashes.join('/')}M${moduleHashes.join(\n '/'\n )}I${injectHashes.join('/')}V${varyingHashes.join('/')}H${this.stateHash}B${bufferMode}${\n transpileToGLSL100 ? 'T' : ''\n }`;\n\n if (!this._programCache[hash]) {\n const assembled = assembleShaders(this.gl, {\n vs,\n fs,\n modules,\n inject,\n defines,\n hookFunctions: this._hookFunctions,\n transpileToGLSL100\n });\n\n this._programCache[hash] = new Program(this.gl, {\n hash,\n vs: assembled.vs,\n fs: assembled.fs,\n varyings,\n bufferMode\n });\n\n this._getUniforms[hash] = assembled.getUniforms || (x => {});\n this._useCounts[hash] = 0;\n }\n\n this._useCounts[hash]++;\n\n return this._programCache[hash];\n }\n\n getUniforms(program) {\n return this._getUniforms[program.hash] || null;\n }\n\n release(program) {\n const hash = program.hash;\n this._useCounts[hash]--;\n\n if (this._useCounts[hash] === 0) {\n this._programCache[hash].delete();\n delete this._programCache[hash];\n delete this._getUniforms[hash];\n delete this._useCounts[hash];\n }\n }\n\n _getHash(key) {\n if (this._hashes[key] === undefined) {\n this._hashes[key] = this._hashCounter++;\n }\n\n return this._hashes[key];\n }\n\n // Dedup and combine with default modules\n _getModuleList(appModules = []) {\n const modules = new Array(this._defaultModules.length + appModules.length);\n const seen = {};\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":"program-manager.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/program-manager.js"],"names":["assembleShaders","Program","ProgramManager","getDefaultProgramManager","gl","luma","defaultProgramManager","constructor","_programCache","_getUniforms","_registeredModules","_hookFunctions","_defaultModules","_hashes","_hashCounter","stateHash","_useCounts","addDefaultModule","module","find","m","name","push","removeDefaultModule","moduleName","filter","addShaderHook","hook","opts","Object","assign","get","props","vs","fs","defines","inject","varyings","bufferMode","transpileToGLSL100","modules","_getModuleList","vsHash","_getHash","fsHash","moduleHashes","map","sort","varyingHashes","v","defineKeys","keys","injectKeys","defineHashes","injectHashes","key","hash","join","assembled","hookFunctions","getUniforms","x","program","release","delete","undefined","appModules","Array","length","seen","count","i","len"],"mappings":"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","sourcesContent":["import {assembleShaders} from '@luma.gl/shadertools';\nimport {Program} from '@luma.gl/webgl';\n\nexport default class ProgramManager {\n static getDefaultProgramManager(gl) {\n gl.luma = gl.luma || {};\n gl.luma.defaultProgramManager = gl.luma.defaultProgramManager || new ProgramManager(gl);\n\n return gl.luma.defaultProgramManager;\n }\n\n constructor(gl) {\n this.gl = gl;\n\n this._programCache = {};\n this._getUniforms = {};\n this._registeredModules = {}; // TODO: Remove? This isn't used anywhere in luma.gl\n this._hookFunctions = [];\n this._defaultModules = [];\n\n this._hashes = {};\n this._hashCounter = 0;\n this.stateHash = 0; // Used change hashing if hooks are modified\n this._useCounts = {};\n }\n\n addDefaultModule(module) {\n if (!this._defaultModules.find(m => m.name === module.name)) {\n this._defaultModules.push(module);\n }\n\n this.stateHash++;\n }\n\n removeDefaultModule(module) {\n const moduleName = typeof module === 'string' ? module : module.name;\n this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);\n this.stateHash++;\n }\n\n addShaderHook(hook, opts) {\n if (opts) {\n hook = Object.assign(opts, {hook});\n }\n\n this._hookFunctions.push(hook);\n\n this.stateHash++;\n }\n\n get(props = {}) {\n const {\n vs = '',\n fs = '',\n defines = {},\n inject = {},\n varyings = [],\n bufferMode = 0x8c8d,\n transpileToGLSL100 = false\n } = props; // varyings/bufferMode for xform feedback, 0x8c8d = SEPARATE_ATTRIBS\n\n const modules = this._getModuleList(props.modules); // Combine with default modules\n\n const vsHash = this._getHash(vs);\n const fsHash = this._getHash(fs);\n const moduleHashes = modules.map(m => this._getHash(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 = [];\n const injectHashes = [];\n\n for (const key of defineKeys) {\n defineHashes.push(this._getHash(key));\n defineHashes.push(this._getHash(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 const hash = `${vsHash}/${fsHash}D${defineHashes.join('/')}M${moduleHashes.join(\n '/'\n )}I${injectHashes.join('/')}V${varyingHashes.join('/')}H${this.stateHash}B${bufferMode}${\n transpileToGLSL100 ? 'T' : ''\n }`;\n\n if (!this._programCache[hash]) {\n const assembled = assembleShaders(this.gl, {\n vs,\n fs,\n modules,\n inject,\n defines,\n hookFunctions: this._hookFunctions,\n transpileToGLSL100\n });\n\n this._programCache[hash] = new Program(this.gl, {\n hash,\n vs: assembled.vs,\n fs: assembled.fs,\n varyings,\n bufferMode\n });\n\n this._getUniforms[hash] = assembled.getUniforms || (x => {});\n this._useCounts[hash] = 0;\n }\n\n this._useCounts[hash]++;\n\n return this._programCache[hash];\n }\n\n getUniforms(program) {\n return this._getUniforms[program.hash] || null;\n }\n\n release(program) {\n const hash = program.hash;\n this._useCounts[hash]--;\n\n if (this._useCounts[hash] === 0) {\n this._programCache[hash].delete();\n delete this._programCache[hash];\n delete this._getUniforms[hash];\n delete this._useCounts[hash];\n }\n }\n\n _getHash(key) {\n if (this._hashes[key] === undefined) {\n this._hashes[key] = this._hashCounter++;\n }\n\n return this._hashes[key];\n }\n\n // Dedup and combine with default modules\n _getModuleList(appModules = []) {\n const modules = new Array(this._defaultModules.length + appModules.length);\n const seen = {};\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":"program-manager.js"}
|