@luma.gl/engine 8.5.10 → 8.5.13
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 +1832 -1870
- package/dist/dist.min.js +1 -1
- package/dist/es5/bundle.js +2 -4
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/lib/animation-loop.js +1 -1
- package/dist/es5/lib/animation-loop.js.map +1 -1
- package/dist/esm/bundle.js +2 -4
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/lib/animation-loop.js +1 -1
- package/dist/esm/lib/animation-loop.js.map +1 -1
- package/package.json +7 -6
- package/src/bundle.js +2 -3
- package/src/lib/animation-loop.js +1 -1
package/dist/es5/bundle.js
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
var moduleExports = require('./index');
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
_global.luma = _global.luma || {};
|
|
8
|
-
module.exports = Object.assign(_global.luma, moduleExports);
|
|
5
|
+
globalThis.luma = globalThis.luma || {};
|
|
6
|
+
module.exports = Object.assign(globalThis.luma, moduleExports);
|
|
9
7
|
//# sourceMappingURL=bundle.js.map
|
package/dist/es5/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bundle.js"],"names":["moduleExports","require","
|
|
1
|
+
{"version":3,"sources":["../../src/bundle.js"],"names":["moduleExports","require","globalThis","luma","module","exports","Object","assign"],"mappings":";;AAAA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AAGAC,UAAU,CAACC,IAAX,GAAkBD,UAAU,CAACC,IAAX,IAAmB,EAArC;AAEAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,IAAzB,EAA+BH,aAA/B,CAAjB","sourcesContent":["const moduleExports = require('./index');\n\n// @ts-ignore\nglobalThis.luma = globalThis.luma || {};\n// @ts-ignore\nmodule.exports = Object.assign(globalThis.luma, moduleExports);\n"],"file":"bundle.js"}
|
|
@@ -21,7 +21,7 @@ var _gltools = require("@luma.gl/gltools");
|
|
|
21
21
|
|
|
22
22
|
var _webgl = require("@luma.gl/webgl");
|
|
23
23
|
|
|
24
|
-
var _env = require("probe.gl/env");
|
|
24
|
+
var _env = require("@probe.gl/env");
|
|
25
25
|
|
|
26
26
|
var isPage = (0, _env.isBrowser)() && typeof document !== 'undefined';
|
|
27
27
|
var statIdCounter = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/animation-loop.js"],"names":["isPage","document","statIdCounter","AnimationLoop","props","onCreateContext","opts","onAddHTML","onInitialize","onRender","onFinalize","onError","gl","glOptions","debug","createFramebuffer","autoResizeViewport","autoResizeDrawingBuffer","stats","lumaStats","get","useDevicePixels","log","deprecated","useDevicePixelRatio","needsRedraw","timeline","cpuTime","gpuTime","frameRate","_initialized","_running","_animationFrameId","_nextFramePromise","_resolveNextFrame","_cpuStartTime","setProps","start","bind","stop","_pageLoadPromise","_onMousemove","_onMouseleave","_setDisplay","reason","startPromise","_getPageLoadPromise","then","_createWebGLContext","_createFramebuffer","_startEventHandling","_initializeCallbackData","_updateCallbackData","_resizeCanvasDrawingBuffer","_resizeViewport","_gpuTimeQuery","Query","isSupported","animationProps","appContext","_addCallbackData","_startLoop","catch","isContextLost","_beginTimers","_setupFrame","_renderFrame","_clearNeedsRedraw","offScreen","commit","_endTimers","_finalizeCallbackData","_cancelAnimationFrame","setNeedsRedraw","Promise","resolve","waitForRender","canvas","toDataURL","id","defaultValue","element","getElementById","Number","value","removed","renderFrame","redraw","_requestAnimationFrame","reject","readyState","window","addEventListener","display","delete","animationLoop","animationFrameId","cancelAnimationFrame","renderFrameCallback","requestAnimationFrame","undefined","_resizeFramebuffer","framebuffer","startTime","Date","now","engineTime","tick","tock","time","_timeline","_loop","_animationLoop","_mousePosition","_getSizeAndAspect","width","height","aspect","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","Framebuffer","resize","timeEnd","timeStart","isResultAvailable","isTimerDisjoint","addTime","getTimerMilliseconds","beginTimeElapsedQuery","end","e","offsetX","offsetY"],"mappings":"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","sourcesContent":["import {\n isWebGL,\n createGLContext,\n instrumentGLContext,\n resizeGLContext,\n resetParameters\n} from '@luma.gl/gltools';\n\nimport {\n requestAnimationFrame,\n cancelAnimationFrame,\n Query,\n lumaStats,\n // TODO - remove dependency on framebuffer (bundle size impact)\n Framebuffer,\n log,\n assert\n} from '@luma.gl/webgl';\n\nimport {isBrowser} from 'probe.gl/env';\n\nconst isPage = isBrowser() && typeof document !== 'undefined';\n\nlet statIdCounter = 0;\n\nexport default class AnimationLoop {\n /*\n * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context\n */\n constructor(props = {}) {\n const {\n onCreateContext = opts => createGLContext(opts),\n onAddHTML = null,\n onInitialize = () => {},\n onRender = () => {},\n onFinalize = () => {},\n onError,\n\n gl = null,\n glOptions = {},\n debug = false,\n\n createFramebuffer = false,\n\n // view parameters\n autoResizeViewport = true,\n autoResizeDrawingBuffer = true,\n stats = lumaStats.get(`animation-loop-${statIdCounter++}`)\n } = props;\n\n let {useDevicePixels = true} = props;\n\n if ('useDevicePixelRatio' in props) {\n log.deprecated('useDevicePixelRatio', 'useDevicePixels')();\n // @ts-ignore\n useDevicePixels = props.useDevicePixelRatio;\n }\n\n this.props = {\n onCreateContext,\n onAddHTML,\n onInitialize,\n onRender,\n onFinalize,\n onError,\n\n gl,\n glOptions,\n debug,\n createFramebuffer\n };\n\n // state\n this.gl = gl;\n this.needsRedraw = null;\n this.timeline = null;\n this.stats = stats;\n this.cpuTime = this.stats.get('CPU Time');\n this.gpuTime = this.stats.get('GPU Time');\n this.frameRate = this.stats.get('Frame Rate');\n\n this._initialized = false;\n this._running = false;\n this._animationFrameId = null;\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._cpuStartTime = 0;\n\n this.setProps({\n autoResizeViewport,\n autoResizeDrawingBuffer,\n useDevicePixels\n });\n\n // Bind methods\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n\n this._pageLoadPromise = null;\n\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n\n delete() {\n this.stop();\n this._setDisplay(null);\n }\n\n setNeedsRedraw(reason) {\n assert(typeof reason === 'string');\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n\n setProps(props) {\n if ('autoResizeViewport' in props) {\n this.autoResizeViewport = props.autoResizeViewport;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;\n }\n if ('useDevicePixels' in props) {\n this.useDevicePixels = props.useDevicePixels;\n }\n return this;\n }\n\n // Starts a render loop if not already running\n // @param {Object} context - contains frame specific info (E.g. tick, width, height, etc)\n start(opts = {}) {\n if (this._running) {\n return this;\n }\n this._running = true;\n // console.debug(`Starting ${this.constructor.name}`);\n // Wait for start promise before rendering frame\n const startPromise = this._getPageLoadPromise()\n .then(() => {\n if (!this._running || this._initialized) {\n return null;\n }\n\n // Create the WebGL context\n this._createWebGLContext(opts);\n this._createFramebuffer();\n this._startEventHandling();\n\n // Initialize the callback data\n this._initializeCallbackData();\n this._updateCallbackData();\n\n // Default viewport setup, in case onInitialize wants to render\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n\n this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;\n\n this._initialized = true;\n\n // Note: onIntialize can return a promise (in case it needs to load resources)\n return this.onInitialize(this.animationProps);\n })\n .then(appContext => {\n if (this._running) {\n this._addCallbackData(appContext || {});\n if (appContext !== false) {\n this._startLoop();\n }\n }\n });\n\n if (this.props.onError) {\n startPromise.catch(this.props.onError);\n }\n\n return this;\n }\n\n // Redraw now\n redraw() {\n if (this.isContextLost()) {\n return this;\n }\n\n this._beginTimers();\n\n this._setupFrame();\n this._updateCallbackData();\n\n this._renderFrame(this.animationProps);\n\n // clear needsRedraw flag\n this._clearNeedsRedraw();\n\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit\n // Chrome's offscreen canvas does not require gl.commit\n if (this.offScreen && this.gl.commit) {\n this.gl.commit();\n }\n\n if (this._resolveNextFrame) {\n this._resolveNextFrame(this);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n }\n\n this._endTimers();\n\n return this;\n }\n\n // Stops a render loop if already running, finalizing\n stop() {\n // console.debug(`Stopping ${this.constructor.name}`);\n if (this._running) {\n this._finalizeCallbackData();\n this._cancelAnimationFrame(this._animationFrameId);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._animationFrameId = null;\n this._running = false;\n }\n return this;\n }\n\n attachTimeline(timeline) {\n this.timeline = timeline;\n\n return this.timeline;\n }\n\n detachTimeline() {\n this.timeline = null;\n }\n\n waitForRender() {\n this.setNeedsRedraw('waitForRender');\n\n if (!this._nextFramePromise) {\n this._nextFramePromise = new Promise(resolve => {\n this._resolveNextFrame = resolve;\n });\n }\n return this._nextFramePromise;\n }\n\n async toDataURL() {\n this.setNeedsRedraw('toDataURL');\n\n await this.waitForRender();\n\n return this.gl.canvas.toDataURL();\n }\n\n isContextLost() {\n return this.gl.isContextLost();\n }\n\n onCreateContext(...args) {\n return this.props.onCreateContext(...args);\n }\n\n onInitialize(...args) {\n return this.props.onInitialize(...args);\n }\n\n onRender(...args) {\n return this.props.onRender(...args);\n }\n\n onFinalize(...args) {\n return this.props.onFinalize(...args);\n }\n\n // DEPRECATED/REMOVED METHODS\n\n getHTMLControlValue(id, defaultValue = 1) {\n const element = document.getElementById(id);\n // @ts-ignore Not all html elements have value\n return element ? Number(element.value) : defaultValue;\n }\n\n // Update parameters\n setViewParameters() {\n log.removed('AnimationLoop.setViewParameters', 'AnimationLoop.setProps')();\n return this;\n }\n\n // PRIVATE METHODS\n\n _startLoop() {\n const renderFrame = () => {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n };\n\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n }\n\n // PRIVATE METHODS\n\n _getPageLoadPromise() {\n if (!this._pageLoadPromise) {\n this._pageLoadPromise = isPage\n ? new Promise((resolve, reject) => {\n if (isPage && document.readyState === 'complete') {\n resolve(document);\n return;\n }\n window.addEventListener('load', () => {\n resolve(document);\n });\n })\n : Promise.resolve({});\n }\n return this._pageLoadPromise;\n }\n\n _setDisplay(display) {\n if (this.display) {\n this.display.delete();\n this.display.animationLoop = null;\n }\n\n // store animation loop on the display\n if (display) {\n display.animationLoop = this;\n }\n\n this.display = display;\n }\n\n _cancelAnimationFrame(animationFrameId) {\n // E.g. VR display has a separate animation frame to sync with headset\n if (this.display && this.display.cancelAnimationFrame) {\n return this.display.cancelAnimationFrame(animationFrameId);\n }\n\n return cancelAnimationFrame(animationFrameId);\n }\n\n _requestAnimationFrame(renderFrameCallback) {\n if (this._running) {\n // E.g. VR display has a separate animation frame to sync with headset\n if (this.display && this.display.requestAnimationFrame) {\n return this.display.requestAnimationFrame(renderFrameCallback);\n }\n\n return requestAnimationFrame(renderFrameCallback);\n }\n return undefined;\n }\n\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(...args) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(...args);\n return;\n }\n\n // call callback\n this.onRender(...args);\n // end callback\n }\n\n _clearNeedsRedraw() {\n this.needsRedraw = null;\n }\n\n _setupFrame() {\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n this._resizeFramebuffer();\n }\n\n // Initialize the object that will be passed to app callbacks\n _initializeCallbackData() {\n this.animationProps = {\n gl: this.gl,\n\n stop: this.stop,\n canvas: this.gl.canvas,\n framebuffer: this.framebuffer,\n\n // Initial values\n useDevicePixels: this.useDevicePixels,\n needsRedraw: null,\n\n // Animation props\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n\n // Timeline time for back compatibility\n time: 0,\n\n // Experimental\n _timeline: this.timeline,\n _loop: this,\n _animationLoop: this,\n _mousePosition: null // Event props\n };\n }\n\n // Update the context object that will be passed to app callbacks\n _updateCallbackData() {\n const {width, height, aspect} = this._getSizeAndAspect();\n if (width !== this.animationProps.width || height !== this.animationProps.height) {\n this.setNeedsRedraw('drawing buffer resized');\n }\n if (aspect !== this.animationProps.aspect) {\n this.setNeedsRedraw('drawing buffer aspect changed');\n }\n\n this.animationProps.width = width;\n this.animationProps.height = height;\n this.animationProps.aspect = aspect;\n\n this.animationProps.needsRedraw = this.needsRedraw;\n\n // Update time properties\n this.animationProps.engineTime = Date.now() - this.animationProps.startTime;\n\n if (this.timeline) {\n this.timeline.update(this.animationProps.engineTime);\n }\n\n this.animationProps.tick = Math.floor((this.animationProps.time / 1000) * 60);\n this.animationProps.tock++;\n\n // For back compatibility\n this.animationProps.time = this.timeline\n ? this.timeline.getTime()\n : this.animationProps.engineTime;\n\n // experimental\n this.animationProps._offScreen = this.offScreen;\n }\n\n _finalizeCallbackData() {\n // call callback\n this.onFinalize(this.animationProps);\n // end callback\n }\n\n // Add application's data to the app context object\n _addCallbackData(appContext) {\n if (typeof appContext === 'object' && appContext !== null) {\n this.animationProps = Object.assign({}, this.animationProps, appContext);\n }\n }\n\n // Either uses supplied or existing context, or calls provided callback to create one\n _createWebGLContext(opts) {\n this.offScreen =\n opts.canvas &&\n typeof OffscreenCanvas !== 'undefined' &&\n opts.canvas instanceof OffscreenCanvas;\n\n // Create the WebGL context if necessary\n opts = Object.assign({}, opts, this.props.glOptions);\n this.gl = this.props.gl ? instrumentGLContext(this.props.gl, opts) : this.onCreateContext(opts);\n\n if (!isWebGL(this.gl)) {\n throw new Error('AnimationLoop.onCreateContext - illegal context returned');\n }\n\n // Reset the WebGL context.\n resetParameters(this.gl);\n\n this._createInfoDiv();\n }\n\n _createInfoDiv() {\n if (this.gl.canvas && this.props.onAddHTML) {\n const wrapperDiv = document.createElement('div');\n document.body.appendChild(wrapperDiv);\n wrapperDiv.style.position = 'relative';\n const div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '10px';\n div.style.bottom = '10px';\n div.style.width = '300px';\n div.style.background = 'white';\n wrapperDiv.appendChild(this.gl.canvas);\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n\n _getSizeAndAspect() {\n // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n const width = this.gl.drawingBufferWidth;\n const height = this.gl.drawingBufferHeight;\n\n // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n let aspect = 1;\n const {canvas} = this.gl;\n\n if (canvas && canvas.clientHeight) {\n aspect = canvas.clientWidth / canvas.clientHeight;\n } else if (width > 0 && height > 0) {\n aspect = width / height;\n }\n\n return {width, height, aspect};\n }\n\n // Default viewport setup\n _resizeViewport() {\n if (this.autoResizeViewport) {\n this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);\n }\n }\n\n // Resize the render buffer of the canvas to match canvas client size\n // Optionally multiplying with devicePixel ratio\n _resizeCanvasDrawingBuffer() {\n if (this.autoResizeDrawingBuffer) {\n resizeGLContext(this.gl, {useDevicePixels: this.useDevicePixels});\n }\n }\n\n // TBD - deprecated?\n _createFramebuffer() {\n // Setup default framebuffer\n if (this.props.createFramebuffer) {\n this.framebuffer = new Framebuffer(this.gl);\n }\n }\n\n _resizeFramebuffer() {\n if (this.framebuffer) {\n this.framebuffer.resize({\n width: this.gl.drawingBufferWidth,\n height: this.gl.drawingBufferHeight\n });\n }\n }\n\n _beginTimers() {\n this.frameRate.timeEnd();\n this.frameRate.timeStart();\n\n // Check if timer for last frame has completed.\n // GPU timer results are never available in the same\n // frame they are captured.\n if (\n this._gpuTimeQuery &&\n this._gpuTimeQuery.isResultAvailable() &&\n !this._gpuTimeQuery.isTimerDisjoint()\n ) {\n this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());\n }\n\n if (this._gpuTimeQuery) {\n // GPU time query start\n this._gpuTimeQuery.beginTimeElapsedQuery();\n }\n\n this.cpuTime.timeStart();\n }\n\n _endTimers() {\n this.cpuTime.timeEnd();\n\n if (this._gpuTimeQuery) {\n // GPU time query end. Results will be available on next frame.\n this._gpuTimeQuery.end();\n }\n }\n\n // Event handling\n\n _startEventHandling() {\n const {canvas} = this.gl;\n if (canvas) {\n canvas.addEventListener('mousemove', this._onMousemove);\n canvas.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n _onMousemove(e) {\n this.animationProps._mousePosition = [e.offsetX, e.offsetY];\n }\n _onMouseleave(e) {\n this.animationProps._mousePosition = null;\n }\n}\n"],"file":"animation-loop.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/animation-loop.js"],"names":["isPage","document","statIdCounter","AnimationLoop","props","onCreateContext","opts","onAddHTML","onInitialize","onRender","onFinalize","onError","gl","glOptions","debug","createFramebuffer","autoResizeViewport","autoResizeDrawingBuffer","stats","lumaStats","get","useDevicePixels","log","deprecated","useDevicePixelRatio","needsRedraw","timeline","cpuTime","gpuTime","frameRate","_initialized","_running","_animationFrameId","_nextFramePromise","_resolveNextFrame","_cpuStartTime","setProps","start","bind","stop","_pageLoadPromise","_onMousemove","_onMouseleave","_setDisplay","reason","startPromise","_getPageLoadPromise","then","_createWebGLContext","_createFramebuffer","_startEventHandling","_initializeCallbackData","_updateCallbackData","_resizeCanvasDrawingBuffer","_resizeViewport","_gpuTimeQuery","Query","isSupported","animationProps","appContext","_addCallbackData","_startLoop","catch","isContextLost","_beginTimers","_setupFrame","_renderFrame","_clearNeedsRedraw","offScreen","commit","_endTimers","_finalizeCallbackData","_cancelAnimationFrame","setNeedsRedraw","Promise","resolve","waitForRender","canvas","toDataURL","id","defaultValue","element","getElementById","Number","value","removed","renderFrame","redraw","_requestAnimationFrame","reject","readyState","window","addEventListener","display","delete","animationLoop","animationFrameId","cancelAnimationFrame","renderFrameCallback","requestAnimationFrame","undefined","_resizeFramebuffer","framebuffer","startTime","Date","now","engineTime","tick","tock","time","_timeline","_loop","_animationLoop","_mousePosition","_getSizeAndAspect","width","height","aspect","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","Framebuffer","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"}
|
package/dist/esm/bundle.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
const moduleExports = require('./index');
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
_global.luma = _global.luma || {};
|
|
6
|
-
module.exports = Object.assign(_global.luma, moduleExports);
|
|
3
|
+
globalThis.luma = globalThis.luma || {};
|
|
4
|
+
module.exports = Object.assign(globalThis.luma, moduleExports);
|
|
7
5
|
//# sourceMappingURL=bundle.js.map
|
package/dist/esm/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bundle.js"],"names":["moduleExports","require","
|
|
1
|
+
{"version":3,"sources":["../../src/bundle.js"],"names":["moduleExports","require","globalThis","luma","module","exports","Object","assign"],"mappings":"AAAA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AAGAC,UAAU,CAACC,IAAX,GAAkBD,UAAU,CAACC,IAAX,IAAmB,EAArC;AAEAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,IAAzB,EAA+BH,aAA/B,CAAjB","sourcesContent":["const moduleExports = require('./index');\n\n// @ts-ignore\nglobalThis.luma = globalThis.luma || {};\n// @ts-ignore\nmodule.exports = Object.assign(globalThis.luma, moduleExports);\n"],"file":"bundle.js"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isWebGL, createGLContext, instrumentGLContext, resizeGLContext, resetParameters } from '@luma.gl/gltools';
|
|
2
2
|
import { requestAnimationFrame, cancelAnimationFrame, Query, lumaStats, Framebuffer, log, assert } from '@luma.gl/webgl';
|
|
3
|
-
import { isBrowser } from 'probe.gl/env';
|
|
3
|
+
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 {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/animation-loop.js"],"names":["isWebGL","createGLContext","instrumentGLContext","resizeGLContext","resetParameters","requestAnimationFrame","cancelAnimationFrame","Query","lumaStats","Framebuffer","log","assert","isBrowser","isPage","document","statIdCounter","AnimationLoop","constructor","props","onCreateContext","opts","onAddHTML","onInitialize","onRender","onFinalize","onError","gl","glOptions","debug","createFramebuffer","autoResizeViewport","autoResizeDrawingBuffer","stats","get","useDevicePixels","deprecated","useDevicePixelRatio","needsRedraw","timeline","cpuTime","gpuTime","frameRate","_initialized","_running","_animationFrameId","_nextFramePromise","_resolveNextFrame","_cpuStartTime","setProps","start","bind","stop","_pageLoadPromise","_onMousemove","_onMouseleave","delete","_setDisplay","setNeedsRedraw","reason","startPromise","_getPageLoadPromise","then","_createWebGLContext","_createFramebuffer","_startEventHandling","_initializeCallbackData","_updateCallbackData","_resizeCanvasDrawingBuffer","_resizeViewport","_gpuTimeQuery","isSupported","animationProps","appContext","_addCallbackData","_startLoop","catch","redraw","isContextLost","_beginTimers","_setupFrame","_renderFrame","_clearNeedsRedraw","offScreen","commit","_endTimers","_finalizeCallbackData","_cancelAnimationFrame","attachTimeline","detachTimeline","waitForRender","Promise","resolve","toDataURL","canvas","args","getHTMLControlValue","id","defaultValue","element","getElementById","Number","value","setViewParameters","removed","renderFrame","_requestAnimationFrame","reject","readyState","window","addEventListener","display","animationLoop","animationFrameId","renderFrameCallback","undefined","_resizeFramebuffer","framebuffer","startTime","Date","now","engineTime","tick","tock","time","_timeline","_loop","_animationLoop","_mousePosition","width","height","aspect","_getSizeAndAspect","update","Math","floor","getTime","_offScreen","Object","assign","OffscreenCanvas","Error","_createInfoDiv","wrapperDiv","createElement","body","appendChild","style","position","div","left","bottom","background","html","innerHTML","drawingBufferWidth","drawingBufferHeight","clientHeight","clientWidth","viewport","resize","timeEnd","timeStart","isResultAvailable","isTimerDisjoint","addTime","getTimerMilliseconds","beginTimeElapsedQuery","end","e","offsetX","offsetY"],"mappings":"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","sourcesContent":["import {\n isWebGL,\n createGLContext,\n instrumentGLContext,\n resizeGLContext,\n resetParameters\n} from '@luma.gl/gltools';\n\nimport {\n requestAnimationFrame,\n cancelAnimationFrame,\n Query,\n lumaStats,\n // TODO - remove dependency on framebuffer (bundle size impact)\n Framebuffer,\n log,\n assert\n} from '@luma.gl/webgl';\n\nimport {isBrowser} from 'probe.gl/env';\n\nconst isPage = isBrowser() && typeof document !== 'undefined';\n\nlet statIdCounter = 0;\n\nexport default class AnimationLoop {\n /*\n * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context\n */\n constructor(props = {}) {\n const {\n onCreateContext = opts => createGLContext(opts),\n onAddHTML = null,\n onInitialize = () => {},\n onRender = () => {},\n onFinalize = () => {},\n onError,\n\n gl = null,\n glOptions = {},\n debug = false,\n\n createFramebuffer = false,\n\n // view parameters\n autoResizeViewport = true,\n autoResizeDrawingBuffer = true,\n stats = lumaStats.get(`animation-loop-${statIdCounter++}`)\n } = props;\n\n let {useDevicePixels = true} = props;\n\n if ('useDevicePixelRatio' in props) {\n log.deprecated('useDevicePixelRatio', 'useDevicePixels')();\n // @ts-ignore\n useDevicePixels = props.useDevicePixelRatio;\n }\n\n this.props = {\n onCreateContext,\n onAddHTML,\n onInitialize,\n onRender,\n onFinalize,\n onError,\n\n gl,\n glOptions,\n debug,\n createFramebuffer\n };\n\n // state\n this.gl = gl;\n this.needsRedraw = null;\n this.timeline = null;\n this.stats = stats;\n this.cpuTime = this.stats.get('CPU Time');\n this.gpuTime = this.stats.get('GPU Time');\n this.frameRate = this.stats.get('Frame Rate');\n\n this._initialized = false;\n this._running = false;\n this._animationFrameId = null;\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._cpuStartTime = 0;\n\n this.setProps({\n autoResizeViewport,\n autoResizeDrawingBuffer,\n useDevicePixels\n });\n\n // Bind methods\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n\n this._pageLoadPromise = null;\n\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n\n delete() {\n this.stop();\n this._setDisplay(null);\n }\n\n setNeedsRedraw(reason) {\n assert(typeof reason === 'string');\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n\n setProps(props) {\n if ('autoResizeViewport' in props) {\n this.autoResizeViewport = props.autoResizeViewport;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;\n }\n if ('useDevicePixels' in props) {\n this.useDevicePixels = props.useDevicePixels;\n }\n return this;\n }\n\n // Starts a render loop if not already running\n // @param {Object} context - contains frame specific info (E.g. tick, width, height, etc)\n start(opts = {}) {\n if (this._running) {\n return this;\n }\n this._running = true;\n // console.debug(`Starting ${this.constructor.name}`);\n // Wait for start promise before rendering frame\n const startPromise = this._getPageLoadPromise()\n .then(() => {\n if (!this._running || this._initialized) {\n return null;\n }\n\n // Create the WebGL context\n this._createWebGLContext(opts);\n this._createFramebuffer();\n this._startEventHandling();\n\n // Initialize the callback data\n this._initializeCallbackData();\n this._updateCallbackData();\n\n // Default viewport setup, in case onInitialize wants to render\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n\n this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;\n\n this._initialized = true;\n\n // Note: onIntialize can return a promise (in case it needs to load resources)\n return this.onInitialize(this.animationProps);\n })\n .then(appContext => {\n if (this._running) {\n this._addCallbackData(appContext || {});\n if (appContext !== false) {\n this._startLoop();\n }\n }\n });\n\n if (this.props.onError) {\n startPromise.catch(this.props.onError);\n }\n\n return this;\n }\n\n // Redraw now\n redraw() {\n if (this.isContextLost()) {\n return this;\n }\n\n this._beginTimers();\n\n this._setupFrame();\n this._updateCallbackData();\n\n this._renderFrame(this.animationProps);\n\n // clear needsRedraw flag\n this._clearNeedsRedraw();\n\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit\n // Chrome's offscreen canvas does not require gl.commit\n if (this.offScreen && this.gl.commit) {\n this.gl.commit();\n }\n\n if (this._resolveNextFrame) {\n this._resolveNextFrame(this);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n }\n\n this._endTimers();\n\n return this;\n }\n\n // Stops a render loop if already running, finalizing\n stop() {\n // console.debug(`Stopping ${this.constructor.name}`);\n if (this._running) {\n this._finalizeCallbackData();\n this._cancelAnimationFrame(this._animationFrameId);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._animationFrameId = null;\n this._running = false;\n }\n return this;\n }\n\n attachTimeline(timeline) {\n this.timeline = timeline;\n\n return this.timeline;\n }\n\n detachTimeline() {\n this.timeline = null;\n }\n\n waitForRender() {\n this.setNeedsRedraw('waitForRender');\n\n if (!this._nextFramePromise) {\n this._nextFramePromise = new Promise(resolve => {\n this._resolveNextFrame = resolve;\n });\n }\n return this._nextFramePromise;\n }\n\n async toDataURL() {\n this.setNeedsRedraw('toDataURL');\n\n await this.waitForRender();\n\n return this.gl.canvas.toDataURL();\n }\n\n isContextLost() {\n return this.gl.isContextLost();\n }\n\n onCreateContext(...args) {\n return this.props.onCreateContext(...args);\n }\n\n onInitialize(...args) {\n return this.props.onInitialize(...args);\n }\n\n onRender(...args) {\n return this.props.onRender(...args);\n }\n\n onFinalize(...args) {\n return this.props.onFinalize(...args);\n }\n\n // DEPRECATED/REMOVED METHODS\n\n getHTMLControlValue(id, defaultValue = 1) {\n const element = document.getElementById(id);\n // @ts-ignore Not all html elements have value\n return element ? Number(element.value) : defaultValue;\n }\n\n // Update parameters\n setViewParameters() {\n log.removed('AnimationLoop.setViewParameters', 'AnimationLoop.setProps')();\n return this;\n }\n\n // PRIVATE METHODS\n\n _startLoop() {\n const renderFrame = () => {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n };\n\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = this._requestAnimationFrame(renderFrame);\n }\n\n // PRIVATE METHODS\n\n _getPageLoadPromise() {\n if (!this._pageLoadPromise) {\n this._pageLoadPromise = isPage\n ? new Promise((resolve, reject) => {\n if (isPage && document.readyState === 'complete') {\n resolve(document);\n return;\n }\n window.addEventListener('load', () => {\n resolve(document);\n });\n })\n : Promise.resolve({});\n }\n return this._pageLoadPromise;\n }\n\n _setDisplay(display) {\n if (this.display) {\n this.display.delete();\n this.display.animationLoop = null;\n }\n\n // store animation loop on the display\n if (display) {\n display.animationLoop = this;\n }\n\n this.display = display;\n }\n\n _cancelAnimationFrame(animationFrameId) {\n // E.g. VR display has a separate animation frame to sync with headset\n if (this.display && this.display.cancelAnimationFrame) {\n return this.display.cancelAnimationFrame(animationFrameId);\n }\n\n return cancelAnimationFrame(animationFrameId);\n }\n\n _requestAnimationFrame(renderFrameCallback) {\n if (this._running) {\n // E.g. VR display has a separate animation frame to sync with headset\n if (this.display && this.display.requestAnimationFrame) {\n return this.display.requestAnimationFrame(renderFrameCallback);\n }\n\n return requestAnimationFrame(renderFrameCallback);\n }\n return undefined;\n }\n\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(...args) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(...args);\n return;\n }\n\n // call callback\n this.onRender(...args);\n // end callback\n }\n\n _clearNeedsRedraw() {\n this.needsRedraw = null;\n }\n\n _setupFrame() {\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n this._resizeFramebuffer();\n }\n\n // Initialize the object that will be passed to app callbacks\n _initializeCallbackData() {\n this.animationProps = {\n gl: this.gl,\n\n stop: this.stop,\n canvas: this.gl.canvas,\n framebuffer: this.framebuffer,\n\n // Initial values\n useDevicePixels: this.useDevicePixels,\n needsRedraw: null,\n\n // Animation props\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n\n // Timeline time for back compatibility\n time: 0,\n\n // Experimental\n _timeline: this.timeline,\n _loop: this,\n _animationLoop: this,\n _mousePosition: null // Event props\n };\n }\n\n // Update the context object that will be passed to app callbacks\n _updateCallbackData() {\n const {width, height, aspect} = this._getSizeAndAspect();\n if (width !== this.animationProps.width || height !== this.animationProps.height) {\n this.setNeedsRedraw('drawing buffer resized');\n }\n if (aspect !== this.animationProps.aspect) {\n this.setNeedsRedraw('drawing buffer aspect changed');\n }\n\n this.animationProps.width = width;\n this.animationProps.height = height;\n this.animationProps.aspect = aspect;\n\n this.animationProps.needsRedraw = this.needsRedraw;\n\n // Update time properties\n this.animationProps.engineTime = Date.now() - this.animationProps.startTime;\n\n if (this.timeline) {\n this.timeline.update(this.animationProps.engineTime);\n }\n\n this.animationProps.tick = Math.floor((this.animationProps.time / 1000) * 60);\n this.animationProps.tock++;\n\n // For back compatibility\n this.animationProps.time = this.timeline\n ? this.timeline.getTime()\n : this.animationProps.engineTime;\n\n // experimental\n this.animationProps._offScreen = this.offScreen;\n }\n\n _finalizeCallbackData() {\n // call callback\n this.onFinalize(this.animationProps);\n // end callback\n }\n\n // Add application's data to the app context object\n _addCallbackData(appContext) {\n if (typeof appContext === 'object' && appContext !== null) {\n this.animationProps = Object.assign({}, this.animationProps, appContext);\n }\n }\n\n // Either uses supplied or existing context, or calls provided callback to create one\n _createWebGLContext(opts) {\n this.offScreen =\n opts.canvas &&\n typeof OffscreenCanvas !== 'undefined' &&\n opts.canvas instanceof OffscreenCanvas;\n\n // Create the WebGL context if necessary\n opts = Object.assign({}, opts, this.props.glOptions);\n this.gl = this.props.gl ? instrumentGLContext(this.props.gl, opts) : this.onCreateContext(opts);\n\n if (!isWebGL(this.gl)) {\n throw new Error('AnimationLoop.onCreateContext - illegal context returned');\n }\n\n // Reset the WebGL context.\n resetParameters(this.gl);\n\n this._createInfoDiv();\n }\n\n _createInfoDiv() {\n if (this.gl.canvas && this.props.onAddHTML) {\n const wrapperDiv = document.createElement('div');\n document.body.appendChild(wrapperDiv);\n wrapperDiv.style.position = 'relative';\n const div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '10px';\n div.style.bottom = '10px';\n div.style.width = '300px';\n div.style.background = 'white';\n wrapperDiv.appendChild(this.gl.canvas);\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n\n _getSizeAndAspect() {\n // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n const width = this.gl.drawingBufferWidth;\n const height = this.gl.drawingBufferHeight;\n\n // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n let aspect = 1;\n const {canvas} = this.gl;\n\n if (canvas && canvas.clientHeight) {\n aspect = canvas.clientWidth / canvas.clientHeight;\n } else if (width > 0 && height > 0) {\n aspect = width / height;\n }\n\n return {width, height, aspect};\n }\n\n // Default viewport setup\n _resizeViewport() {\n if (this.autoResizeViewport) {\n this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);\n }\n }\n\n // Resize the render buffer of the canvas to match canvas client size\n // Optionally multiplying with devicePixel ratio\n _resizeCanvasDrawingBuffer() {\n if (this.autoResizeDrawingBuffer) {\n resizeGLContext(this.gl, {useDevicePixels: this.useDevicePixels});\n }\n }\n\n // TBD - deprecated?\n _createFramebuffer() {\n // Setup default framebuffer\n if (this.props.createFramebuffer) {\n this.framebuffer = new Framebuffer(this.gl);\n }\n }\n\n _resizeFramebuffer() {\n if (this.framebuffer) {\n this.framebuffer.resize({\n width: this.gl.drawingBufferWidth,\n height: this.gl.drawingBufferHeight\n });\n }\n }\n\n _beginTimers() {\n this.frameRate.timeEnd();\n this.frameRate.timeStart();\n\n // Check if timer for last frame has completed.\n // GPU timer results are never available in the same\n // frame they are captured.\n if (\n this._gpuTimeQuery &&\n this._gpuTimeQuery.isResultAvailable() &&\n !this._gpuTimeQuery.isTimerDisjoint()\n ) {\n this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());\n }\n\n if (this._gpuTimeQuery) {\n // GPU time query start\n this._gpuTimeQuery.beginTimeElapsedQuery();\n }\n\n this.cpuTime.timeStart();\n }\n\n _endTimers() {\n this.cpuTime.timeEnd();\n\n if (this._gpuTimeQuery) {\n // GPU time query end. Results will be available on next frame.\n this._gpuTimeQuery.end();\n }\n }\n\n // Event handling\n\n _startEventHandling() {\n const {canvas} = this.gl;\n if (canvas) {\n canvas.addEventListener('mousemove', this._onMousemove);\n canvas.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n _onMousemove(e) {\n this.animationProps._mousePosition = [e.offsetX, e.offsetY];\n }\n _onMouseleave(e) {\n this.animationProps._mousePosition = null;\n }\n}\n"],"file":"animation-loop.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/animation-loop.js"],"names":["isWebGL","createGLContext","instrumentGLContext","resizeGLContext","resetParameters","requestAnimationFrame","cancelAnimationFrame","Query","lumaStats","Framebuffer","log","assert","isBrowser","isPage","document","statIdCounter","AnimationLoop","constructor","props","onCreateContext","opts","onAddHTML","onInitialize","onRender","onFinalize","onError","gl","glOptions","debug","createFramebuffer","autoResizeViewport","autoResizeDrawingBuffer","stats","get","useDevicePixels","deprecated","useDevicePixelRatio","needsRedraw","timeline","cpuTime","gpuTime","frameRate","_initialized","_running","_animationFrameId","_nextFramePromise","_resolveNextFrame","_cpuStartTime","setProps","start","bind","stop","_pageLoadPromise","_onMousemove","_onMouseleave","delete","_setDisplay","setNeedsRedraw","reason","startPromise","_getPageLoadPromise","then","_createWebGLContext","_createFramebuffer","_startEventHandling","_initializeCallbackData","_updateCallbackData","_resizeCanvasDrawingBuffer","_resizeViewport","_gpuTimeQuery","isSupported","animationProps","appContext","_addCallbackData","_startLoop","catch","redraw","isContextLost","_beginTimers","_setupFrame","_renderFrame","_clearNeedsRedraw","offScreen","commit","_endTimers","_finalizeCallbackData","_cancelAnimationFrame","attachTimeline","detachTimeline","waitForRender","Promise","resolve","toDataURL","canvas","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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luma.gl/engine",
|
|
3
|
-
"version": "8.5.
|
|
3
|
+
"version": "8.5.13",
|
|
4
4
|
"description": "WebGL2 Components for High Performance Rendering and Computation",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -31,12 +31,13 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@babel/runtime": "^7.0.0",
|
|
34
|
-
"@luma.gl/constants": "8.5.
|
|
35
|
-
"@luma.gl/gltools": "8.5.
|
|
36
|
-
"@luma.gl/shadertools": "8.5.
|
|
37
|
-
"@luma.gl/webgl": "8.5.
|
|
34
|
+
"@luma.gl/constants": "8.5.13",
|
|
35
|
+
"@luma.gl/gltools": "8.5.13",
|
|
36
|
+
"@luma.gl/shadertools": "8.5.13",
|
|
37
|
+
"@luma.gl/webgl": "8.5.13",
|
|
38
38
|
"@math.gl/core": "^3.5.0",
|
|
39
|
+
"@probe.gl/env": "^3.5.0",
|
|
39
40
|
"probe.gl": "^3.4.0"
|
|
40
41
|
},
|
|
41
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "a46f53790803d9986e6bdf509828496f154f7c34"
|
|
42
43
|
}
|
package/src/bundle.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
const moduleExports = require('./index');
|
|
2
2
|
|
|
3
|
-
const _global = typeof window === 'undefined' ? global : window;
|
|
4
3
|
// @ts-ignore
|
|
5
|
-
|
|
4
|
+
globalThis.luma = globalThis.luma || {};
|
|
6
5
|
// @ts-ignore
|
|
7
|
-
module.exports = Object.assign(
|
|
6
|
+
module.exports = Object.assign(globalThis.luma, moduleExports);
|