{"version":3,"file":"bundle.mjs","sources":["../lib/media.ts","../lib/media-collection.ts","../lib/image-collection.ts","../lib/video-collection.ts","../lib/media-singleton.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        type: string,\n        src: string,\n}\n\nexport class Media {\n\tconstructor(public decl: MediaDecl, public texture: THREE.Texture) {}\n}\n\n","// vim: tabstop=8 softtabstop=0 noexpandtab shiftwidth=8 nosmarttab\n// Interface for representing a media asset.\n\nexport abstract class MediaCollection {\n\tconstructor(readonly renderRoot: (HTMLElement | ShadowRoot)) {}\n\tabstract acquire(): any;\n\tabstract load(src: string): Promise<HTMLImageElement | HTMLVideoElement>;\n\tabstract release(asset: HTMLImageElement | HTMLVideoElement): void;\n\tabstract clear(): void;\n}\n\n","// vim: tabstop=8 softtabstop=0 noexpandtab shiftwidth=8 nosmarttab\n// Media asset representing a static image.\n\nimport { MediaCollection } from './media-collection';\n\nexport class ImageCollection extends MediaCollection {\n        #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                let img = this.#images.pop();\n                if(typeof img === \"undefined\") {\n                        img = new Image();\n                }\n                return img;\n        }\n\toverride async load(src: string): Promise<HTMLImageElement> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst img = this.acquire();\n\t\t\timg.src = src;\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\tthis.release(img);\n\t\t\t\treject(encodingError);\n\t\t\t});\n\t\t});\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\n","// vim: tabstop=8 softtabstop=0 noexpandtab shiftwidth=8 nosmarttab\n// Media asset representing a video stream.\n\nimport { MediaCollection } from './media-collection';\n\nexport class 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 = 'metadata';\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\t// HAVE_METADATA -> loadedmetadata event,\n\t// HAVE_CURRENT_DATA -> loadeddata event,\n\t// HAVE_FUTURE_DATA -> canplay event,\n\t// HAVE_ENOUGH_DATA -> canplaythrough event.\n\toverride async load(src: string): Promise<HTMLVideoElement> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst video = this.acquire();\n\t\t\tvideo.src = src;\n\t\t\ttry {\n\t\t\t\tvideo.load();\n\t\t\t} catch(encodingError) {\n\t\t\t\tthis.release(video);\n\t\t\t\treject(encodingError);\n\t\t\t}\n\t\t\tif(video.readyState < HTMLMediaElement.HAVE_ENOUGH_DATA) {\n\t\t\t\tvideo.addEventListener(\"loadedmetadata\", _event => {\nconsole.log('loadedmetadata');\n\t\t\t\t}, { once: true });\n\t\t\t\tvideo.addEventListener(\"loadeddata\", _event => {\nconsole.log('loadeddata');\n\t\t\t\t\tresolve(video);  // Sufficient to apply transition.\n\t\t\t\t}, { once: true });\n\t\t\t\tvideo.addEventListener(\"canplay\", _event => {\nconsole.log('canplay');\n\t\t\t\t}, { once: true });\n\t\t\t\tvideo.addEventListener(\"canplaythrough\", _event => {\nconsole.log('canplaythrough');\n\t\t\t\t}, { once: true });\n\t\t\t} else {\nconsole.log('loaded');\n\t\t\t\tresolve(video);\n\t\t\t}\n\t\t});\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\n","// vim: tabstop=8 softtabstop=0 noexpandtab shiftwidth=8 nosmarttab\n// Interface for acquiring and releasing media assets.\n\nimport * as THREE from 'three';\nimport { MediaDecl, Media } from './media';\nimport { MediaCollection } from './media-collection';\nimport { ImageCollection } from './image-collection';\nimport { VideoCollection } from './video-collection';\n\nexport class MediaSingleton {\n\t#collection: Map<string, MediaCollection>;\n\tconstructor(renderRoot: (HTMLElement | ShadowRoot)) {\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]);\n\t}\n\t// decl: { type, src }\n\t// Returns: asset.\n\tasync fetchMedia(decl: MediaDecl) {\n\t\tconst el = await this.#collection.get(decl.type)?.load(decl.src);\n\t\tconst texture = (el instanceof HTMLVideoElement)\n\t\t\t? new THREE.VideoTexture(el)\n\t\t\t: new THREE.Texture(el);\n\t\ttexture.needsUpdate = true;\n\t\treturn new Media(decl, texture);\n\t}\n\treleaseMedia(media: Media): void {\n\t\tthis.#collection.get(media.decl.type)?.release(media.texture.image);\n\t\tmedia.texture.dispose();\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, Media } from '../lib/media';\nimport { MediaSingleton } from '../lib/media-singleton';\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\t@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: (Media | undefined)[] = [];\n\t#media_singleton: MediaSingleton | undefined;\n\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.#initMedia(json.playlist);\n\t\tthis.#loaded();\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\tthis.#media_singleton = new MediaSingleton(renderRoot);\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,\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\tif(typeof renderer === \"undefined\") {\n\t\t\tthrow new Error('Unavailable to acquire renderer.');\n\t\t}\n\t\trenderer.setPixelRatio(window.devicePixelRatio);\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 = await this.#media_singleton?.fetchMedia(decl);\n\t\tif(typeof media === 'undefined') {\n\t\t\tthrow new Error('Undefined media.');\n\t\t}\nconsole.log(`#${index} is ready.`);\n\t\t// Force GPU upload.\n\t\tthis.#renderer?.initTexture(media.texture);\n\t\tthis.#media[index] = media;\n\t}\n\n\t#releaseMedia(index: number): void {\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 Media)) {\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 #initMedia(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\t#loaded(): void {\n\t\tconst previous_index = this.#previous_index;\n\t\tthis.#previous_index = this.#index;\n\t\tthis.#paint(this.#index, this.#next_index);\n\t\tthis.#index = this.#next_index;\n\t\tthis.#state = PlaylistElement.STATE_PLAYING;\n\t\tlet duration = this.#playTime;\n\t\tconst texture = this.#shader.uniforms.map1.value;\n\t\tif(typeof texture.image.duration === \"number\") {\n\t\t\tduration = Math.max(texture.image.duration - texture.image.currentTime, duration);\n\t\t}\n\t\tthis.#transition_start = this.#clock.getElapsedTime() + duration - this.#transitionTime;\n//\t\tconsole.info(\"transition in\", this.#transition_start - this.#clock.getElapsedTime());\n\t\tconst load_next = async () => {\nconsole.log(`loading #${this.#index} ...`);\n\t\t\tawait this.#initNextMedia(this.#index);\n\t\t\tthis.#shader.uniforms.map2.value = this.#media[this.#index]?.texture;\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(_delta: number) {\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}\n\n\t#update(delta: number) {\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.#state === PlaylistElement.STATE_TRANSITION) {\n\t\t\tthis.#updateTransition(delta);\n\t\t}\n\t\tif(this.#state === PlaylistElement.STATE_NEXT) {\n\t\t\tthis.#loaded();\n\t\t}\n\t}\n\n\t#renderOneFrame(_now: DOMHighResTimeStamp) {\n\t\tconst delta = this.#clock.getDelta();\n\t\tthis.#update(delta);\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.setRenderTarget(null);\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.setScissorTest(true);\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}\n\t\tthis.#play();\n\t}\n\n\t#paint(index: number, next_index: number) {\nconsole.log(`#paint(#${index}, #${next_index})`);\n\t\t// Stop any playing video.\n\t\tconst previous_texture = this.#shader.uniforms.map1.value;\n\t\tif(typeof previous_texture?.image !== \"undefined\") {\n\t\t\tconst previous_media = previous_texture.image;\n\t\t\tif(previous_media instanceof HTMLVideoElement) {\n\t\t\t\tprevious_media.pause();\n\t\t\t\tprevious_media.currentTime = 0;\n\t\t\t}\n\t\t}\n\t\tconst current_texture = this.#media[index]?.texture;\n\t\tif(typeof current_texture === \"undefined\") {\n\t\t\treturn;\n\t\t}\n\t\tconst current_media = current_texture.image;\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: current_texture,\n\t\t\t\twidth: current_media.width,\n\t\t\t\theight: current_media.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\tif(current_media instanceof HTMLVideoElement) {\n\t\t\tcurrent_media.play();\n\t\t}\n\t\t// Prepare transition.\n\t\tthis.#shader.uniforms.map1.value = current_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\twindow.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\n"],"names":[],"mappings":"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"}