@luma.gl/engine 8.5.13 → 8.5.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/dist.js +5882 -5979
  2. package/dist/dist.min.js +1 -1
  3. package/dist/es5/animation/key-frames.js.map +1 -1
  4. package/dist/es5/animation/timeline.js +1 -1
  5. package/dist/es5/animation/timeline.js.map +1 -1
  6. package/dist/es5/bundle.js.map +1 -1
  7. package/dist/es5/geometries/cone-geometry.js +6 -4
  8. package/dist/es5/geometries/cone-geometry.js.map +1 -1
  9. package/dist/es5/geometries/cube-geometry.js +6 -4
  10. package/dist/es5/geometries/cube-geometry.js.map +1 -1
  11. package/dist/es5/geometries/cylinder-geometry.js +6 -4
  12. package/dist/es5/geometries/cylinder-geometry.js.map +1 -1
  13. package/dist/es5/geometries/ico-sphere-geometry.js +6 -4
  14. package/dist/es5/geometries/ico-sphere-geometry.js.map +1 -1
  15. package/dist/es5/geometries/index.js.map +1 -1
  16. package/dist/es5/geometries/plane-geometry.js +6 -4
  17. package/dist/es5/geometries/plane-geometry.js.map +1 -1
  18. package/dist/es5/geometries/sphere-geometry.js +6 -4
  19. package/dist/es5/geometries/sphere-geometry.js.map +1 -1
  20. package/dist/es5/geometries/truncated-cone-geometry.js +6 -4
  21. package/dist/es5/geometries/truncated-cone-geometry.js.map +1 -1
  22. package/dist/es5/geometry/geometry-utils.js.map +1 -1
  23. package/dist/es5/geometry/geometry.js +10 -12
  24. package/dist/es5/geometry/geometry.js.map +1 -1
  25. package/dist/es5/index.js +24 -24
  26. package/dist/es5/index.js.map +1 -1
  27. package/dist/es5/lib/animation-loop.d.ts +1 -1
  28. package/dist/es5/lib/animation-loop.js +2 -2
  29. package/dist/es5/lib/animation-loop.js.map +1 -1
  30. package/dist/es5/lib/model-utils.js +2 -2
  31. package/dist/es5/lib/model-utils.js.map +1 -1
  32. package/dist/es5/lib/model.js +1 -1
  33. package/dist/es5/lib/model.js.map +1 -1
  34. package/dist/es5/lib/program-manager.js +8 -10
  35. package/dist/es5/lib/program-manager.js.map +1 -1
  36. package/dist/es5/transform/buffer-transform.js +1 -1
  37. package/dist/es5/transform/buffer-transform.js.map +1 -1
  38. package/dist/es5/transform/texture-transform.js.map +1 -1
  39. package/dist/es5/transform/transform-shader-utils.js +1 -1
  40. package/dist/es5/transform/transform-shader-utils.js.map +1 -1
  41. package/dist/es5/transform/transform.js +6 -8
  42. package/dist/es5/transform/transform.js.map +1 -1
  43. package/dist/es5/utils/clip-space.js +4 -2
  44. package/dist/es5/utils/clip-space.js.map +1 -1
  45. package/dist/esm/animation/key-frames.js.map +1 -1
  46. package/dist/esm/animation/timeline.js.map +1 -1
  47. package/dist/esm/bundle.js.map +1 -1
  48. package/dist/esm/geometries/cone-geometry.js +2 -1
  49. package/dist/esm/geometries/cone-geometry.js.map +1 -1
  50. package/dist/esm/geometries/cube-geometry.js +2 -1
  51. package/dist/esm/geometries/cube-geometry.js.map +1 -1
  52. package/dist/esm/geometries/cylinder-geometry.js +2 -1
  53. package/dist/esm/geometries/cylinder-geometry.js.map +1 -1
  54. package/dist/esm/geometries/ico-sphere-geometry.js +3 -2
  55. package/dist/esm/geometries/ico-sphere-geometry.js.map +1 -1
  56. package/dist/esm/geometries/index.js.map +1 -1
  57. package/dist/esm/geometries/plane-geometry.js +6 -5
  58. package/dist/esm/geometries/plane-geometry.js.map +1 -1
  59. package/dist/esm/geometries/sphere-geometry.js +2 -1
  60. package/dist/esm/geometries/sphere-geometry.js.map +1 -1
  61. package/dist/esm/geometries/truncated-cone-geometry.js +2 -1
  62. package/dist/esm/geometries/truncated-cone-geometry.js.map +1 -1
  63. package/dist/esm/geometry/geometry-utils.js.map +1 -1
  64. package/dist/esm/geometry/geometry.js +4 -3
  65. package/dist/esm/geometry/geometry.js.map +1 -1
  66. package/dist/esm/index.js.map +1 -1
  67. package/dist/esm/lib/animation-loop.d.ts +1 -1
  68. package/dist/esm/lib/animation-loop.js +19 -15
  69. package/dist/esm/lib/animation-loop.js.map +1 -1
  70. package/dist/esm/lib/model-utils.js +1 -1
  71. package/dist/esm/lib/model-utils.js.map +1 -1
  72. package/dist/esm/lib/model.js +23 -13
  73. package/dist/esm/lib/model.js.map +1 -1
  74. package/dist/esm/lib/program-manager.js +5 -3
  75. package/dist/esm/lib/program-manager.js.map +1 -1
  76. package/dist/esm/transform/buffer-transform.js +20 -10
  77. package/dist/esm/transform/buffer-transform.js.map +1 -1
  78. package/dist/esm/transform/texture-transform.js +21 -11
  79. package/dist/esm/transform/texture-transform.js.map +1 -1
  80. package/dist/esm/transform/transform-shader-utils.js +23 -25
  81. package/dist/esm/transform/transform-shader-utils.js.map +1 -1
  82. package/dist/esm/transform/transform.js +13 -6
  83. package/dist/esm/transform/transform.js.map +1 -1
  84. package/dist/esm/utils/clip-space.js +1 -16
  85. package/dist/esm/utils/clip-space.js.map +1 -1
  86. package/package.json +8 -7
  87. package/src/lib/animation-loop.d.ts +1 -1
  88. package/src/lib/model.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.js"],"names":["default","AnimationLoop","Model","ProgramManager","Transform","Geometry","ConeGeometry","CubeGeometry","CylinderGeometry","IcoSphereGeometry","PlaneGeometry","SphereGeometry","TruncatedConeGeometry","Timeline","KeyFrames","ClipSpace"],"mappings":"AACA,SAAQA,OAAO,IAAIC,aAAnB,QAAuC,sBAAvC;AACA,SAAQD,OAAO,IAAIE,KAAnB,QAA+B,aAA/B;AACA,SAAQF,OAAO,IAAIG,cAAnB,QAAwC,uBAAxC;AACA,SAAQH,OAAO,IAAII,SAAnB,QAAmC,uBAAnC;AAGA,SAAQJ,OAAO,IAAIK,QAAnB,QAAkC,qBAAlC;AACA,SAAQL,OAAO,IAAIM,YAAnB,QAAsC,4BAAtC;AACA,SAAQN,OAAO,IAAIO,YAAnB,QAAsC,4BAAtC;AACA,SAAQP,OAAO,IAAIQ,gBAAnB,QAA0C,gCAA1C;AACA,SAAQR,OAAO,IAAIS,iBAAnB,QAA2C,kCAA3C;AACA,SAAQT,OAAO,IAAIU,aAAnB,QAAuC,6BAAvC;AACA,SAAQV,OAAO,IAAIW,cAAnB,QAAwC,8BAAxC;AACA,SAAQX,OAAO,IAAIY,qBAAnB,QAA+C,sCAA/C;AAGA,SAAQC,QAAR,QAAuB,sBAAvB;AACA,SAAQC,SAAR,QAAwB,wBAAxB;AAGA,SAAQd,OAAO,IAAIe,SAAnB,QAAmC,oBAAnC","sourcesContent":["// CORE\nexport {default as AnimationLoop} from './lib/animation-loop';\nexport {default as Model} from './lib/model';\nexport {default as ProgramManager} from './lib/program-manager';\nexport {default as Transform} from './transform/transform';\n\n// Geometries\nexport {default as Geometry} from './geometry/geometry';\nexport {default as ConeGeometry} from './geometries/cone-geometry';\nexport {default as CubeGeometry} from './geometries/cube-geometry';\nexport {default as CylinderGeometry} from './geometries/cylinder-geometry';\nexport {default as IcoSphereGeometry} from './geometries/ico-sphere-geometry';\nexport {default as PlaneGeometry} from './geometries/plane-geometry';\nexport {default as SphereGeometry} from './geometries/sphere-geometry';\nexport {default as TruncatedConeGeometry} from './geometries/truncated-cone-geometry';\n\n// Animation\nexport {Timeline} from './animation/timeline';\nexport {KeyFrames} from './animation/key-frames';\n\n// Utils\nexport {default as ClipSpace} from './utils/clip-space';\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["default","AnimationLoop","Model","ProgramManager","Transform","Geometry","ConeGeometry","CubeGeometry","CylinderGeometry","IcoSphereGeometry","PlaneGeometry","SphereGeometry","TruncatedConeGeometry","Timeline","KeyFrames","ClipSpace"],"sources":["../../src/index.js"],"sourcesContent":["// CORE\nexport {default as AnimationLoop} from './lib/animation-loop';\nexport {default as Model} from './lib/model';\nexport {default as ProgramManager} from './lib/program-manager';\nexport {default as Transform} from './transform/transform';\n\n// Geometries\nexport {default as Geometry} from './geometry/geometry';\nexport {default as ConeGeometry} from './geometries/cone-geometry';\nexport {default as CubeGeometry} from './geometries/cube-geometry';\nexport {default as CylinderGeometry} from './geometries/cylinder-geometry';\nexport {default as IcoSphereGeometry} from './geometries/ico-sphere-geometry';\nexport {default as PlaneGeometry} from './geometries/plane-geometry';\nexport {default as SphereGeometry} from './geometries/sphere-geometry';\nexport {default as TruncatedConeGeometry} from './geometries/truncated-cone-geometry';\n\n// Animation\nexport {Timeline} from './animation/timeline';\nexport {KeyFrames} from './animation/key-frames';\n\n// Utils\nexport {default as ClipSpace} from './utils/clip-space';\n"],"mappings":"AACA,SAAQA,OAAO,IAAIC,aAAnB,QAAuC,sBAAvC;AACA,SAAQD,OAAO,IAAIE,KAAnB,QAA+B,aAA/B;AACA,SAAQF,OAAO,IAAIG,cAAnB,QAAwC,uBAAxC;AACA,SAAQH,OAAO,IAAII,SAAnB,QAAmC,uBAAnC;AAGA,SAAQJ,OAAO,IAAIK,QAAnB,QAAkC,qBAAlC;AACA,SAAQL,OAAO,IAAIM,YAAnB,QAAsC,4BAAtC;AACA,SAAQN,OAAO,IAAIO,YAAnB,QAAsC,4BAAtC;AACA,SAAQP,OAAO,IAAIQ,gBAAnB,QAA0C,gCAA1C;AACA,SAAQR,OAAO,IAAIS,iBAAnB,QAA2C,kCAA3C;AACA,SAAQT,OAAO,IAAIU,aAAnB,QAAuC,6BAAvC;AACA,SAAQV,OAAO,IAAIW,cAAnB,QAAwC,8BAAxC;AACA,SAAQX,OAAO,IAAIY,qBAAnB,QAA+C,sCAA/C;AAGA,SAAQC,QAAR,QAAuB,sBAAvB;AACA,SAAQC,SAAR,QAAwB,wBAAxB;AAGA,SAAQd,OAAO,IAAIe,SAAnB,QAAmC,oBAAnC"}
