{"version":3,"file":"bundle.mjs","sources":["../lib/media.ts","../elements/play-list.ts"],"sourcesContent":["// vim: tabstop=8 softtabstop=0 noexpandtab shiftwidth=8 nosmarttab\n// Interface for a media asset.\n\nimport * as THREE from 'three';\n\nexport interface MediaDecl {\n\ttype: string,\n\tsrc: string,\n}\n\n// TBD: Audio.\n// TBD: Seeking, within CMS UI.\n// TBD: Poster.\nexport abstract class MediaAsset extends EventTarget {\n\ttexture: THREE.Texture | undefined;\n\tautoplay = true;\n\tcurrentTime = 0;\n\tloop = false;\n\t#url: URL;\n\tprotected _src: string;\n\t// Per HTMLMediaElement.\n\tprotected _duration = NaN;\n\tprotected _ended = false;\n\tprotected _error = null;\n\tprotected _networkState = HTMLMediaElement.NETWORK_EMPTY;\n\tprotected _paused = true;\n\tprotected _readyState = HTMLMediaElement.HAVE_NOTHING;\n\n\tconstructor(src: string, public readonly collection: MediaCollection) {\n\t\tsuper();\n\t\tthis.#url = new URL(this.src, self.location.href);\n\t\tthis._src = src;\n\t}\n\n\tabstract close(): void;\n\n\t// Per HTMLMediaElement.\n\tget src() { return this._src; }\n\tget currentSrc() { return this.#url.href; }\n\tget duration() { return this._duration; }\n\tget ended() { return this._ended; }\n\tget error() { return this._error; }\n\tget networkState() { return this._networkState; }\n\tget paused() { return this._paused; }\n\tget readyState() { return this._readyState; }\n\t// Per HTMLVideoElement.\n\tget height() { return 0; }\n\tget width() { return 0; }\n\n\tabstract load(): void;\n\tabstract pause(): void;\n\tabstract play(): Promise<void>;\n\tabstract animate(now: DOMHighResTimeStamp) : void;\n\n\t// Events:\n\t// abort\n\t// canplay\n\t// canplaythrough\n\t// durationchange\n\t// emptied\n\t// ended\n\t// error\n\t// loadeddata\n\t// loadedmetadata\n\t// loadstart\n\t// pause\n\t// play\n\t// playing\n\t// progress\n\t// stalled\n\t// suspend\n\t// timeupdate\n\t// waiting\n}\n\n// super must be used to call functions only, operation is undefined when\n// accessing variables that are not hidden behind getters and setters.\nexport class MediaImage extends MediaAsset {\n\t#startTime = NaN;\n\t#lastTimeUpdate = 0;\n\n\tconstructor(src: string, collection: ImageCollection) {\n\t\tsuper(src, collection);\n\t}\n\n\toverride close(): void {\n\t\tif(this.texture instanceof THREE.Texture) {\n\t\t\t(this.collection as ImageCollection).release(this.texture.image);\n\t\t\tthis.texture.dispose();\n\t\t}\n\t}\n\n\t// Per HTMLMediaElement.\n\toverride get src() { return super.src; }\n\toverride get currentSrc() { return super.currentSrc; }\n\toverride get duration() { return super.duration; }\n\toverride set duration(duration: number) { this._duration = duration; }\n\toverride get ended() { return super.ended; }\n\toverride get error() { return super.error; }\n\toverride get networkState() { return super.networkState; }\n\toverride get paused() { return super.paused; }\n\toverride get readyState() { return super.readyState; }\n\t// Per HTMLVideoElement.\n\toverride get height() { return this.texture?.image.height; }\n\toverride get width() { return this.texture?.image.width; }\n\n\toverride load(): void {\n\t\tsuper.dispatchEvent(new Event('loadstart'));\n\t\tconst img = (this.collection as ImageCollection).acquire();\n\t\timg.src = this.src;\n\t\tthis._networkState = HTMLMediaElement.NETWORK_LOADING;\n\t\timg.decode()\n\t\t.then(() => {\n\t\t\tthis._networkState = HTMLMediaElement.NETWORK_IDLE;\n\t\t\tsuper.dispatchEvent(new Event('durationchange'));\n\t\t\tthis.texture = new THREE.Texture(img);\n\t\t\tthis._readyState =  HTMLMediaElement.HAVE_METADATA;\n\t\t\tsuper.dispatchEvent(new Event('loadedmetadata'));\n\t\t\tthis.texture.needsUpdate = true;\n\t\t\tthis._readyState = HTMLMediaElement.HAVE_CURRENT_DATA;\n\t\t\tsuper.dispatchEvent(new Event('loadeddata'));\n\t\t\tthis._readyState = HTMLMediaElement.HAVE_FUTURE_DATA;\n\t\t\tsuper.dispatchEvent(new Event('canplay'));\n\t\t\tthis._readyState = HTMLMediaElement.HAVE_ENOUGH_DATA\n\t\t\tsuper.dispatchEvent(new Event('canplaythrough'));\n\t\t})\n\t\t.catch((encodingError: DOMException) => {\n\t\t\tconsole.error(encodingError);\n\t\t\tthis._networkState = HTMLMediaElement.NETWORK_IDLE;\n\t\t\t(this.collection as ImageCollection).release(img);\n\t\t\tsuper.dispatchEvent(new Event('error'));\n\t\t});\n\t}\n\toverride pause(): void {\n\t\tif(this._paused) return;\n\t\tthis._paused = true;\n\t\tsuper.dispatchEvent(new Event('pause'));\n\t}\n\toverride async play(): Promise<void> {\n\t\tthis._paused = false;\n\t\tthis.#startTime = performance.now();\n\t\tsuper.dispatchEvent(new Event('play'));\n\t\tsuper.dispatchEvent(new Event('playing'));\n\t}\n\t// FIXME: delta for paused.\n\toverride animate(now: DOMHighResTimeStamp): void {\n\t\tif(this.ended) return;\n\t\tconst elapsed = this.paused ? 0 : (now - this.#startTime) / 1000;\n\t\tif(elapsed > this.duration) {\n\t\t\tthis.#ended();\n\t\t} else {\n\t\t\tthis.currentTime = elapsed;\n\t\t\tif(Math.floor(this.currentTime) > this.#lastTimeUpdate) {\n\t\t\t\tthis.#lastTimeUpdate = this.currentTime;\n\t\t\t\tsuper.dispatchEvent(new Event('timeupdate'));\n\t\t\t}\n\t\t}\n\t}\n\t#ended() {\n\t\tthis.currentTime = this.duration;\n\t\tthis._ended = true;\n\t\tsuper.dispatchEvent(new Event('ended'));\n\t}\n}\n\nexport class MediaVideo extends MediaAsset {\n\t#redispatchEvent: (event: string | Event) => any;\n\n        constructor(src: string, collection: VideoCollection) {\n\t\tsuper(src, collection);\n\t\tthis.#redispatchEvent = (event: string | Event) => {\n\t\t\tsuper.dispatchEvent(new Event(event instanceof Event ? event.type : event));\n\t\t};\n\t}\n\n\toverride close(): void {\n\t\tif(this.texture instanceof THREE.Texture) {\n\t\t\t(this.collection as VideoCollection).release(this.texture.image);\n\t\t\tthis.texture.dispose();\n\t\t}\n\t}\n\n\t// Per HTMLMediaElement.\n\toverride get src() { return super.src; }\n\toverride get currentSrc() { return this.texture?.image.currentSrc; }\n\toverride get duration() { return this.texture?.image.duration; }\n\toverride get ended() { return this.texture?.image.ended; }\n\toverride get error() { return this.texture?.image.error; }\n\toverride get networkState() { return this.texture?.image.networkState; }\n\toverride get paused() { return this.texture?.image.paused; }\n\toverride get readyState() { return this.texture?.image.readyState; }\n\t// Per HTMLVideoElement.\n\toverride get height() { return this.texture?.image.height; }\n\toverride get width() { return this.texture?.image.width; }\n\n\toverride load(): void {\n\t\tconst video = (this.collection as VideoCollection).acquire();\n\t\tvideo.onabort = this.#redispatchEvent;\n\t\tvideo.oncanplay = this.#redispatchEvent;\n\t\tvideo.oncanplaythrough = this.#redispatchEvent;\n\t\tvideo.ondurationchange = this.#redispatchEvent;\n\t\tvideo.onemptied = this.#redispatchEvent;\n\t\tvideo.onended = this.#redispatchEvent;\n\t\tvideo.onerror = this.#redispatchEvent;\n\t\tvideo.onloadeddata = this.#redispatchEvent;\n\t\tvideo.onloadedmetadata = this.#redispatchEvent;\n\t\tvideo.onloadstart = this.#redispatchEvent;\n\t\tvideo.onpause = this.#redispatchEvent;\n\t\tvideo.onplay = this.#redispatchEvent;\n\t\tvideo.onplaying = this.#redispatchEvent;\n\t\tvideo.onprogress = this.#redispatchEvent;\n\t\tvideo.onstalled = this.#redispatchEvent;\n\t\tvideo.onsuspend = this.#redispatchEvent;\n\t\tvideo.ontimeupdate = this.#redispatchEvent;\n\t\tvideo.onwaiting = this.#redispatchEvent;\n\t\tvideo.src = this.src;\n\t\ttry {\n\t\t\tvideo.load();\n\t\t} catch(encodingError) {\n\t\t\t(this.collection as VideoCollection).release(video);\n\t\t\tthrow encodingError;\n\t\t}\n\t\tthis.texture = new THREE.VideoTexture(video);\n\t\tthis.texture.needsUpdate = true;\n\t}\n\toverride pause(): void {\n\t\tthis.texture?.image.pause();\n\t}\n\toverride async play(): Promise<void> {\n\t\treturn await this.texture?.image.play();\n\t}\n\toverride animate(_now: DOMHighResTimeStamp): void {}\n}\n\nexport class MediaApp extends MediaAsset {\n\t#startTime = NaN;\n\t#lastTimeUpdate = 0;\n\n        constructor(src: string, collection: AppCollection) {\n\t\tsuper(src, collection);\n\t}\n\n\toverride close(): void {\n\t\tif(this.texture instanceof THREE.Texture) {\n\t\t\tthis.texture.dispose();\n\t\t}\n\t}\n\t// Per HTMLMediaElement.\n\toverride get src() { return super.src; }\n\toverride get currentSrc() { return super.currentSrc; }\n\toverride get duration() { return super.duration; }\n\toverride set duration(duration: number) { this._duration = duration; }\n\toverride get ended() { return super.ended; }\n\toverride get error() { return super.error; }\n\toverride get networkState() { return super.networkState; }\n\toverride get paused() { return super.paused; }\n\toverride get readyState() { return super.readyState; }\n\t// Per HTMLVideoElement.\n\toverride get height() { return this.texture?.image.height; }\n\toverride get width() { return this.texture?.image.width; }\n\n\toverride load(): void {\nconsole.log('load');\n\t\tsuper.dispatchEvent(new Event('loadstart'));\n\t\tthis._networkState = HTMLMediaElement.NETWORK_LOADING;\n\t\tconst collection = this.collection as AppCollection;\n\t\tconst fbo = collection.acquire();\n\t\tcollection.importModule(this.src)\n\t\t.then((App: any) => {\n\t\t\ttry {\n\t\t\t\tconst app = new App();\n\t\t\t\tapp.init(fbo, collection.renderer);\n\t\t\t\tfbo.texture.userData = app;\n\t\t\t\tthis._networkState = HTMLMediaElement.NETWORK_IDLE;\n\t\t\t\tsuper.dispatchEvent(new Event('durationchange'));\n\t\t\t\tthis.texture = fbo.texture;\n\t\t\t\tthis._readyState =  HTMLMediaElement.HAVE_METADATA;\n\t\t\t\tsuper.dispatchEvent(new Event('loadedmetadata'));\n\t\t\t\tthis._readyState = HTMLMediaElement.HAVE_CURRENT_DATA;\n\t\t\t\tsuper.dispatchEvent(new Event('loadeddata'));\n\t\t\t\tthis._readyState = HTMLMediaElement.HAVE_FUTURE_DATA;\n\t\t\t\tsuper.dispatchEvent(new Event('canplay'));\n\t\t\t\tthis._readyState = HTMLMediaElement.HAVE_ENOUGH_DATA\n\t\t\t\tsuper.dispatchEvent(new Event('canplaythrough'));\n\t\t\t} catch(initError: any) {\n\t\t\t\tconsole.error(initError);\n\t\t\t\tthis._networkState = HTMLMediaElement.NETWORK_IDLE;\n\t\t\t\tcollection.release(fbo);\n\t\t\t\tsuper.dispatchEvent(new Event('error'));\n\t\t\t}\n\t\t})\n\t\t.catch((moduleError: any) => {\n\t\t\tconsole.error(moduleError);\n\t\t\tthis._networkState = HTMLMediaElement.NETWORK_IDLE;\n\t\t\tcollection.release(fbo);\n\t\t\tsuper.dispatchEvent(new Event('error'));\n\t\t})\n\t}\n\toverride pause(): void {\n\t\tif(this._paused) return;\n\t\tthis._paused = true;\n\t\tsuper.dispatchEvent(new Event('pause'));\n\t}\n\toverride async play(): Promise<void> {\n\t\tthis._paused = false;\n\t\tthis.#startTime = performance.now();\n\t\tsuper.dispatchEvent(new Event('play'));\n\t\tsuper.dispatchEvent(new Event('playing'));\nconsole.log('duration', this.duration);\n\t}\n\toverride animate(now: DOMHighResTimeStamp): void {\n\t\tif(this.ended) return;\n\t\tconst elapsed = this.paused ? 0 : (now - this.#startTime) / 1000;\n\t\tif(elapsed > this.duration) {\n\t\t\tthis.#ended();\n\t\t} else {\n\t\t\tthis.texture?.userData.animate(now);\n\t\t\tthis.currentTime = elapsed;\n\t\t\tif(Math.floor(this.currentTime) > this.#lastTimeUpdate) {\n\t\t\t\tthis.#lastTimeUpdate = this.currentTime;\n\t\t\t\tsuper.dispatchEvent(new Event('timeupdate'));\n\t\t\t}\n\t\t}\n\t}\n\t#ended() {\nconsole.log('#ended');\n\t\tthis.currentTime = this.duration;\n\t\tthis._ended = true;\n\t\tif(this.texture instanceof THREE.Texture) {\n\t\t\tthis.texture.userData.close();\n\t\t\tthis.texture.userData = undefined;\n\t\t}\n\t\tsuper.dispatchEvent(new Event('ended'));\n\t}\n}\n\nabstract class MediaCollection {\n\tconstructor(readonly renderRoot: (HTMLElement | ShadowRoot)) {}\n\tabstract acquire(): HTMLImageElement | HTMLVideoElement | THREE.WebGLRenderTarget;\n\tabstract createMediaAsset(src: string): MediaImage | MediaVideo | MediaApp;\n\tabstract release(asset: HTMLImageElement | HTMLVideoElement | THREE.WebGLRenderTarget): void;\n\tabstract clear(): void;\n}\n\nclass ImageCollection extends MediaCollection {\n\t#images: HTMLImageElement[] = [];\n\tconstructor(renderRoot: (HTMLElement | ShadowRoot)) {\n\t\tsuper(renderRoot);\n\t}\n\t// TSC forces pop() to return undefined even if length is checked.\n\toverride acquire(): HTMLImageElement {\n\t\tlet img = this.#images.pop();\n\t\tif(typeof img === \"undefined\") {\n\t\t\timg = new Image();\n\t\t}\n\t\treturn img;\n\t}\n\toverride createMediaAsset(src: string): MediaImage {\n\t\treturn new MediaImage(src, this);\n\t}\n\toverride release(img: HTMLImageElement): void {\n\t\timg.src = '';\n\t\tthis.#images.push(img);\n\t}\n\toverride clear(): void {\n\t\tthis.#images = [];\n\t}\n}\n\nclass VideoCollection extends MediaCollection {\n\t#videos: HTMLVideoElement[] = [];\n\tconstructor(renderRoot: (HTMLElement | ShadowRoot)) {\n\t\tsuper(renderRoot);\n\t}\n\toverride acquire(): HTMLVideoElement {\n\t\tlet video = this.#videos.pop();\n\t\tif(typeof video === \"undefined\") {\n\t\t\tvideo = document.createElement('video');\n\t\t\tvideo.autoplay = false;\n\t\t\tvideo.crossOrigin = 'anonymous';\n\t\t\tvideo.muted = true;\n\t\t\tvideo.playsInline = true;\n\t\t\tvideo.preload = 'auto';  // The video will be played soon.\n\t\t\t// Video must be within DOM to playback.\n\t\t\tthis.renderRoot.appendChild(video);\n\t\t}\n\t\treturn video;\n\t}\n\toverride createMediaAsset(src: string): MediaVideo {\n\t\treturn new MediaVideo(src, this);\n\t}\n\toverride release(video: HTMLVideoElement): void {\n\t\tif(!video.paused) video.pause();\n\t\tthis.#videos.push(video);\n\t}\n\toverride clear(): void {\n\t\tfor(const video of this.#videos) {\n\t\t\tthis.renderRoot.removeChild(video);\n\t\t}\n\t\tthis.#videos = [];\n\t}\n}\n\nclass AppWrapper {\n\tconstructor(public readonly app: any) {}\n}\n\nclass AppCollection extends MediaCollection {\n\t#apps = new Map<string, AppWrapper>();\n\t#fbo: THREE.WebGLRenderTarget;\n\tconstructor(renderRoot: (HTMLElement | ShadowRoot), public readonly renderer: THREE.WebGLRenderer) {\n\t\tsuper(renderRoot);\n\t\t// this.#mesh width & height;\n\t\tconst width = 1024;  // * renderer.getPixelRatio();\n\t\tconst height = 1024;  // * renderer.getPixelRatio();\n\t\tthis.#fbo = new THREE.WebGLRenderTarget(width, height, {\n\t\t\tminFilter: THREE.NearestFilter,\n\t\t\tmagFilter: THREE.NearestFilter,\n\t\t\tdepthBuffer: false,\n\t\t\tstencilBuffer: false,\n\t\t});\n\t}\n\toverride acquire(): THREE.WebGLRenderTarget {\n\t\treturn this.#fbo;\n\t}\n\tasync importModule(src: string): Promise<any> {\n\t\tconst module = this.#apps.get(src);\n\t\tif(typeof module === 'undefined') {\n\t\t\tconst { default: App } = await import(src);\nconsole.log('Dynamically imported', App);\n\t\t\tthis.#apps.set(src, new AppWrapper(App));\n\t\t\treturn App;\n\t\t}\n\t\treturn module.app;\n\t}\n\toverride createMediaAsset(src: string): MediaApp {\n\t\treturn new MediaApp(src, this);\n\t}\n\toverride release(_fbo: THREE.WebGLRenderTarget): void {\n\t}\n\toverride clear(): void {\n\t\tthis.#fbo.dispose();\n\t}\n}\n\nexport class MediaSingleton {\n\t#collection: Map<string, MediaCollection>;\n\tconstructor(renderRoot: (HTMLElement | ShadowRoot), renderer: THREE.WebGLRenderer) {\n\t\t// TypeScript assumes iterator of first type.\n\t\tthis.#collection = new Map([\n\t\t\t['image', new ImageCollection(renderRoot) as MediaCollection],\n\t\t\t['video', new VideoCollection(renderRoot) as MediaCollection],\n\t\t\t['app', new AppCollection(renderRoot, renderer) as MediaCollection],\n\t\t]);\n\t}\n\t// decl: { type, src }\n\t// Returns: asset.\n\tcreateMediaAsset(decl: MediaDecl): MediaAsset {\n\t\tconst collection = this.#collection.get(decl.type);\n\t\tif(typeof collection === \"undefined\") {\n\t\t\tthrow new Error('Undefined collection.');\n\t\t}\n\t\treturn collection.createMediaAsset(decl.src);\n\t}\n\treleaseMedia(media: MediaAsset): void {\n\t\tmedia.close();\n\t}\n\tclear(): void {\n\t\tfor(const value of this.#collection.values()) {\n\t\t\tvalue.clear();\n\t\t}\n\t}\n}\n\n","// vim: tabstop=8 softtabstop=0 noexpandtab shiftwidth=8 nosmarttab\n// Simple image and video playlist with transition.\n\nimport { LitElement, css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport * as THREE from 'three';\nimport { MediaDecl, MediaAsset, MediaImage, MediaApp, MediaSingleton } from '../lib/media';\n\nwindow.requestIdleCallback = window.requestIdleCallback || function(callback) {\n\tconst start = Date.now();\n\treturn setTimeout(() => {\n\t\tcallback({\n\t\t\tdidTimeout: false,\n\t\t\ttimeRemaining: () => Math.max(0, 50 - (Date.now() - start)),\n\t\t});\n\t}, 1);\n};\nwindow.cancelIdleCallback = window.cancelIdleCallback || function(id) { clearTimeout(id); };\n\nconst shader = (strings: TemplateStringsArray, ...values: string[]) => {\n\tconst shaderText = values.reduce((acc, v, idx) => acc + v + strings[idx + 1], strings[0]);\n\treturn shaderText.replace(/^\\s+#/, '#');\n};\n\n@customElement('play-list')\nexport default class PlaylistElement extends LitElement {\n\n@property({ type: String, reflect: true })\n\tsrc = \"\";\n\n\t@property({ type: Array })\n\tviews: { left: number, top: number, x: number, y: number, width: number, height: number }[] = [];\n\n\t@property({ type: Number, reflect: true })\n\twidth = 0;\n\n\t@property({ type: Number, reflect: true })\n\theight = 0;\n\n\tstatic override styles = css`\n:host {\n\tdisplay: block;\n\tcontain: strict;\n\toverflow: clip;\n\tfont-size: 0;\n}\nsection {\n\tdisplay: none;\n\tcontain: strict;\n\toverflow: clip;\n}\n\t`;\n\n\tstatic vertexShader = shader`\n#version 300 es\nprecision mediump float;\nin vec2 uv;\nin vec4 position;\nuniform mat4 projectionMatrix;\nuniform mat4 modelViewMatrix;\nout vec2 vUv;\nvoid main() {\n\tvUv = uv;\n\tgl_Position = projectionMatrix * modelViewMatrix * position;\n}\n\t`;\n\n\tstatic fragmentShader = shader`\n#version 300 es\nprecision mediump float;\nuniform sampler2D map1;\nuniform sampler2D map2;\nuniform sampler2D displacement;\nuniform float pct;\nin vec2 vUv;\nout vec4 OutputColor;\n\n#define PI radians(180.0)\n\nvoid main() {\n\tvec4 displacementColor = texture(displacement, vUv);\n\tfloat effectFactor = 1.0;\n\tvec2 uv1 = vec2(vUv.x + pct * (displacementColor.r * effectFactor), vUv.y);\n\tvec2 uv2 = vec2(vUv.x - (1.0 - pct) * (displacementColor.r * effectFactor), vUv.y);\n\tOutputColor = mix(texture(map1, uv1), texture(map2, uv2), pct);\n}\n\t`;\n\n\toverride render() {\n\t\treturn html`\n<style>\n:host {\n\twidth: ${this.width}px;\n\theight: ${this.height}px;\n}\n</style>\n<slot></slot><section></section>`;\n\t}\n\n\t#map = \"\";\n\t#playTime = 5.0;\n\t#transitionTime = 1.0;\n\t#clock = new THREE.Clock();\n\t#scene = new THREE.Scene();\n\t#renderer: THREE.WebGLRenderer | undefined;\n\t#camera: THREE.OrthographicCamera | undefined;\n\t#raf_id: number | undefined;\n\t#ric_id: number | undefined;\n\t#playlist: MediaDecl[] = [];\n\t#index = 0;\n\t#previous_index: number | undefined;\n\t#state = PlaylistElement.STATE_INIT;\n\t#mesh: THREE.Mesh | undefined;\n\t#displacement = new THREE.Texture();\n\t#empty_texture = new THREE.Texture();\n\t#pct = 0;\n\t#transition_start = 0;\n\t#shader = new THREE.RawShaderMaterial({\n\t\tside: THREE.DoubleSide,\n\t\ttransparent: true,\n\t\tdepthTest: false,\n\t\tdepthWrite: false,\n\t\tuniforms: {\n\t\t\tmap1: { value: this.#empty_texture },\n\t\t\tmap2: { value: this.#empty_texture },\n\t\t\tdisplacement: { value: this.#displacement },\n\t\t\tpct: { value: this.#pct }\n\t\t},\n\t\tvertexShader: PlaylistElement.vertexShader,\n\t\tfragmentShader: PlaylistElement.fragmentShader,\n\t});;\n\t#media: (MediaAsset | undefined)[] = [];\n\t#media_singleton: MediaSingleton | undefined;\n\t#media1: MediaAsset | undefined;\n\t#media2: MediaAsset | undefined;\n\tstatic EMPTY_MEDIA_STREAM = new MediaStream();\n\n\tstatic get STATE_INIT() { return 0; }\n\tstatic get STATE_PLAYING() { return 1; }\n\tstatic get STATE_TRANSITION() { return 2; }\n\tstatic get STATE_NEXT() { return 3; }\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\toverride disconnectedCallback() {\n\t\tsuper.disconnectedCallback();\n\t\tconsole.log(\"disconnected\");\n\t\tthis.#media_singleton?.clear();\n\t}\n\n\tasync #reset() {\nconsole.log(\"#reset\");\n\t\tif(typeof this.#raf_id !== \"undefined\") {\n\t\t\twindow.cancelAnimationFrame(this.#raf_id);\n\t\t}\n\t\tif(typeof this.#ric_id !== \"undefined\") {\n\t\t\twindow.cancelIdleCallback(this.#ric_id);\n\t\t\tthis.#ric_id = undefined;\n\t\t}\n\t\tconst response = await fetch(this.src);\n\t\tconst json = await response.json();\n\t\tthis.#map = json.transition;\n\t\tawait this.#initPlaylist(json.playlist);\n\t\tawait this.#nextMedia();\n\t\tthis.#play();\n\t}\n\n\toverride firstUpdated(_changedProperties: Map<string, any>) {\nconsole.log(\"firstUpdated\");\n\t\tthis.#initRenderer();\n\t\tconst renderRoot = this.renderRoot.querySelector('section');\n\t\tif(renderRoot === null) {\n\t\t\tthrow new Error('Cannot find render root.');\n\t\t}\n\t\tif(typeof this.#renderer === \"undefined\") {\n\t\t\tthrow new Error('Undefined renderer.');\n\t\t}\n\t\tthis.#media_singleton = new MediaSingleton(renderRoot, this.#renderer);\n\t}\n\n\toverride updated(changedProperties: Map<string, any>) {\nconsole.log(\"updated\");\n\t\tif(changedProperties.has('src')) {\n\t\t\tthis.#reset();\n\t\t}\n\t}\n\n\t#initRenderer() {\n\t\tconst canvas = document.createElement('canvas');\n\t\tconst near = 0.1;\n\t\tconst far = 10000;\n\t\tconst context = canvas.getContext(\"webgl2\", {\n\t\t\talpha: true,\n\t\t\tantialias: true,  // Significant performance cost with WebGLRenderTarget.\n\t\t\tdesynchronized: false,\n\t\t\tpowerPreference: 'high-performance',\n\t\t});\n\t\tif(context === null) {\n\t\t\tthrow new Error('Failed to obtain canvas context.');\n\t\t}\n\t\tconst renderer = new THREE.WebGLRenderer({ canvas, context, });\n\t\trenderer.setPixelRatio(window.devicePixelRatio);\n//\t\trenderer.setPixelRatio(1);\n\t\trenderer.setSize(this.width, this.height);\n\t\tthis.#renderer = renderer;\n\t\tconst camera = new THREE.OrthographicCamera(this.width / -2, this.width / 2,\n\t\t\tthis.height / 2, this.height / -2, near, far);\n\t\tcamera.position.z = 2000;\n\t\tthis.#camera = camera;\n\t\tthis.renderRoot.appendChild(canvas);\n\t}\n\n\tasync #initDisplacementMap(displacement: THREE.Texture, map: string) {\n\t\tconst img = await new Promise<HTMLImageElement>((resolve, reject) => {\n\t\t\tconst img = new Image();\n\t\t\timg.src = map;\n\t\t\timg.decode()\n\t\t\t.then(() => {\n\t\t\t\tresolve(img);\n\t\t\t})\n\t\t\t.catch(encodingError => {\n\t\t\t\treject(encodingError);\n\t\t\t});\n\t\t});\nconsole.info(\"loaded displacement map\", img.src);\n\t\tdisplacement.image = img;\n\t\tdisplacement.needsUpdate = true;\n\t\tthis.#renderer?.initTexture(displacement);\n\t}\n\n\tasync #initNextMedia(index: number) {\n\t\tif(index > this.#media.length) {\n\t\t\tconsole.error(\"Invalid index\");\n\t\t\treturn;\n\t\t}\n\t\tconst decl = this.#playlist[index];\nconsole.info(`#${index}: fetching media`, decl);\n\t\tconst media = this.#media_singleton?.createMediaAsset(decl);\n\t\tif(typeof media === \"undefined\") {\n\t\t\tthrow new Error(`Failed to create media asset: ${decl}.`);\n\t\t}\n\t\tif(media instanceof MediaImage || media instanceof MediaApp) {\n\t\t\tmedia.duration = this.#playTime;\n\t\t}\n\t\t// FIXME: When it does not settle.\n\t\tawait new Promise(resolve => {\n\t\t\tmedia.addEventListener('canplay', resolve);\n\t\t\tmedia.load();\n\t\t});\nconsole.log(`#${index} is ready.`);\n\t\tif(media.texture instanceof THREE.Texture) {\n\t\t\t// Force GPU upload.\n\t\t\tthis.#renderer?.initTexture(media.texture);\n\t\t}\n\t\tthis.#media[index] = media;\n\t}\n\n\t#releaseMedia(index: number) {\n\t\tif(index > this.#media.length) {\n\t\t\tconsole.error(\"Invalid index\");\n\t\t\treturn;\n\t\t}\n\t\tconst media = this.#media[index];\n\t\tif(!(media instanceof MediaAsset)) {\n\t\t\tconsole.error(\"Invalid media\");\n\t\t\treturn;\n\t\t}\n\t\tthis.#media[index] = undefined;\n\t\tthis.#media_singleton?.releaseMedia(media);\n\t}\n\n\tasync #initPlaylist(playlist: any[]) {\n\t\tif(playlist.length === 0) {\n\t\t\tconsole.error(\"Invalid playlist\");\n\t\t\treturn;\n\t\t}\n\t\tconst promises = [];\n\t\tpromises.push(this.#initDisplacementMap(this.#displacement, this.#map));\n\t\tplaylist.forEach(_asset => {\n\t\t\tthis.#media.push(undefined);\n\t\t});\n\t\tthis.#playlist = playlist;\n\t\tpromises.push(this.#initNextMedia(this.#index));\n\t\tawait Promise.all(promises);\nconsole.info(\"all loaded ...\");\n\t}\n\n\tget #next_index() { return (this.#index + 1) % this.#media.length; }\n\n\tasync #nextMedia(): Promise<void> {\n\t\tconst previous_index = this.#previous_index;\n\t\tthis.#previous_index = this.#index;\n\t\tawait this.#paint(this.#index, this.#next_index);\n\t\tthis.#index = this.#next_index;\n\t\tthis.#state = PlaylistElement.STATE_PLAYING;\n\t\tif(typeof this.#media1 === 'undefined') {\n                        throw new Error('Media is undefined.');\n                }\nconsole.log('duration', this.#media1.duration);\nconsole.log('currentTime', this.#media1.currentTime);\n\t\tconst duration = this.#media1.duration - this.#media1.currentTime;\n\t\tthis.#transition_start = this.#clock.getElapsedTime() + duration - this.#transitionTime;\n\t\tconsole.info(`transition in ${this.#transition_start - this.#clock.getElapsedTime()}s`);\n\t\tconst load_next = async () => {\nconsole.log(`loading #${this.#index} ...`);\n\t\t\tawait this.#initNextMedia(this.#index);\n\t\t};\n\n\t\tif(typeof previous_index === \"number\") {\n\t\t\tthis.#ric_id = window.requestIdleCallback(() => {\nconsole.log(`releasing #${previous_index} ...`);\n\t\t\t\tthis.#releaseMedia(previous_index);\n\t\t\t\tthis.#ric_id = window.requestIdleCallback(load_next, { timeout: 100 });\n\t\t\t}, { timeout: 100 });\n\t\t} else {\n\t\t\tthis.#ric_id = window.requestIdleCallback(load_next, { timeout: 100 });\n\t\t}\n\t}\n\n\t#updateTransition(now: DOMHighResTimeStamp) {\n\t\tconst elapsed = this.#clock.elapsedTime - this.#transition_start;\n\t\tthis.#pct = Math.min(1.0, elapsed);\n\t\tthis.#shader.uniforms.pct.value = this.#pct;\n\t\tthis.#shader.uniformsNeedUpdate = true;\n\t\tif(this.#pct >= this.#transitionTime) {\n\t\t\tthis.#state = PlaylistElement.STATE_NEXT;\n\t\t}\n\t\tif(this.#media2?.animate instanceof Function) {\n\t\t\tthis.#media2.animate(now);\n\t\t}\n\t}\n\n       #update(now: DOMHighResTimeStamp) {\n\t\tif(this.#state === PlaylistElement.STATE_PLAYING) {\n\t\t\tif(this.#clock.elapsedTime > this.#transition_start) {\n\t\t\t\tthis.#state = PlaylistElement.STATE_TRANSITION;\n\t\t\t}\n\t\t}\n\t\tif(this.#media1?.animate instanceof Function) {\n\t\t\tthis.#media1.animate(now);\n\t\t}\n\t\tif(this.#state === PlaylistElement.STATE_TRANSITION) {\n\t\t\tthis.#updateTransition(now);\n\t\t}\n\t\tif(this.#state === PlaylistElement.STATE_NEXT) {\n\t\t\t(async () => {\n\t\t\t\tawait this.#nextMedia();\n\t\t\t})();\n\t\t}\n\t}\n\n\t#renderOneFrame(now: DOMHighResTimeStamp) {\n\t\tthis.#clock.getDelta();\n\t\tthis.#update(now);\n\t\tif(typeof this.#renderer !== \"undefined\"\n\t\t\t&& typeof this.#camera !== \"undefined\")\n\t\t{\n\t\t\tconst renderer = this.#renderer;\n\t\t\tconst camera = this.#camera;\n\t\t\trenderer.setScissorTest(true);\n\t\t\tfor(const view of this.views) {\n\t\t\t\trenderer.setViewport(view.x, view.y, view.width, view.height);\n\t\t\t\trenderer.setScissor(view.x, view.y, view.width, view.height);\n\t\t\t\tcamera.setViewOffset(this.width, this.height,\n\t\t\t\t\tview.left, view.top, view.width, view.height);\n\t\t\t\trenderer.render(this.#scene, camera);\n\t\t\t}\n\t\t\tthis.#renderer.setScissorTest(false);\n\t\t}\n\t\tthis.#play();\n\t}\n\n\tasync #paint(index: number, next_index: number): Promise<void> {\nconsole.log(`#paint(#${index}, #${next_index})`);\n\t\t// Stop any playing video.\n\t\tif(this.#media1 instanceof MediaAsset) {\n\t\t\tthis.#media1.pause();\n\t\t\tthis.#media1.currentTime = 0;\n\t\t}\n\t\tthis.#media1 = this.#media[index];\n\t\tif(typeof this.#media1 === \"undefined\"\n\t\t\t|| typeof this.#media1.texture === \"undefined\")\n\t\t{\n\t\t\tthrow new Error('Media is undefined.');\n\t\t}\n\t\tthis.#media2 = undefined;\n\t\t// Lazy create mesh.\n\t\tif(typeof this.#mesh === \"undefined\") {\n\t\t\tthis.#mesh = this.#createMesh({\n\t\t\t\ttexture: this.#media1.texture,\n\t\t\t\twidth: this.#media1.width,\n\t\t\t\theight: this.#media1.height,\n\t\t\t}, this.#displacement);\n\t\t\tthis.#scene.add(this.#mesh);\n\t\t\tconsole.info(\"Added new mesh\", this.#mesh);\n\t\t}\n\t\tawait this.#media1.play();\n\t\t// Prepare transition.\n\t\tthis.#shader.uniforms.map1.value = this.#media1.texture;\n\t\tthis.#shader.uniforms.map2.value = this.#empty_texture;\n\t\tthis.#shader.uniforms.pct.value = this.#pct = 0;\n\t\tthis.#shader.uniformsNeedUpdate = true;\n\t}\n\n\t#play(): void {\n\t\tthis.#raf_id = window.requestAnimationFrame(now => this.#renderOneFrame(now));\n\t}\n\n\t#createMesh(media: { texture: THREE.Texture, width: number, height: number }, displacement: THREE.Texture): THREE.Mesh {\n\t\tconst mesh = this.#meshFrom(this.#shader,\n\t\t\t0, media.width,\n\t\t\t0, media.height,\n\t\t\tmedia.width, media.height);\n\t\tthis.#shader.uniforms.displacement.value = displacement;\n\t\tconsole.log('Created new mesh', mesh);\n\t\treturn mesh;\n\t}\n\n\t#meshFrom(material: THREE.Material, left: number, right: number, top: number, bottom: number, width: number, height: number): THREE.Mesh {\n\t\tconst geometry = new THREE.PlaneGeometry(1, 1, 1, 1);\n\t\tgeometry.setAttribute(\"uv\", new THREE.BufferAttribute(new Float32Array([\n\t\t\tleft/width, 1-(top/height),\n\t\t\tright/width, 1-(top/height),\n\t\t\tleft/width, 1-(bottom/height),\n\t\t\tright/width, 1-(bottom/height),\n\t\t\t0, 0,\n\t\t\t0, 0\n\t\t]), 2));\n\t\tconst mesh = new THREE.Mesh(geometry, material);\n\t\tmesh.scale.set(width, height, 1);\n\t\treturn mesh;\n\t}\n}\n"],"names":[],"mappings":"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"}