@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.
- package/dist/dist.js +5882 -5979
- 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/bundle.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/index.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/index.js.map +1 -1
- 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/animation/key-frames.js.map +1 -1
- package/dist/esm/animation/timeline.js.map +1 -1
- package/dist/esm/bundle.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/index.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-utils.js.map +1 -1
- package/dist/esm/geometry/geometry.js +4 -3
- package/dist/esm/geometry/geometry.js.map +1 -1
- package/dist/esm/index.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 -7
- package/src/lib/animation-loop.d.ts +1 -1
- package/src/lib/model.js +1 -1
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
221
|
-
return this.props.onCreateContext(...
|
|
223
|
+
onCreateContext() {
|
|
224
|
+
return this.props.onCreateContext(...arguments);
|
|
222
225
|
}
|
|
223
226
|
|
|
224
|
-
onInitialize(
|
|
225
|
-
return this.props.onInitialize(...
|
|
227
|
+
onInitialize() {
|
|
228
|
+
return this.props.onInitialize(...arguments);
|
|
226
229
|
}
|
|
227
230
|
|
|
228
|
-
onRender(
|
|
229
|
-
return this.props.onRender(...
|
|
231
|
+
onRender() {
|
|
232
|
+
return this.props.onRender(...arguments);
|
|
230
233
|
}
|
|
231
234
|
|
|
232
|
-
onFinalize(
|
|
233
|
-
return this.props.onFinalize(...
|
|
235
|
+
onFinalize() {
|
|
236
|
+
return this.props.onFinalize(...arguments);
|
|
234
237
|
}
|
|
235
238
|
|
|
236
|
-
getHTMLControlValue(id
|
|
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(
|
|
315
|
+
_renderFrame() {
|
|
312
316
|
if (this.display) {
|
|
313
|
-
this.display._renderFrame(...
|
|
317
|
+
this.display._renderFrame(...arguments);
|
|
314
318
|
|
|
315
319
|
return;
|
|
316
320
|
}
|
|
317
321
|
|
|
318
|
-
this.onRender(...
|
|
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":"AAAA,SACEA,OADF,EAEEC,eAFF,EAGEC,mBAHF,EAIEC,eAJF,EAKEC,eALF,QAMO,kBANP;AAQA,SACEC,qBADF,EAEEC,oBAFF,EAGEC,KAHF,EAIEC,SAJF,EAMEC,WANF,EAOEC,GAPF,EAQEC,MARF,QASO,gBATP;AAWA,SAAQC,SAAR,QAAwB,eAAxB;AAEA,MAAMC,MAAM,GAAGD,SAAS,MAAM,OAAOE,QAAP,KAAoB,WAAlD;AAEA,IAAIC,aAAa,GAAG,CAApB;AAEA,eAAe,MAAMC,aAAN,CAAoB;EAIjCC,WAAW,GAAa;IAAA,IAAZC,KAAY,uEAAJ,EAAI;IACtB,MAAM;MACJC,eAAe,GAAGC,IAAI,IAAInB,eAAe,CAACmB,IAAD,CADrC;MAEJC,SAAS,GAAG,IAFR;MAGJC,YAAY,GAAG,MAAM,CAAE,CAHnB;MAIJC,QAAQ,GAAG,MAAM,CAAE,CAJf;MAKJC,UAAU,GAAG,MAAM,CAAE,CALjB;MAMJC,OANI;MAQJC,EAAE,GAAG,IARD;MASJC,SAAS,GAAG,EATR;MAUJC,KAAK,GAAG,KAVJ;MAYJC,iBAAiB,GAAG,KAZhB;MAeJC,kBAAkB,GAAG,IAfjB;MAgBJC,uBAAuB,GAAG,IAhBtB;MAiBJC,KAAK,GAAGxB,SAAS,CAACyB,GAAV,0BAAgClB,aAAa,EAA7C;IAjBJ,IAkBFG,KAlBJ;IAoBA,IAAI;MAACgB,eAAe,GAAG;IAAnB,IAA2BhB,KAA/B;;IAEA,IAAI,yBAAyBA,KAA7B,EAAoC;MAClCR,GAAG,CAACyB,UAAJ,CAAe,qBAAf,EAAsC,iBAAtC;MAEAD,eAAe,GAAGhB,KAAK,CAACkB,mBAAxB;IACD;;IAED,KAAKlB,KAAL,GAAa;MACXC,eADW;MAEXE,SAFW;MAGXC,YAHW;MAIXC,QAJW;MAKXC,UALW;MAMXC,OANW;MAQXC,EARW;MASXC,SATW;MAUXC,KAVW;MAWXC;IAXW,CAAb;IAeA,KAAKH,EAAL,GAAUA,EAAV;IACA,KAAKW,WAAL,GAAmB,IAAnB;IACA,KAAKC,QAAL,GAAgB,IAAhB;IACA,KAAKN,KAAL,GAAaA,KAAb;IACA,KAAKO,OAAL,GAAe,KAAKP,KAAL,CAAWC,GAAX,CAAe,UAAf,CAAf;IACA,KAAKO,OAAL,GAAe,KAAKR,KAAL,CAAWC,GAAX,CAAe,UAAf,CAAf;IACA,KAAKQ,SAAL,GAAiB,KAAKT,KAAL,CAAWC,GAAX,CAAe,YAAf,CAAjB;IAEA,KAAKS,YAAL,GAAoB,KAApB;IACA,KAAKC,QAAL,GAAgB,KAAhB;IACA,KAAKC,iBAAL,GAAyB,IAAzB;IACA,KAAKC,iBAAL,GAAyB,IAAzB;IACA,KAAKC,iBAAL,GAAyB,IAAzB;IACA,KAAKC,aAAL,GAAqB,CAArB;IAEA,KAAKC,QAAL,CAAc;MACZlB,kBADY;MAEZC,uBAFY;MAGZG;IAHY,CAAd;IAOA,KAAKe,KAAL,GAAa,KAAKA,KAAL,CAAWC,IAAX,CAAgB,IAAhB,CAAb;IACA,KAAKC,IAAL,GAAY,KAAKA,IAAL,CAAUD,IAAV,CAAe,IAAf,CAAZ;IAEA,KAAKE,gBAAL,GAAwB,IAAxB;IAEA,KAAKC,YAAL,GAAoB,KAAKA,YAAL,CAAkBH,IAAlB,CAAuB,IAAvB,CAApB;IACA,KAAKI,aAAL,GAAqB,KAAKA,aAAL,CAAmBJ,IAAnB,CAAwB,IAAxB,CAArB;EACD;;EAEDK,MAAM,GAAG;IACP,KAAKJ,IAAL;;IACA,KAAKK,WAAL,CAAiB,IAAjB;EACD;;EAEDC,cAAc,CAACC,MAAD,EAAS;IACrB/C,MAAM,CAAC,OAAO+C,MAAP,KAAkB,QAAnB,CAAN;IACA,KAAKrB,WAAL,GAAmB,KAAKA,WAAL,IAAoBqB,MAAvC;IACA,OAAO,IAAP;EACD;;EAEDV,QAAQ,CAAC9B,KAAD,EAAQ;IACd,IAAI,wBAAwBA,KAA5B,EAAmC;MACjC,KAAKY,kBAAL,GAA0BZ,KAAK,CAACY,kBAAhC;IACD;;IACD,IAAI,6BAA6BZ,KAAjC,EAAwC;MACtC,KAAKa,uBAAL,GAA+Bb,KAAK,CAACa,uBAArC;IACD;;IACD,IAAI,qBAAqBb,KAAzB,EAAgC;MAC9B,KAAKgB,eAAL,GAAuBhB,KAAK,CAACgB,eAA7B;IACD;;IACD,OAAO,IAAP;EACD;;EAIDe,KAAK,GAAY;IAAA,IAAX7B,IAAW,uEAAJ,EAAI;;IACf,IAAI,KAAKuB,QAAT,EAAmB;MACjB,OAAO,IAAP;IACD;;IACD,KAAKA,QAAL,GAAgB,IAAhB;;IAGA,MAAMgB,YAAY,GAAG,KAAKC,mBAAL,GAClBC,IADkB,CACb,MAAM;MACV,IAAI,CAAC,KAAKlB,QAAN,IAAkB,KAAKD,YAA3B,EAAyC;QACvC,OAAO,IAAP;MACD;;MAGD,KAAKoB,mBAAL,CAAyB1C,IAAzB;;MACA,KAAK2C,kBAAL;;MACA,KAAKC,mBAAL;;MAGA,KAAKC,uBAAL;;MACA,KAAKC,mBAAL;;MAGA,KAAKC,0BAAL;;MACA,KAAKC,eAAL;;MAEA,KAAKC,aAAL,GAAqB9D,KAAK,CAAC+D,WAAN,CAAkB,KAAK5C,EAAvB,EAA2B,CAAC,QAAD,CAA3B,IAAyC,IAAInB,KAAJ,CAAU,KAAKmB,EAAf,CAAzC,GAA8D,IAAnF;MAEA,KAAKgB,YAAL,GAAoB,IAApB;MAGA,OAAO,KAAKpB,YAAL,CAAkB,KAAKiD,cAAvB,CAAP;IACD,CAzBkB,EA0BlBV,IA1BkB,CA0BbW,UAAU,IAAI;MAClB,IAAI,KAAK7B,QAAT,EAAmB;QACjB,KAAK8B,gBAAL,CAAsBD,UAAU,IAAI,EAApC;;QACA,IAAIA,UAAU,KAAK,KAAnB,EAA0B;UACxB,KAAKE,UAAL;QACD;MACF;IACF,CAjCkB,CAArB;;IAmCA,IAAI,KAAKxD,KAAL,CAAWO,OAAf,EAAwB;MACtBkC,YAAY,CAACgB,KAAb,CAAmB,KAAKzD,KAAL,CAAWO,OAA9B;IACD;;IAED,OAAO,IAAP;EACD;;EAGDmD,MAAM,GAAG;IACP,IAAI,KAAKC,aAAL,EAAJ,EAA0B;MACxB,OAAO,IAAP;IACD;;IAED,KAAKC,YAAL;;IAEA,KAAKC,WAAL;;IACA,KAAKb,mBAAL;;IAEA,KAAKc,YAAL,CAAkB,KAAKT,cAAvB;;IAGA,KAAKU,iBAAL;;IAIA,IAAI,KAAKC,SAAL,IAAkB,KAAKxD,EAAL,CAAQyD,MAA9B,EAAsC;MACpC,KAAKzD,EAAL,CAAQyD,MAAR;IACD;;IAED,IAAI,KAAKrC,iBAAT,EAA4B;MAC1B,KAAKA,iBAAL,CAAuB,IAAvB;;MACA,KAAKD,iBAAL,GAAyB,IAAzB;MACA,KAAKC,iBAAL,GAAyB,IAAzB;IACD;;IAED,KAAKsC,UAAL;;IAEA,OAAO,IAAP;EACD;;EAGDjC,IAAI,GAAG;IAEL,IAAI,KAAKR,QAAT,EAAmB;MACjB,KAAK0C,qBAAL;;MACA,KAAKC,qBAAL,CAA2B,KAAK1C,iBAAhC;;MACA,KAAKC,iBAAL,GAAyB,IAAzB;MACA,KAAKC,iBAAL,GAAyB,IAAzB;MACA,KAAKF,iBAAL,GAAyB,IAAzB;MACA,KAAKD,QAAL,GAAgB,KAAhB;IACD;;IACD,OAAO,IAAP;EACD;;EAED4C,cAAc,CAACjD,QAAD,EAAW;IACvB,KAAKA,QAAL,GAAgBA,QAAhB;IAEA,OAAO,KAAKA,QAAZ;EACD;;EAEDkD,cAAc,GAAG;IACf,KAAKlD,QAAL,GAAgB,IAAhB;EACD;;EAEDmD,aAAa,GAAG;IACd,KAAKhC,cAAL,CAAoB,eAApB;;IAEA,IAAI,CAAC,KAAKZ,iBAAV,EAA6B;MAC3B,KAAKA,iBAAL,GAAyB,IAAI6C,OAAJ,CAAYC,OAAO,IAAI;QAC9C,KAAK7C,iBAAL,GAAyB6C,OAAzB;MACD,CAFwB,CAAzB;IAGD;;IACD,OAAO,KAAK9C,iBAAZ;EACD;;EAEc,MAAT+C,SAAS,GAAG;IAChB,KAAKnC,cAAL,CAAoB,WAApB;IAEA,MAAM,KAAKgC,aAAL,EAAN;IAEA,OAAO,KAAK/D,EAAL,CAAQmE,MAAR,CAAeD,SAAf,EAAP;EACD;;EAEDf,aAAa,GAAG;IACd,OAAO,KAAKnD,EAAL,CAAQmD,aAAR,EAAP;EACD;;EAED1D,eAAe,GAAU;IACvB,OAAO,KAAKD,KAAL,CAAWC,eAAX,CAA2B,YAA3B,CAAP;EACD;;EAEDG,YAAY,GAAU;IACpB,OAAO,KAAKJ,KAAL,CAAWI,YAAX,CAAwB,YAAxB,CAAP;EACD;;EAEDC,QAAQ,GAAU;IAChB,OAAO,KAAKL,KAAL,CAAWK,QAAX,CAAoB,YAApB,CAAP;EACD;;EAEDC,UAAU,GAAU;IAClB,OAAO,KAAKN,KAAL,CAAWM,UAAX,CAAsB,YAAtB,CAAP;EACD;;EAIDsE,mBAAmB,CAACC,EAAD,EAAuB;IAAA,IAAlBC,YAAkB,uEAAH,CAAG;IACxC,MAAMC,OAAO,GAAGnF,QAAQ,CAACoF,cAAT,CAAwBH,EAAxB,CAAhB;IAEA,OAAOE,OAAO,GAAGE,MAAM,CAACF,OAAO,CAACG,KAAT,CAAT,GAA2BJ,YAAzC;EACD;;EAGDK,iBAAiB,GAAG;IAClB3F,GAAG,CAAC4F,OAAJ,CAAY,iCAAZ,EAA+C,wBAA/C;IACA,OAAO,IAAP;EACD;;EAID5B,UAAU,GAAG;IACX,MAAM6B,WAAW,GAAG,MAAM;MACxB,IAAI,CAAC,KAAK5D,QAAV,EAAoB;QAClB;MACD;;MACD,KAAKiC,MAAL;MACA,KAAKhC,iBAAL,GAAyB,KAAK4D,sBAAL,CAA4BD,WAA5B,CAAzB;IACD,CAND;;IASA,KAAKjB,qBAAL,CAA2B,KAAK1C,iBAAhC;;IACA,KAAKA,iBAAL,GAAyB,KAAK4D,sBAAL,CAA4BD,WAA5B,CAAzB;EACD;;EAID3C,mBAAmB,GAAG;IACpB,IAAI,CAAC,KAAKR,gBAAV,EAA4B;MAC1B,KAAKA,gBAAL,GAAwBvC,MAAM,GAC1B,IAAI6E,OAAJ,CAAY,CAACC,OAAD,EAAUc,MAAV,KAAqB;QAC/B,IAAI5F,MAAM,IAAIC,QAAQ,CAAC4F,UAAT,KAAwB,UAAtC,EAAkD;UAChDf,OAAO,CAAC7E,QAAD,CAAP;UACA;QACD;;QACD6F,MAAM,CAACC,gBAAP,CAAwB,MAAxB,EAAgC,MAAM;UACpCjB,OAAO,CAAC7E,QAAD,CAAP;QACD,CAFD;MAGD,CARD,CAD0B,GAU1B4E,OAAO,CAACC,OAAR,CAAgB,EAAhB,CAVJ;IAWD;;IACD,OAAO,KAAKvC,gBAAZ;EACD;;EAEDI,WAAW,CAACqD,OAAD,EAAU;IACnB,IAAI,KAAKA,OAAT,EAAkB;MAChB,KAAKA,OAAL,CAAatD,MAAb;MACA,KAAKsD,OAAL,CAAaC,aAAb,GAA6B,IAA7B;IACD;;IAGD,IAAID,OAAJ,EAAa;MACXA,OAAO,CAACC,aAAR,GAAwB,IAAxB;IACD;;IAED,KAAKD,OAAL,GAAeA,OAAf;EACD;;EAEDvB,qBAAqB,CAACyB,gBAAD,EAAmB;IAEtC,IAAI,KAAKF,OAAL,IAAgB,KAAKA,OAAL,CAAavG,oBAAjC,EAAuD;MACrD,OAAO,KAAKuG,OAAL,CAAavG,oBAAb,CAAkCyG,gBAAlC,CAAP;IACD;;IAED,OAAOzG,oBAAoB,CAACyG,gBAAD,CAA3B;EACD;;EAEDP,sBAAsB,CAACQ,mBAAD,EAAsB;IAC1C,IAAI,KAAKrE,QAAT,EAAmB;MAEjB,IAAI,KAAKkE,OAAL,IAAgB,KAAKA,OAAL,CAAaxG,qBAAjC,EAAwD;QACtD,OAAO,KAAKwG,OAAL,CAAaxG,qBAAb,CAAmC2G,mBAAnC,CAAP;MACD;;MAED,OAAO3G,qBAAqB,CAAC2G,mBAAD,CAA5B;IACD;;IACD,OAAOC,SAAP;EACD;;EAIDjC,YAAY,GAAU;IAEpB,IAAI,KAAK6B,OAAT,EAAkB;MAChB,KAAKA,OAAL,CAAa7B,YAAb,CAA0B,YAA1B;;MACA;IACD;;IAGD,KAAKzD,QAAL,CAAc,YAAd;EAED;;EAED0D,iBAAiB,GAAG;IAClB,KAAK5C,WAAL,GAAmB,IAAnB;EACD;;EAED0C,WAAW,GAAG;IACZ,KAAKZ,0BAAL;;IACA,KAAKC,eAAL;;IACA,KAAK8C,kBAAL;EACD;;EAGDjD,uBAAuB,GAAG;IACxB,KAAKM,cAAL,GAAsB;MACpB7C,EAAE,EAAE,KAAKA,EADW;MAGpByB,IAAI,EAAE,KAAKA,IAHS;MAIpB0C,MAAM,EAAE,KAAKnE,EAAL,CAAQmE,MAJI;MAKpBsB,WAAW,EAAE,KAAKA,WALE;MAQpBjF,eAAe,EAAE,KAAKA,eARF;MASpBG,WAAW,EAAE,IATO;MAYpB+E,SAAS,EAAEC,IAAI,CAACC,GAAL,EAZS;MAapBC,UAAU,EAAE,CAbQ;MAcpBC,IAAI,EAAE,CAdc;MAepBC,IAAI,EAAE,CAfc;MAkBpBC,IAAI,EAAE,CAlBc;MAqBpBC,SAAS,EAAE,KAAKrF,QArBI;MAsBpBsF,KAAK,EAAE,IAtBa;MAuBpBC,cAAc,EAAE,IAvBI;MAwBpBC,cAAc,EAAE;IAxBI,CAAtB;EA0BD;;EAGD5D,mBAAmB,GAAG;IACpB,MAAM;MAAC6D,KAAD;MAAQC,MAAR;MAAgBC;IAAhB,IAA0B,KAAKC,iBAAL,EAAhC;;IACA,IAAIH,KAAK,KAAK,KAAKxD,cAAL,CAAoBwD,KAA9B,IAAuCC,MAAM,KAAK,KAAKzD,cAAL,CAAoByD,MAA1E,EAAkF;MAChF,KAAKvE,cAAL,CAAoB,wBAApB;IACD;;IACD,IAAIwE,MAAM,KAAK,KAAK1D,cAAL,CAAoB0D,MAAnC,EAA2C;MACzC,KAAKxE,cAAL,CAAoB,+BAApB;IACD;;IAED,KAAKc,cAAL,CAAoBwD,KAApB,GAA4BA,KAA5B;IACA,KAAKxD,cAAL,CAAoByD,MAApB,GAA6BA,MAA7B;IACA,KAAKzD,cAAL,CAAoB0D,MAApB,GAA6BA,MAA7B;IAEA,KAAK1D,cAAL,CAAoBlC,WAApB,GAAkC,KAAKA,WAAvC;IAGA,KAAKkC,cAAL,CAAoBgD,UAApB,GAAiCF,IAAI,CAACC,GAAL,KAAa,KAAK/C,cAAL,CAAoB6C,SAAlE;;IAEA,IAAI,KAAK9E,QAAT,EAAmB;MACjB,KAAKA,QAAL,CAAc6F,MAAd,CAAqB,KAAK5D,cAAL,CAAoBgD,UAAzC;IACD;;IAED,KAAKhD,cAAL,CAAoBiD,IAApB,GAA2BY,IAAI,CAACC,KAAL,CAAY,KAAK9D,cAAL,CAAoBmD,IAApB,GAA2B,IAA5B,GAAoC,EAA/C,CAA3B;IACA,KAAKnD,cAAL,CAAoBkD,IAApB;IAGA,KAAKlD,cAAL,CAAoBmD,IAApB,GAA2B,KAAKpF,QAAL,GACvB,KAAKA,QAAL,CAAcgG,OAAd,EADuB,GAEvB,KAAK/D,cAAL,CAAoBgD,UAFxB;IAKA,KAAKhD,cAAL,CAAoBgE,UAApB,GAAiC,KAAKrD,SAAtC;EACD;;EAEDG,qBAAqB,GAAG;IAEtB,KAAK7D,UAAL,CAAgB,KAAK+C,cAArB;EAED;;EAGDE,gBAAgB,CAACD,UAAD,EAAa;IAC3B,IAAI,OAAOA,UAAP,KAAsB,QAAtB,IAAkCA,UAAU,KAAK,IAArD,EAA2D;MACzD,KAAKD,cAAL,GAAsBiE,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB,KAAKlE,cAAvB,EAAuCC,UAAvC,CAAtB;IACD;EACF;;EAGDV,mBAAmB,CAAC1C,IAAD,EAAO;IACxB,KAAK8D,SAAL,GACE9D,IAAI,CAACyE,MAAL,IACA,OAAO6C,eAAP,KAA2B,WAD3B,IAEAtH,IAAI,CAACyE,MAAL,YAAuB6C,eAHzB;IAMAtH,IAAI,GAAGoH,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBrH,IAAlB,EAAwB,KAAKF,KAAL,CAAWS,SAAnC,CAAP;IACA,KAAKD,EAAL,GAAU,KAAKR,KAAL,CAAWQ,EAAX,GAAgBxB,mBAAmB,CAAC,KAAKgB,KAAL,CAAWQ,EAAZ,EAAgBN,IAAhB,CAAnC,GAA2D,KAAKD,eAAL,CAAqBC,IAArB,CAArE;;IAEA,IAAI,CAACpB,OAAO,CAAC,KAAK0B,EAAN,CAAZ,EAAuB;MACrB,MAAM,IAAIiH,KAAJ,CAAU,0DAAV,CAAN;IACD;;IAGDvI,eAAe,CAAC,KAAKsB,EAAN,CAAf;;IAEA,KAAKkH,cAAL;EACD;;EAEDA,cAAc,GAAG;IACf,IAAI,KAAKlH,EAAL,CAAQmE,MAAR,IAAkB,KAAK3E,KAAL,CAAWG,SAAjC,EAA4C;MAC1C,MAAMwH,UAAU,GAAG/H,QAAQ,CAACgI,aAAT,CAAuB,KAAvB,CAAnB;MACAhI,QAAQ,CAACiI,IAAT,CAAcC,WAAd,CAA0BH,UAA1B;MACAA,UAAU,CAACI,KAAX,CAAiBC,QAAjB,GAA4B,UAA5B;MACA,MAAMC,GAAG,GAAGrI,QAAQ,CAACgI,aAAT,CAAuB,KAAvB,CAAZ;MACAK,GAAG,CAACF,KAAJ,CAAUC,QAAV,GAAqB,UAArB;MACAC,GAAG,CAACF,KAAJ,CAAUG,IAAV,GAAiB,MAAjB;MACAD,GAAG,CAACF,KAAJ,CAAUI,MAAV,GAAmB,MAAnB;MACAF,GAAG,CAACF,KAAJ,CAAUlB,KAAV,GAAkB,OAAlB;MACAoB,GAAG,CAACF,KAAJ,CAAUK,UAAV,GAAuB,OAAvB;MACAT,UAAU,CAACG,WAAX,CAAuB,KAAKtH,EAAL,CAAQmE,MAA/B;MACAgD,UAAU,CAACG,WAAX,CAAuBG,GAAvB;MACA,MAAMI,IAAI,GAAG,KAAKrI,KAAL,CAAWG,SAAX,CAAqB8H,GAArB,CAAb;;MACA,IAAII,IAAJ,EAAU;QACRJ,GAAG,CAACK,SAAJ,GAAgBD,IAAhB;MACD;IACF;EACF;;EAEDrB,iBAAiB,GAAG;IAElB,MAAMH,KAAK,GAAG,KAAKrG,EAAL,CAAQ+H,kBAAtB;IACA,MAAMzB,MAAM,GAAG,KAAKtG,EAAL,CAAQgI,mBAAvB;IAGA,IAAIzB,MAAM,GAAG,CAAb;IACA,MAAM;MAACpC;IAAD,IAAW,KAAKnE,EAAtB;;IAEA,IAAImE,MAAM,IAAIA,MAAM,CAAC8D,YAArB,EAAmC;MACjC1B,MAAM,GAAGpC,MAAM,CAAC+D,WAAP,GAAqB/D,MAAM,CAAC8D,YAArC;IACD,CAFD,MAEO,IAAI5B,KAAK,GAAG,CAAR,IAAaC,MAAM,GAAG,CAA1B,EAA6B;MAClCC,MAAM,GAAGF,KAAK,GAAGC,MAAjB;IACD;;IAED,OAAO;MAACD,KAAD;MAAQC,MAAR;MAAgBC;IAAhB,CAAP;EACD;;EAGD7D,eAAe,GAAG;IAChB,IAAI,KAAKtC,kBAAT,EAA6B;MAC3B,KAAKJ,EAAL,CAAQmI,QAAR,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,KAAKnI,EAAL,CAAQ+H,kBAA/B,EAAmD,KAAK/H,EAAL,CAAQgI,mBAA3D;IACD;EACF;;EAIDvF,0BAA0B,GAAG;IAC3B,IAAI,KAAKpC,uBAAT,EAAkC;MAChC5B,eAAe,CAAC,KAAKuB,EAAN,EAAU;QAACQ,eAAe,EAAE,KAAKA;MAAvB,CAAV,CAAf;IACD;EACF;;EAGD6B,kBAAkB,GAAG;IAEnB,IAAI,KAAK7C,KAAL,CAAWW,iBAAf,EAAkC;MAChC,KAAKsF,WAAL,GAAmB,IAAI1G,WAAJ,CAAgB,KAAKiB,EAArB,CAAnB;IACD;EACF;;EAEDwF,kBAAkB,GAAG;IACnB,IAAI,KAAKC,WAAT,EAAsB;MACpB,KAAKA,WAAL,CAAiB2C,MAAjB,CAAwB;QACtB/B,KAAK,EAAE,KAAKrG,EAAL,CAAQ+H,kBADO;QAEtBzB,MAAM,EAAE,KAAKtG,EAAL,CAAQgI;MAFM,CAAxB;IAID;EACF;;EAED5E,YAAY,GAAG;IACb,KAAKrC,SAAL,CAAesH,OAAf;IACA,KAAKtH,SAAL,CAAeuH,SAAf;;IAKA,IACE,KAAK3F,aAAL,IACA,KAAKA,aAAL,CAAmB4F,iBAAnB,EADA,IAEA,CAAC,KAAK5F,aAAL,CAAmB6F,eAAnB,EAHH,EAIE;MACA,KAAKlI,KAAL,CAAWC,GAAX,CAAe,UAAf,EAA2BkI,OAA3B,CAAmC,KAAK9F,aAAL,CAAmB+F,oBAAnB,EAAnC;IACD;;IAED,IAAI,KAAK/F,aAAT,EAAwB;MAEtB,KAAKA,aAAL,CAAmBgG,qBAAnB;IACD;;IAED,KAAK9H,OAAL,CAAayH,SAAb;EACD;;EAED5E,UAAU,GAAG;IACX,KAAK7C,OAAL,CAAawH,OAAb;;IAEA,IAAI,KAAK1F,aAAT,EAAwB;MAEtB,KAAKA,aAAL,CAAmBiG,GAAnB;IACD;EACF;;EAIDtG,mBAAmB,GAAG;IACpB,MAAM;MAAC6B;IAAD,IAAW,KAAKnE,EAAtB;;IACA,IAAImE,MAAJ,EAAY;MACVA,MAAM,CAACe,gBAAP,CAAwB,WAAxB,EAAqC,KAAKvD,YAA1C;MACAwC,MAAM,CAACe,gBAAP,CAAwB,YAAxB,EAAsC,KAAKtD,aAA3C;IACD;EACF;;EAEDD,YAAY,CAACkH,CAAD,EAAI;IACd,KAAKhG,cAAL,CAAoBuD,cAApB,GAAqC,CAACyC,CAAC,CAACC,OAAH,EAAYD,CAAC,CAACE,OAAd,CAArC;EACD;;EACDnH,aAAa,CAACiH,CAAD,EAAI;IACf,KAAKhG,cAAL,CAAoBuD,cAApB,GAAqC,IAArC;EACD;;AA9jBgC"}
|
|
@@ -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,"
|
|
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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"}
|
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,"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(
|
|
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;
|