@@ -1,6 +1,6 @@
1
1
  // TODO - remove dependency on framebuffer (bundle size impact)
2
2
  import {Query, Framebuffer} from '@luma.gl/webgl';
3
- import { Stats } from 'probe.gl'
3
+ import { Stats } from '@probe.gl/stats'
4
4
  import { Timeline } from '../animation/timeline'
5
5
 
6
6
  import {CreateGLContextOptions} from '@luma.gl/gltools'
@@ -4,7 +4,8 @@ import { isBrowser } from '@probe.gl/env';
4
4
  const isPage = isBrowser() && typeof document !== 'undefined';
5
5
  let statIdCounter = 0;
6
6
  export default class AnimationLoop {
7
- constructor(props = {}) {
7
+ constructor() {
8
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
8
9
  const {
9
10
  onCreateContext = opts => createGLContext(opts),
10
11
  onAddHTML = null,
@@ -18,7 +19,7 @@ export default class AnimationLoop {
18
19
  createFramebuffer = false,
19
20
  autoResizeViewport = true,
20
21
  autoResizeDrawingBuffer = true,
21
- stats = lumaStats.get(`animation-loop-${statIdCounter++}`)
22
+ stats = lumaStats.get("animation-loop-".concat(statIdCounter++))
22
23
  } = props;
23
24
  let {
24
25
  useDevicePixels = true
@@ -94,7 +95,9 @@ export default class AnimationLoop {
94
95
  return this;
95
96
  }
96
97
 
97
- start(opts = {}) {
98
+ start() {
99
+ let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
100
+
98
101
  if (this._running) {
99
102
  return this;
100
103
  }
@@ -217,23 +220,24 @@ export default class AnimationLoop {
217
220
  return this.gl.isContextLost();
218
221
  }
219
222
 
220
- onCreateContext(...args) {
221
- return this.props.onCreateContext(...args);
223
+ onCreateContext() {
224
+ return this.props.onCreateContext(...arguments);
222
225
  }
223
226
 
224
- onInitialize(...args) {
225
- return this.props.onInitialize(...args);
227
+ onInitialize() {
228
+ return this.props.onInitialize(...arguments);
226
229
  }
227
230
 
228
- onRender(...args) {
229
- return this.props.onRender(...args);
231
+ onRender() {
232
+ return this.props.onRender(...arguments);
230
233
  }
231
234
 
232
- onFinalize(...args) {
233
- return this.props.onFinalize(...args);
235
+ onFinalize() {
236
+ return this.props.onFinalize(...arguments);
234
237
  }
235
238
 
236
- getHTMLControlValue(id, defaultValue = 1) {
239
+ getHTMLControlValue(id) {
240
+ let defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
237
241
  const element = document.getElementById(id);
238
242
  return element ? Number(element.value) : defaultValue;
239
243
  }
@@ -308,14 +312,14 @@ export default class AnimationLoop {
308
312
  return undefined;
309
313
  }
310
314
 
311
- _renderFrame(...args) {
315
+ _renderFrame() {
312
316
  if (this.display) {
313
- this.display._renderFrame(...args);
317
+ this.display._renderFrame(...arguments);
314
318
 
315
319
  return;
316
320
  }
317
321
 
318
- this.onRender(...args);
322
+ this.onRender(...arguments);
319
323
  }
320
324
 
321
325
  _clearNeedsRedraw() {
@@ -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,"file":"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"],"sources":["../../../src/lib/animation-loop.js"],"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"],"mappings":"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"}
@@ -85,6 +85,6 @@ export function inferAttributeAccessor(attributeName, attribute) {
85
85
  default:
86
86
  }
87
87
 
88
- assert(Number.isFinite(attribute.size), `attribute ${attributeName} needs 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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","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"}
1
+ {"version":3,"file":"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"],"sources":["../../../src/lib/model-utils.js"],"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"],"mappings":"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"}
@@ -11,7 +11,8 @@ const NOOP = () => {};
11
11
 
12
12
  const DRAW_PARAMS = {};
13
13
  export default class Model {
14
- constructor(gl, props = {}) {
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(attributes = {}) {
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(uniforms = {}) {
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(opts = {}) {
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(opts = {}) {
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(uniforms = {}) {
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(feedbackBuffers = {}) {
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, `>>> DRAWING MODEL ${this.id}`, {
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: `${this.id} attributes`,
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: `${this.id} uniforms`,
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: `${this.id} uniforms`,
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: `Rendered to ${framebuffer.id}`
519
+ message: "Rendered to ".concat(framebuffer.id)
510
520
  });
511
521
  }
512
522
 
513
- log.groupEnd(LOG_DRAW_PRIORITY, `>>> DRAWING MODEL ${this.id}`)();
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,"file":"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"],"sources":["../../../src/lib/model.js"],"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"],"mappings":"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"}
@@ -46,7 +46,8 @@ export default class ProgramManager {
46
46
  this.stateHash++;
47
47
  }
48
48
 
49
- get(props = {}) {
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 = `${vsHash}/${fsHash}D${defineHashes.join('/')}M${moduleHashes.join('/')}I${injectHashes.join('/')}V${varyingHashes.join('/')}H${this.stateHash}B${bufferMode}${transpileToGLSL100 ? 'T' : ''}`;
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(appModules = []) {
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;