@pacem/pacem-3d 1.0.4 → 1.0.5-bartels
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/browser/pacem-3d.js +508 -508
- package/dist/browser/pacem-3d.js.map +1 -1
- package/dist/browser/pacem-3d.min.js +2 -2
- package/dist/bundle/pacem-3d.min.mjs +18 -18
- package/dist/bundle/pacem-3d.mjs +523 -525
- package/dist/bundle/pacem-3d.mjs.map +4 -4
- package/dist/esm/constants.js +1 -1
- package/dist/esm/converters.js +1 -1
- package/dist/esm/decorators.js +1 -1
- package/dist/esm/detector.js +1 -1
- package/dist/esm/geometry.js +1 -1
- package/dist/esm/index-components-drawing3d.js +1 -1
- package/dist/esm/index-components.js +3 -2
- package/dist/esm/index-drawing3d.js +1 -1
- package/dist/esm/index-iife.js +1 -1
- package/dist/esm/index-root.js +3 -2
- package/dist/esm/index.js +3 -2
- package/dist/esm/stage.js +1 -1
- package/dist/esm/types.js +1 -1
- package/package.json +1 -1
- package/typings/index.d.ts +5 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pacem-3d.js","sources":["../esm/converters.js","../esm/constants.js","../esm/stage.js","../esm/types.js","../esm/detector.js","../esm/materials/material.js","../esm/materials/basic.js","../esm/materials/lambert.js","../esm/materials/line.js","../esm/materials/phong.js","../esm/materials/standard.js","../esm/primitives/primitive.js","../esm/decorators.js","../esm/geometry.js","../esm/primitives/box.js","../esm/primitives/cone.js","../esm/primitives/cylinder.js","../esm/primitives/line.js","../esm/primitives/plane.js","../esm/primitives/polyhedra.js","../esm/primitives/sphere.js","../esm/primitives/torus.js","../esm/adapters/shared.js","../esm/adapters/threejsadapter.js","../esm/adapters/webgpu/constants.js","../esm/adapters/webgpu/abstractions.js","../esm/adapters/webgpu/buffers.js","../esm/adapters/webgpu/wgsl/basic-material-fragment.js","../esm/adapters/webgpu/wgsl/line-material-fragment.js","../esm/adapters/webgpu/materials.js","../esm/adapters/webgpu/wgsl/shared.js","../esm/adapters/webgpu/wgsl/mesh-vertex.js","../esm/adapters/webgpu/wgsl/line-vertex.js","../esm/adapters/webgpu/wgsl/object-picking-fragment.js","../esm/adapters/webgpu/wgsl/texture-fragment.js","../esm/adapters/webgpu/wgsl/directional-light-fragment.js","../esm/adapters/webgpu/wgsl/omni-light-fragment.js","../esm/adapters/webgpu/wgsl/ambient-light-fragment.js","../esm/adapters/webgpu/cameras.js","../esm/adapters/webgpu/renderablebuffer.js","../esm/adapters/webgpu/pipelinefactory.js","../esm/adapters/webgpu/raycaster.js","../esm/adapters/webgpu/renderer.js","../esm/adapters/webgpu/webgpuadapter.js","../esm/adapters/webgpu/behaviors/orbit-camera.js","../esm/parsers/parser.js","../esm/index-iife.js"],"sourcesContent":["import { Utils } from '@pacem/pacem-core';\nimport { parseAsNumericalArray } from '@pacem/pacem-foundation';\nimport { Geometry } from '@pacem/pacem-numerical';\n//namespace Pacem.Drawing3D {\n/** Converts a `\"x y z\"` attribute string to/from a {@link Vector3D}. */\nexport const Point3DConverter = {\n convert: (attr) => Geometry.LinearAlgebra.Vector3D.parse(attr),\n convertBack: (prop) => `${prop.x || 0} ${prop.y || 0} ${prop.z || 0}`\n};\n/** Converts a `\"x y z\"` (3 components) or `\"n\"` (single uniform component, broadcast to all 3 axes) attribute string to/from a {@link Vector3D}. Used e.g. for `scale`/`offset`. */\nexport const Point3DOrNumberConverter = {\n convert: (attr) => {\n const arr = parseAsNumericalArray(attr);\n const throwErr = () => { throw new Error(`Cannot parse \"${attr}\" as a valid Vector3D.`); };\n if (Utils.isNullOrEmpty(arr)) {\n throwErr();\n }\n if (arr.length === 3) {\n return Geometry.LinearAlgebra.Vector3D.from(...arr);\n }\n if (arr.length === 1) {\n const v = arr[0];\n return Geometry.LinearAlgebra.Vector3D.from(v, v, v);\n }\n throwErr();\n },\n convertBack: (prop) => `${prop.x || 0} ${prop.y || 0} ${prop.z || 0}`\n};\n/** Converts a `\"x y z w\"` attribute string to/from a {@link Quaternion}. Used e.g. for `rotate`. */\nexport const QuaternionConverter = {\n convert: (attr) => Geometry.LinearAlgebra.Quaternion.parse(attr),\n convertBack: (prop) => `${prop.x || 0} ${prop.y || 0} ${prop.z || 0} ${prop.w || 0}`\n};\n/** Converts an attribute string to/from either a `boolean` (`\"true\"`/`\"false\"`) or a `number`. */\nexport const BooleanOrNumberConverter = {\n convert: (attr) => {\n if (attr === 'true')\n return true;\n if (attr === 'false')\n return false;\n return parseAsNumericalArray(attr)[0];\n },\n convertBack: (prop) => prop.toString()\n};\n","/** Middle segment shared by every custom element tag name in this package (e.g. `pacem-3d`, `pacem-3d-mesh`). */\nexport const TAG_MIDDLE_NAME = \"3d\";\n/** Conversion factor from degrees to radians. */\nexport const DEG2RAD = Math.PI / 180;\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Defaults, ViewChild, Watch, PropertyConverters, Utils, Components, PropertyChangeEventName, Logging, Animations, UI } from '@pacem/pacem-core';\nimport { RenderableEvent, DragEvent, RenderableElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing3D {\n/**\n * `<pacem-3d>`: the root 3d stage element. Hosts the {@link RenderableElement} scene graph (groups, meshes, lights,\n * cameras) declared as children or provided via {@link datasource}, delegates all actual scene-building/rendering/\n * hit-testing to the pluggable {@link adapter} ({@link Pacem3DAdapterElement}), and dispatches pointer interaction\n * events ({@link RenderableEvent}/{@link DragEvent}) for the items under the cursor.\n */\nlet Pacem3DElement = class Pacem3DElement extends Components.PacemItemsContainerElement {\n constructor() {\n super(...arguments);\n this._itemPropertyChangeHandler = (evt) => {\n const renderable = evt.target;\n // clear flags\n // TODO: be more precise\n this.adapter &&\n this.adapter.updateItem(this, renderable);\n renderable.flags.splice(0);\n };\n this._clickHandler = (evt) => {\n let me = this;\n if (!me.interactive || Utils.isNull(me._lastHitResult)) {\n return;\n }\n const type = evt.type.replace(/^mouse/, '');\n const hit = me._lastHitResult, object = hit.object, point = hit.point;\n this._itemDispatch(object, point, type, evt);\n };\n this._hitTestCallback = (result, evt) => {\n const me = this;\n // TODO: handle dragging\n if (result != me._lastHitResult) {\n if (result?.object != me._lastHitResult?.object) {\n const obj = result?.object, last = me._lastHitResult?.object, pt = result?.point;\n if (!Utils.isNull(last)) {\n this._itemDispatch(last, pt, 'out', evt);\n }\n if (!Utils.isNull(obj)) {\n this._itemDispatch(obj, pt, 'over', evt);\n }\n }\n me._lastHitResult = result;\n }\n };\n this._moveHandler = (evt) => {\n let me = this;\n if (!me.adapter || !me.interactive) {\n return;\n }\n const rect = me._resizer.currentSize;\n const callback = (r) => me._hitTestCallback(r, evt);\n const pixel = evt.type === 'mousemove' ? { x: evt.pageX - rect.left, y: evt.pageY - rect.top } : { x: -1, y: -1 };\n me.adapter.raycast(this, pixel, rect, callback);\n };\n this._resizeHandler = (evt) => {\n const oldSize = this.#size;\n const size = evt.detail;\n if (!Utils.isNull(oldSize) && oldSize.height === size.height && oldSize.width === size.width) {\n return;\n }\n this.#size = size;\n const adapter = this.adapter;\n if (!Utils.isNull(adapter)) {\n this.adapter.invalidateSize(this, size);\n this.dispatchEvent(new Components.ResizeEvent(size));\n }\n };\n //#endregion\n }\n validate(item) {\n return item instanceof RenderableElement;\n }\n /** @readonly Gets the DOM element the scene is mounted into. */\n get stage() {\n return this._container;\n }\n /** @readonly Gets the technology-dependent native scene instance, as reported by the active {@link adapter}. */\n get scene() {\n return this.adapter && this.adapter.getScene(this);\n }\n register(item) {\n const retval = super.register(item);\n if (retval) {\n this._add(item);\n item.addEventListener(PropertyChangeEventName, this._itemPropertyChangeHandler, false);\n }\n return retval;\n }\n unregister(item) {\n const retval = super.unregister(item);\n if (retval) {\n item.removeEventListener(PropertyChangeEventName, this._itemPropertyChangeHandler, false);\n this._erase(item);\n }\n return retval;\n }\n _refreshDatasource(val = this.datasource) {\n this.adapter?.updateItem(this, undefined);\n }\n _buildUpDatasourceFromDOM(val = this.items) {\n if (!Utils.isNullOrEmpty(val)) {\n this.datasource = val.slice();\n }\n }\n _add(item) {\n this.adapter &&\n this.adapter.addItem(this, item);\n }\n _erase(item) {\n this.adapter &&\n this.adapter.removeItem(this, item);\n }\n _initializeAdapter(old, val) {\n return new Promise((resolve, reject) => {\n const items = this.datasource || [];\n if (!Utils.isNull(old)) {\n items.forEach(i => old.removeItem(this, i));\n }\n if (!Utils.isNull(this._container) && !Utils.isNull(val)) {\n val.initialize(this).then(_ => {\n (items || []).forEach(i => this._add(i));\n resolve();\n }, e => {\n this.log(Logging.LogLevel.Error, e?.toString());\n reject(e);\n });\n }\n else {\n resolve();\n }\n });\n }\n //#region lifecycle\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (first) {\n return;\n }\n switch (name) {\n case 'adapter':\n this._initializeAdapter(old, val);\n break;\n case 'items':\n this._buildUpDatasourceFromDOM(val);\n break;\n case 'transparent':\n this.adapter?.invalidateSize(this, this.size);\n break;\n case 'datasource':\n this._refreshDatasource(val);\n case 'disabled':\n case 'background':\n this.render();\n break;\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n // stage\n const container = this._container;\n // resizer\n const resizer = this._resizer;\n resizer.addEventListener('resize', this._resizeHandler, false);\n resizer.target = container;\n // adapter\n this._initializeAdapter(null, this.adapter).then(_ => {\n container.addEventListener('mousemove', this._moveHandler, false);\n container.addEventListener('click', this._clickHandler, false);\n container.addEventListener('mouseup', this._clickHandler, false);\n container.addEventListener('mousedown', this._clickHandler, false);\n container.addEventListener('mouseout', this._moveHandler, false);\n this._buildUpDatasourceFromDOM();\n this.render();\n });\n }\n _itemDispatch(target, point, type, offset) {\n if (!Utils.isNull(target)) {\n var dragArgs, originalEvent, evtType;\n if (offset instanceof Event) {\n originalEvent = offset;\n }\n else {\n dragArgs = { item: target, offset: offset };\n }\n if (typeof type === 'string') {\n evtType = type;\n }\n else {\n evtType = type.type;\n originalEvent = type.originalEvent;\n }\n const m = point;\n const evt = () => offset instanceof Event ? new RenderableEvent(evtType, target, originalEvent, m) : new DragEvent(evtType, { detail: dragArgs, cancelable: evtType === UI.DragDropEventType.Init || evtType === UI.DragDropEventType.Drag }, originalEvent, m), itemevt = offset instanceof Event ? new RenderableEvent('item' + evtType, target, originalEvent, m) : new DragEvent('item' + evtType, { detail: dragArgs, cancelable: evtType === UI.DragDropEventType.Init || evtType === UI.DragDropEventType.Drag }, originalEvent, m);\n var prevent = false;\n if (target instanceof EventTarget) {\n const evnt = evt();\n target.dispatchEvent(evnt);\n prevent = evnt.defaultPrevented;\n }\n target.stage.dispatchEvent(itemevt);\n // was the event (in one of its forms) rejected?\n return prevent || itemevt.defaultPrevented;\n }\n return false;\n }\n disconnectedCallback() {\n this.#handle?.stop();\n const resizer = this._resizer, container = this._container;\n if (!Utils.isNull(container)) {\n container.removeEventListener('click', this._clickHandler, false);\n container.removeEventListener('mouseup', this._clickHandler, false);\n container.removeEventListener('mousedown', this._clickHandler, false);\n container.removeEventListener('mousemove', this._moveHandler, false);\n container.removeEventListener('mouseout', this._moveHandler, false);\n }\n if (!Utils.isNull(resizer)) {\n resizer.removeEventListener('resize', this._resizeHandler, false);\n }\n super.disconnectedCallback();\n }\n #size;\n /** @readonly Gets the current viewport size, as last reported by the internal resize observer. */\n get size() {\n return this.#size;\n }\n /** Renders the whole scene through the active {@link adapter}, or just updates the given `item` if provided. */\n render(item, deepUpdate, now = performance.now()) {\n if (!Utils.isNull(item)) {\n const adapter = this.adapter;\n if (!Utils.isNull(adapter)) {\n adapter.updateItem(this, item);\n }\n }\n else {\n this.#handle?.stop();\n this.#handle = Animations.Timer.run(_ => this._doRender());\n //this._doRender();\n }\n }\n #handle;\n _doRender() {\n if (!this.disabled && !Utils.isNull(this.adapter)) {\n const scene = this.adapter.getScene(this);\n let cancelable = new CustomEvent('prerender', { detail: { scene }, cancelable: true });\n this.dispatchEvent(cancelable);\n if (!cancelable.defaultPrevented) {\n this.adapter.render(this);\n this.dispatchEvent(new CustomEvent('render', { detail: { scene } }));\n }\n }\n }\n};\n__decorate([\n ViewChild(`.${PCSS}-3d`)\n], Pacem3DElement.prototype, \"_container\", void 0);\n__decorate([\n ViewChild(P + '-resize')\n], Pacem3DElement.prototype, \"_resizer\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], Pacem3DElement.prototype, \"interactive\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], Pacem3DElement.prototype, \"transparent\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DElement.prototype, \"background\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Element })\n], Pacem3DElement.prototype, \"adapter\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem3DElement.prototype, \"datasource\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], Pacem3DElement.prototype, \"orbit\", void 0);\nPacem3DElement = __decorate([\n CustomElement({\n tagName: P + '-' + TAG_MIDDLE_NAME, shadow: Defaults.USE_SHADOW_ROOT, template: `<${P}-resize watch-position=\"true\"></${P}-resize><div class=\"${PCSS}-3d\"></div><${P}-content></${P}-content>`\n })\n], Pacem3DElement);\nexport { Pacem3DElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Watch, PropertyConverters, CustomElement, PacemEventTarget, PropertyChangeEvent, CustomElementUtils, CustomUIEvent, P, Utils, Components } from '@pacem/pacem-core';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { Point3DConverter, Point3DOrNumberConverter, QuaternionConverter } from './converters';\nimport { Pacem3DElement } from './stage';\nimport { TAG_MIDDLE_NAME } from './constants';\n/** Type guard checking whether `object` implements the {@link Stage} contract. */\nexport function isStage(object) {\n return !Utils.isNull(object) && 'render' in object && typeof object['render'] === 'function';\n}\n/** Type guard checking whether `object` implements the {@link Renderable} contract (i.e. it is attached to a valid {@link Stage}). */\nexport function isRenderable(object) {\n return isStage(object?.stage);\n}\n/** Type guard checking whether `object` implements the {@link Ui3DObject} contract (i.e. it exposes a {@link Ui3DObject.transformMatrix}). */\nexport function isUi3DObject(object) {\n return 'transformMatrix' in object && isRenderable(object);\n}\n/** Type guard checking whether `object` implements the {@link Camera} contract. */\nexport function isCamera(object) {\n return 'type' in object && 'up' in object && 'lookAt' in object && isRenderable(object);\n}\n/** Type guard checking whether `object` is a {@link PerspectiveCamera}. */\nexport function isPerspectiveCamera(object) {\n return isCamera(object) && 'type' in object && object.type === 'perspective';\n}\n/** Type guard checking whether `object` is an {@link OrthographicCamera}. */\nexport function isOrthographicCamera(object) {\n return isCamera(object) && 'type' in object && object.type === 'orthographic';\n}\n/** Type guard checking whether `object` implements the {@link Light} contract. */\nexport function isLight(object) {\n return 'type' in object && (object.type === 'ambient' || object.type === 'omni' || object.type === 'direction' || object.type == 'spot') && isRenderable(object);\n}\n/** Type guard checking whether `object` implements the {@link Mesh} contract. */\nexport function isMesh(object) {\n return 'geometry' in object && isUi3DObject(object);\n}\n/** Type guard checking whether `object` implements the {@link NodeGeometry} contract. */\nexport function isGeometry(object) {\n return 'positions' in object && Utils.isArray(object.positions);\n}\n/** Type guard checking whether `object` implements the {@link MeshGeometry} contract (a {@link NodeGeometry} with triangle indices/normals/UVs). */\nexport function isMeshGeometry(object) {\n return ('triangleIndices' in object && Utils.isArray(object.triangleIndices)\n || 'normals' in object && Utils.isArray(object.normals)\n || 'textureCoordinates' in object && Utils.isArray(object.textureCoordinates)) && isGeometry(object);\n}\n/** Type guard checking whether `object` implements the {@link Group} contract. */\nexport function isGroup(object) {\n return 'childRenderables' in object && Utils.isArray(object['childRenderables']) && isUi3DObject(object);\n}\n/**\n * Sets the normals to a mesh geometry by computing each face's unit orthogonal vector.\n * @param geometry\n */\nexport function computeSharpVertexNormals(geometry) {\n const normals = [];\n if (!Utils.isNullOrEmpty(geometry)) {\n const indices = geometry.triangleIndices;\n if (indices.length % 3 !== 0) {\n throw new RangeError(`Invalid mesh geometry: ${indices.length} is not multiple of 3.`);\n }\n for (let j = 2; j < indices.length; j += 3) {\n const u = indices[j - 2], v = indices[j - 1], w = indices[j];\n const a = geometry.positions[u], b = geometry.positions[v], c = geometry.positions[w];\n const normal = computePlaneNormal(a, b, c);\n normals.push(normal, normal, normal);\n }\n }\n geometry.normals = normals;\n}\n/**\n * Computes the unit vector orthogonal to the plane identified by 3 points.\n * @param a\n * @param b\n * @param c\n */\nexport function computePlaneNormal(a, b, c) {\n // TODO: check input correctness (distinct points)\n const vAB = Geometry.LinearAlgebra.Vector3D.subtract(a, b), vAC = Geometry.LinearAlgebra.Vector3D.subtract(a, c);\n const orthogonal = Geometry.LinearAlgebra.Vector3D.cross(vAB, vAC);\n return Geometry.LinearAlgebra.Vector3D.unit(orthogonal);\n}\n/** Base class for the custom UI events dispatched by 3d elements/the stage, carrying the source pointer's projected {@link point} in 3d world space alongside the original DOM event. */\nexport class UI3DEvent extends CustomUIEvent {\n constructor(type, eventInit, originalEvent, point) {\n super(type, eventInit, originalEvent);\n this.#point = point;\n }\n #point;\n /** Gets the event's source position in 3d coordinates. */\n get point() {\n return this.#point;\n }\n}\n/** Event dispatched while a {@link Renderable} item is being dragged (`itemdragstart`/`itemdrag`/`itemdragend`-like events), carrying a {@link DragEventArgs} payload. */\nexport class DragEvent extends UI3DEvent {\n}\n/** Event dispatched for pointer interactions (click/over/out/down/up) with a {@link Renderable} item, carrying the item itself as its `detail`. */\nexport class RenderableEvent extends UI3DEvent {\n constructor(type, args, originalEvent, p) {\n super(type, { detail: args, bubbles: true, cancelable: true }, originalEvent, p);\n }\n}\n/** Identifies which aspect of a {@link Renderable} changed since the last render, so the adapter can update only the stale part of the underlying native object. */\nexport var StalePropertyFlag;\n(function (StalePropertyFlag) {\n /** The object's {@link Renderable.position} changed. */\n StalePropertyFlag[\"Position\"] = \"position\";\n /** The object's {@link Ui3DObject.transformMatrix} (rotate/scale/offset) changed. */\n StalePropertyFlag[\"Transform\"] = \"transform\";\n /** The mesh/line {@link NodeGeometry} changed. */\n StalePropertyFlag[\"Geometry\"] = \"geometry\";\n /** The group's child collection changed. */\n StalePropertyFlag[\"Children\"] = \"children\";\n /** The mesh's {@link Material}/{@link Mesh.backMaterial} changed. */\n StalePropertyFlag[\"Material\"] = \"material\";\n /** A {@link Light}-specific property (color, intensity, target, ...) changed. */\n StalePropertyFlag[\"Light\"] = \"light\";\n /** A {@link Camera}-specific property (near, far, fov, frustum, ...) changed. */\n StalePropertyFlag[\"Camera\"] = \"camera\";\n /** The object's {@link Renderable.hide} visibility changed. */\n StalePropertyFlag[\"Visibility\"] = \"visibility\";\n})(StalePropertyFlag || (StalePropertyFlag = {}));\n/** Type guard checking whether `object` implements the {@link Interaction} contract. */\nexport function isInteraction(object) {\n return typeof object === 'object' && 'time' in object && typeof object['time'] === 'number';\n}\n//namespace Pacem.Components.Drawing3D {\nconst Constants = {\n OBJECT_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-object',\n LIGHT_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-light',\n PERSPECTIVE_CAMERA_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-perspective-camera',\n ORTHO_CAMERA_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-orthographic-camera',\n LINE_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-line',\n MESH_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-mesh',\n GROUP_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-group',\n DEFAULT_COORDS: { x: 0, y: 0, z: 0 }\n};\n/**\n * Abstract base of every scene-graph custom element usable inside a {@link Pacem3DElement} stage (groups, meshes,\n * native objects, lights, cameras). Implements {@link Renderable}, wires the element into the ancestor stage/parent\n * chain, and tracks which aspects of the object are stale (via {@link StalePropertyFlag}) so the active\n * {@link Pacem3DAdapterElement} can update only what changed on the next render.\n */\nexport class RenderableElement extends Components.PacemCrossItemsContainerElement {\n constructor() {\n super(...arguments);\n /** Gets or sets the element's position, in 3d world (or parent-local) space. */\n this.position = Constants.DEFAULT_COORDS;\n this.#staleFlags = [];\n }\n /** When implemented in a derived class (e.g. {@link Pacem3DGroupElement}), determines whether `_` may be nested under this element. Denies any child by default. */\n validate(_) {\n // by default no children allowed (Group will except)\n return false;\n }\n findContainer() {\n // override\n return this.parent || this.stage;\n }\n /** @readonly Gets the ancestor {@link Pacem3DElement} stage this element belongs to. */\n get stage() {\n return this['_scene'] = this['_scene'] || CustomElementUtils.findAncestorOfType(this, Pacem3DElement);\n }\n /** @readonly Gets the closest ancestor {@link RenderableElement} (e.g. the containing group), if any. */\n get parent() {\n return this['_drawableParent'] = this['_drawableParent'] || CustomElementUtils.findAncestor(this, i => i instanceof RenderableElement);\n }\n disconnectedCallback() {\n delete this['_scene'];\n delete this['_drawableParent'];\n super.disconnectedCallback();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'hide':\n this.setAsDirty(StalePropertyFlag.Visibility);\n break;\n case 'items':\n this.setAsDirty(StalePropertyFlag.Children);\n break;\n case 'position':\n this.setAsDirty(StalePropertyFlag.Position);\n break;\n }\n }\n #staleFlags;\n /** @readonly Gets the list of {@link StalePropertyFlag}s accumulated since the element was last rendered/updated by the adapter. */\n get flags() {\n return this.#staleFlags;\n }\n /** Calls for a redraw of the current element in the next rendering process. */\n setAsDirty(...flags) {\n // set the flags that identify the stale part of the object to be updated.\n for (let flag of flags) {\n if (!this.flags.includes(flag)) {\n this.flags.push(flag);\n }\n }\n this.stage?.render(this);\n }\n}\n__decorate([\n Watch({ emit: false, converter: Point3DConverter })\n], RenderableElement.prototype, \"position\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], RenderableElement.prototype, \"tag\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], RenderableElement.prototype, \"inert\", void 0);\n/**\n * Abstract base of every {@link RenderableElement} that also carries an affine 3d transform (rotate/scale/offset,\n * combined into {@link transformMatrix}). Extended by {@link Pacem3DGroupElement}, {@link Pacem3DMeshElement} and\n * {@link Pacem3DObjectElement}.\n */\nexport class Ui3DElement extends RenderableElement {\n // #endregion\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'transformMatrix':\n this.setAsDirty(StalePropertyFlag.Transform);\n break;\n case 'translateZ':\n case 'translateX':\n case 'translateY':\n this.offset = { x: this.translateX, y: this.translateY, z: this.translateZ };\n break;\n case 'scaleX':\n case 'scaleY':\n case 'scaleZ':\n this.scale = { x: this.scaleX, y: this.scaleY, z: this.scaleZ };\n break;\n case 'scale':\n case 'offset':\n case 'rotate':\n this._computeTransformMatrix();\n break;\n }\n }\n _computeTransformMatrix() {\n const MAT3D = Geometry.LinearAlgebra.Matrix3D, VEC3D = Geometry.LinearAlgebra.Vector3D, QUAT = Geometry.LinearAlgebra.Quaternion;\n // scale\n const scale = this.scale ?? VEC3D.from(1, 1, 1);\n let m = MAT3D.scale(MAT3D.identity(), scale);\n // rotate\n if (!Utils.isNull(this.rotate)) {\n const rot = QUAT.toRotationMatrix(this.rotate);\n m = MAT3D.multiply(m, rot);\n }\n // translate\n const offset = this.offset ?? VEC3D.from(0, 0, 0);\n m = MAT3D.translate(m, offset);\n this.transformMatrix = m;\n }\n}\n__decorate([\n Watch({ emit: false, converter: QuaternionConverter })\n], Ui3DElement.prototype, \"rotate\", void 0);\n__decorate([\n Watch({ emit: false, converter: Point3DOrNumberConverter })\n], Ui3DElement.prototype, \"scale\", void 0);\n__decorate([\n Watch({ emit: false, converter: Point3DOrNumberConverter })\n], Ui3DElement.prototype, \"offset\", void 0);\n__decorate([\n Watch({ emit: false })\n], Ui3DElement.prototype, \"transformMatrix\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"scaleX\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"scaleY\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"scaleZ\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"translateX\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"translateY\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"translateZ\", void 0);\n/** `<pacem-3d-group>`: a {@link Ui3DElement} container that groups child {@link RenderableElement}s (declarative or from {@link datasource}) so its own transform applies to all of them. */\nlet Pacem3DGroupElement = class Pacem3DGroupElement extends Ui3DElement {\n validate(child) {\n // overrides default denial\n return child instanceof RenderableElement;\n }\n #children = [];\n /** @readonly Gets the renderable children currently belonging to the group. */\n get childRenderables() {\n return this.#children;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'items':\n case 'datasource':\n this.#children = (val || []);\n this.setAsDirty(StalePropertyFlag.Children);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false })\n], Pacem3DGroupElement.prototype, \"datasource\", void 0);\nPacem3DGroupElement = __decorate([\n CustomElement({ tagName: Constants.GROUP_SELECTOR })\n], Pacem3DGroupElement);\nexport { Pacem3DGroupElement };\n/** `<pacem-3d-mesh>`: a {@link Ui3DElement} that renders a {@link NodeGeometry} (mesh or line) with a front/back {@link Material}. */\nlet Pacem3DMeshElement = class Pacem3DMeshElement extends Ui3DElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'geometry':\n this.setAsDirty(StalePropertyFlag.Geometry);\n break;\n case 'material':\n case 'backMaterial':\n this.setAsDirty(StalePropertyFlag.Material);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem3DMeshElement.prototype, \"geometry\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem3DMeshElement.prototype, \"material\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem3DMeshElement.prototype, \"backMaterial\", void 0);\nPacem3DMeshElement = __decorate([\n CustomElement({ tagName: Constants.MESH_SELECTOR })\n], Pacem3DMeshElement);\nexport { Pacem3DMeshElement };\n/** `<pacem-3d-object>`: a {@link Ui3DElement} that loads/embeds a pre-built 3d asset (`obj`, `fbx`, or a native scene-graph object) instead of an explicit {@link Pacem3DMeshElement} geometry. */\nlet Pacem3DObjectElement = class Pacem3DObjectElement extends Ui3DElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'content' || name === 'type') {\n this.setAsDirty(StalePropertyFlag.Geometry, StalePropertyFlag.Material);\n }\n }\n};\n__decorate([\n Watch({ emit: false })\n], Pacem3DObjectElement.prototype, \"content\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DObjectElement.prototype, \"type\", void 0);\nPacem3DObjectElement = __decorate([\n CustomElement({ tagName: Constants.OBJECT_SELECTOR })\n], Pacem3DObjectElement);\nexport { Pacem3DObjectElement };\n/** `<pacem-3d-light>`: a {@link RenderableElement} light source (point/omni, spot or directional) illuminating the scene. */\nlet Pacem3DLightElement = class Pacem3DLightElement extends RenderableElement {\n constructor() {\n super(...arguments);\n /** Gets or sets the light intensity/brightness. */\n this.intensity = .85;\n /** Gets or sets the point the light is aimed at (spotlight-specific). */\n this.target = Constants.DEFAULT_COORDS;\n /** Gets or sets the light color. */\n this.color = '#fff';\n /** Gets or sets the kind of light source. */\n this.type = 'omni';\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'type':\n case 'color':\n case 'intensity':\n case 'target':\n this.setAsDirty(StalePropertyFlag.Light);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DLightElement.prototype, \"intensity\", void 0);\n__decorate([\n Watch({ emit: false, converter: Point3DConverter })\n], Pacem3DLightElement.prototype, \"target\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DLightElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DLightElement.prototype, \"type\", void 0);\nPacem3DLightElement = __decorate([\n CustomElement({ tagName: Constants.LIGHT_SELECTOR })\n], Pacem3DLightElement);\nexport { Pacem3DLightElement };\n/**\n * Abstract base of the camera custom elements ({@link Pacem3DPerspectiveCameraElement}, {@link Pacem3DOrthographicCameraElement})\n * that can be added to a {@link Pacem3DElement} stage. Implements {@link Camera}, tracking the eye-to-target\n * {@link boundingSphere} used e.g. by {@link Pacem3DAdapterElement.zoomFit}.\n */\nexport class Pacem3DCameraElement extends RenderableElement {\n constructor() {\n super(...arguments);\n /** Gets or sets the near clipping plane distance. */\n this.near = 0.1;\n /** Gets or sets the far clipping plane distance. */\n this.far = 1000.0;\n /** Gets or sets the up vector, in world coordinates. */\n this.up = Geometry.LinearAlgebra.Vector3D.j();\n /** Gets or sets the target the camera looks at, in world coordinates. */\n this.lookAt = Constants.DEFAULT_COORDS;\n }\n #sphere;\n _resetBoundingSphere() {\n const oldValue = this.#sphere;\n const eye = this.position, center = this.lookAt;\n const radius = Utils.isNullOrEmpty(eye) || Utils.isNullOrEmpty(center) ? 0\n : Geometry.LinearAlgebra.Vector3D.mag(Geometry.LinearAlgebra.Vector3D.subtract(eye, center));\n const currentValue = this.#sphere = { center, radius };\n this.dispatchEvent(new PropertyChangeEvent({ currentValue, propertyName: 'boundingSphere', oldValue }));\n }\n /** @readonly Gets the sphere centered on {@link lookAt} with radius equal to the eye-to-target distance. */\n get boundingSphere() {\n return this.#sphere;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'lookAt':\n case 'position':\n this._resetBoundingSphere();\n case 'near':\n case 'far':\n case 'up':\n this.setAsDirty(StalePropertyFlag.Camera);\n break;\n }\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DCameraElement.prototype, \"near\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DCameraElement.prototype, \"far\", void 0);\n__decorate([\n Watch({ emit: false, converter: Point3DConverter })\n], Pacem3DCameraElement.prototype, \"up\", void 0);\n__decorate([\n Watch({ emit: false, converter: Point3DConverter })\n], Pacem3DCameraElement.prototype, \"lookAt\", void 0);\n/** `<pacem-3d-perspective-camera>`: a {@link Pacem3DCameraElement} that projects the scene through a perspective frustum (vanishing point), defined by {@link fov} and {@link aspect}. */\nlet Pacem3DPerspectiveCameraElement = class Pacem3DPerspectiveCameraElement extends Pacem3DCameraElement {\n constructor() {\n super(...arguments);\n /** Gets or sets the vertical field of view, in degrees. */\n this.fov = 45;\n /** Gets or sets the viewport width/height ratio. */\n this.aspect = 1;\n }\n /** @readonly Gets the camera discriminator: always `\"perspective\"`. */\n get type() {\n return \"perspective\";\n }\n /** @readonly Gets the viewport width/height ratio (alias of {@link aspect}). */\n get aspectRatio() {\n return this.aspect;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'fov':\n case 'aspect':\n this.setAsDirty(StalePropertyFlag.Camera);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DPerspectiveCameraElement.prototype, \"fov\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DPerspectiveCameraElement.prototype, \"aspect\", void 0);\nPacem3DPerspectiveCameraElement = __decorate([\n CustomElement({ tagName: Constants.PERSPECTIVE_CAMERA_SELECTOR })\n], Pacem3DPerspectiveCameraElement);\nexport { Pacem3DPerspectiveCameraElement };\n/** `<pacem-3d-orthographic-camera>`: a {@link Pacem3DCameraElement} that projects the scene through a fixed, non-diminishing (parallel) frustum, defined by the {@link top}/{@link left}/{@link bottom}/{@link right} coordinates. */\nlet Pacem3DOrthographicCameraElement = class Pacem3DOrthographicCameraElement extends Pacem3DCameraElement {\n constructor() {\n super(...arguments);\n /** Gets or sets the top frustum coordinate (e.g. 1). */\n this.top = 1;\n /** Gets or sets the left frustum coordinate (e.g. -1). */\n this.left = -1;\n /** Gets or sets the bottom frustum coordinate (e.g. -1). */\n this.bottom = -1;\n /** Gets or sets the right frustum coordinate (e.g. 1). */\n this.right = 1;\n }\n /** @readonly Gets the camera discriminator: always `\"orthographic\"`. */\n get type() {\n return \"orthographic\";\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'top':\n case 'left':\n case 'bottom':\n case 'right':\n this.setAsDirty(StalePropertyFlag.Camera);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DOrthographicCameraElement.prototype, \"top\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DOrthographicCameraElement.prototype, \"left\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DOrthographicCameraElement.prototype, \"bottom\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DOrthographicCameraElement.prototype, \"right\", void 0);\nPacem3DOrthographicCameraElement = __decorate([\n CustomElement({ tagName: Constants.ORTHO_CAMERA_SELECTOR })\n], Pacem3DOrthographicCameraElement);\nexport { Pacem3DOrthographicCameraElement };\n/**\n * Pluggable rendering-backend contract assignable to a {@link Pacem3DElement}'s `adapter` property. Concrete adapters\n * ({@link Pacem3DThreeAdapterElement} for Three.js/WebGL, {@link Pacem3DWebgpuAdapterElement} for WebGPU) are\n * responsible for initializing/disposing the underlying native scene and DOM surface, sizing it, translating the\n * {@link RenderableElement} scene graph into native objects, hit-testing (raycasting) and producing snapshot images.\n */\nexport class Pacem3DAdapterElement extends PacemEventTarget {\n}\n","//namespace Pacem.Components.Drawing3D {\n/** @deprecated*/\nexport class Pacem3DDetector {\n /** Probes the browser for WebGL support by attempting to create a rendering context, populating {@link info} and {@link supported}. */\n constructor() {\n this._detected = {\n supported: false, info: {}\n };\n let cvs = document.createElement('canvas');\n let contextNames = ['webgl', 'experimental-webgl', 'moz-webgl', 'webkit-3d'];\n let ctx;\n let getParam = function (str) {\n if (!str)\n return undefined;\n return ctx.getParameter(str);\n };\n // addLine\n let addLine = (section, name, value) => {\n let detected = this._detected;\n var info = detected.info[section] = detected.info[section] || {};\n name = name.replace(/[^\\w]+/g, '');\n name = name.substring(0, 1).toLowerCase() + name.substring(1);\n info[name] = value;\n };\n if (navigator.userAgent.indexOf('MSIE') >= 0) {\n try {\n ctx = window['WebGLHelper'].CreateGLContext(cvs, 'canvas');\n }\n catch (e) { }\n }\n else {\n for (var i = 0; i < contextNames.length; i++) {\n try {\n ctx = cvs.getContext(contextNames[i]);\n if (ctx) {\n addLine('main', 'Context Name', contextNames[i]);\n break;\n }\n }\n catch (e) { }\n }\n }\n this._detected.supported = !!ctx;\n addLine('main', 'Platform', navigator.platform);\n addLine('main', 'Agent', navigator.userAgent);\n if (ctx) {\n addLine('main', 'Vendor', getParam(ctx.VENDOR));\n addLine('main', 'Version', getParam(ctx.VERSION));\n addLine('main', 'Renderer', getParam(ctx.RENDERER));\n addLine('main', 'Shading Language Version', getParam(ctx.SHADING_LANGUAGE_VERSION));\n addLine('bits', 'Rgba Bits', getParam(ctx.RED_BITS) + ', ' + getParam(ctx.GREEN_BITS) + ', ' + getParam(ctx.BLUE_BITS) + ', ' + getParam(ctx.ALPHA_BITS));\n addLine('bits', 'Depth Bits', getParam(ctx.DEPTH_BITS));\n addLine('shader', 'Max Vertex Attribs', getParam(ctx.MAX_VERTEX_ATTRIBS));\n addLine('shader', 'Max Vertex Texture Image Units', getParam(ctx.MAX_VERTEX_TEXTURE_IMAGE_UNITS));\n addLine('shader', 'Max Varying Vectors', getParam(ctx.MAX_VARYING_VECTORS));\n addLine('shader', 'Max Uniform Vectors', getParam(ctx.MAX_VERTEX_UNIFORM_VECTORS));\n addLine('tex', 'Max Combined Texture Image Units', getParam(ctx.MAX_COMBINED_TEXTURE_IMAGE_UNITS));\n addLine('tex', 'Max Texture Size', getParam(ctx.MAX_TEXTURE_SIZE));\n addLine('tex', 'Max Cube Map Texture Size', getParam(ctx.MAX_CUBE_MAP_TEXTURE_SIZE));\n addLine('tex', 'Num. Compressed Texture Formats', getParam(ctx.COMPRESSED_TEXTURE_FORMATS));\n addLine('misc', 'Max Render Buffer Size', getParam(ctx.MAX_RENDERBUFFER_SIZE));\n addLine('misc', 'Max Viewport Dimensions', getParam(ctx.MAX_VIEWPORT_DIMS));\n addLine('misc', 'Aliased Line Width Range', getParam(ctx.ALIASED_LINE_WIDTH_RANGE));\n addLine('misc', 'Aliased Point Size Range', getParam(ctx.ALIASED_POINT_SIZE_RANGE));\n addLine('misc', 'Supported Extensions', ctx.getSupportedExtensions() || []);\n }\n }\n /** @readonly Gets the detected WebGL capabilities/limits, grouped by section (`main`, `bits`, `shader`, `tex`, `misc`). */\n get info() {\n return this._detected.info;\n }\n /** @readonly Gets whether a WebGL rendering context could be created on this browser/device. */\n get supported() {\n return this._detected.supported;\n }\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { PacemEventTarget, Utils, Watch, PropertyConverters, PCSS } from '@pacem/pacem-core';\nimport { Imaging } from '@pacem/pacem-foundation';\nimport { StalePropertyFlag } from '../types';\n//namespace Pacem.Drawing3D {\n/** Identifies the shading model (and, correspondingly, the concrete `Material` shape) applied to a mesh's faces. */\nexport var KnownShader;\n(function (KnownShader) {\n KnownShader[\"Basic\"] = \"basic\";\n KnownShader[\"Lambert\"] = \"lambert\";\n KnownShader[\"Phong\"] = \"phong\";\n KnownShader[\"Standard\"] = \"standard\";\n KnownShader[\"Line\"] = \"line\";\n KnownShader[\"Custom\"] = \"custom\";\n})(KnownShader || (KnownShader = {}));\n/** Type guard checking whether `obj` implements the {@link Material} contract. */\nexport function isMaterial(obj) {\n return /*'color' in obj &&*/ 'shader' in obj;\n}\n/** Type guard checking whether `obj` implements the {@link BasicMaterial} contract. */\nexport function isBasicMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Basic;\n}\n/** Type guard checking whether `obj` implements the {@link LineMaterial} contract. */\nexport function isLineMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Line;\n}\n/** Type guard checking whether `obj` implements the {@link LambertMaterial} contract. */\nexport function isLambertMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Lambert;\n}\n/** Type guard checking whether `obj` implements the {@link PhongMaterial} contract. */\nexport function isPhongMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Phong;\n}\n/** Type guard checking whether `obj` implements the {@link StandardMaterial} contract. */\nexport function isStandardMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Standard;\n}\n/** Type guard checking whether `obj` implements the {@link ShaderMaterial} contract. */\nexport function isShaderMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Custom;\n}\n//namespace Pacem.Components.Drawing3D {\n/**\n * Abstract base of the declarative material custom elements — {@link BasicMaterialElement}, {@link LambertMaterialElement},\n * {@link LineMaterialElement}, {@link PhongMaterialElement} and {@link StandardMaterialElement} — that assemble a\n * {@link Material} (with its `shader`-specific extra properties) out of shared and shader-specific watched attributes,\n * ready to be assigned to a `Pacem3DMeshElement`'s `material`/`backMaterial` property.\n */\nexport class MaterialElement extends PacemEventTarget {\n /** @param shader The {@link KnownShader} this element's {@link createMaterial} produces. */\n constructor(shader) {\n super();\n this.#shader = shader;\n }\n #shader;\n /** Gets the shading model this element produces materials for. */\n get shader() {\n return this.#shader;\n }\n async _loadMap(url, old = this.material?.texture) {\n if (!Utils.isNull(old)) {\n old.close();\n }\n if (Utils.isNullOrEmpty(url)) {\n return null;\n }\n const blob = await Imaging.loadImage(url);\n if (Utils.isNull(blob)) {\n return null;\n }\n return await createImageBitmap(blob);\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'map':\n case 'opacity':\n case 'wireframe':\n case 'color':\n case 'hide':\n this.updateMaterial();\n break;\n }\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.updateMaterial();\n }\n /** Recomputes {@link material} via {@link createMaterial}, flagging it as {@link StalePropertyFlag.Material}. */\n updateMaterial() {\n this.createMaterial().then(m => {\n this.material = Utils.extend(m, { flags: [StalePropertyFlag.Material] });\n });\n }\n /** Builds the base {@link Material} out of the shared watched attributes (`opacity`, `wireframe`, `color`, `hide`, `map`); overridden by subclasses to add their shader-specific properties. */\n async createMaterial() {\n return {\n opacity: this.opacity ?? 1.0,\n wireframe: this.wireframe ?? false,\n color: this.color || Utils.Css.getVariableValue(`--${PCSS}-color-primary`),\n visible: !(this.hide ?? false),\n map: this.map,\n texture: await this._loadMap(this.map),\n shader: this.shader,\n flags: [],\n };\n }\n}\n__decorate([\n Watch()\n], MaterialElement.prototype, \"material\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], MaterialElement.prototype, \"opacity\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], MaterialElement.prototype, \"wireframe\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], MaterialElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], MaterialElement.prototype, \"hide\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], MaterialElement.prototype, \"map\", void 0);\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P } from '@pacem/pacem-core';\nimport { KnownShader, MaterialElement } from './material';\nimport { TAG_MIDDLE_NAME } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-material-basic>`: produces a {@link BasicMaterial} (unlit shading model): rendered at flat color, unaffected by scene lighting. */\nlet BasicMaterialElement = class BasicMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Basic);\n }\n};\nBasicMaterialElement = __decorate([\n CustomElement({ tagName: `${P}-${TAG_MIDDLE_NAME}-material-basic` })\n], BasicMaterialElement);\nexport { BasicMaterialElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { KnownShader, MaterialElement } from './material';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-material-lambert>`: produces a {@link LambertMaterial} (Lambertian shading model): matte, non-specular reflection of scene lighting, with no glossy highlights. */\nlet LambertMaterialElement = class LambertMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Lambert);\n }\n /** Builds the {@link LambertMaterial}, adding `emissiveColor`, `reflectivity` and `refractionRatio` to the base {@link Material}. */\n async createMaterial() {\n return Utils.extend({\n emissiveColor: this.emissiveColor || '#000',\n reflectivity: this.reflectivity ?? 0,\n refractionRatio: this.refractionRatio ?? 0\n }, await super.createMaterial());\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'emissiveColor':\n case 'reflectivity':\n case 'refractionRatio':\n this.updateMaterial();\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], LambertMaterialElement.prototype, \"emissiveColor\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], LambertMaterialElement.prototype, \"reflectivity\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], LambertMaterialElement.prototype, \"refractionRatio\", void 0);\nLambertMaterialElement = __decorate([\n CustomElement({ tagName: `${P}-${TAG_MIDDLE_NAME}-material-lambert` })\n], LambertMaterialElement);\nexport { LambertMaterialElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { KnownShader, MaterialElement } from './material';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-material-line>`: produces a {@link LineMaterial} for rendering {@link PacemLineElement} polylines (stroke width, joins, caps, dash pattern). */\nlet LineMaterialElement = class LineMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Line);\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'lineWidth':\n case 'lineJoin':\n case 'lineCap':\n case 'dashArray':\n this.updateMaterial();\n break;\n }\n }\n }\n /** Builds the {@link LineMaterial}, adding `lineWidth`, `lineJoin`, `lineCap` and `dashArray` to the base {@link Material}. */\n async createMaterial() {\n return Utils.extend({\n lineWidth: this.lineWidth ?? 1,\n lineJoin: this.lineJoin ?? 'round',\n lineCap: this.lineCap ?? 'round',\n dashArray: this.dashArray,\n }, await super.createMaterial());\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], LineMaterialElement.prototype, \"lineWidth\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], LineMaterialElement.prototype, \"lineJoin\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], LineMaterialElement.prototype, \"lineCap\", void 0);\n__decorate([\n Watch({\n emit: false, converter: {\n convert: (attr) => attr?.split(',').map(i => parseInt(i)).filter(i => !Number.isNaN(i)),\n convertBack: (prop) => prop?.join(',')\n }\n })\n], LineMaterialElement.prototype, \"dashArray\", void 0);\nLineMaterialElement = __decorate([\n CustomElement({ tagName: `${P}-${TAG_MIDDLE_NAME}-material-line` })\n], LineMaterialElement);\nexport { LineMaterialElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { KnownShader, MaterialElement } from './material';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-material-phong>`: produces a {@link PhongMaterial} (Phong shading model): diffuse reflection plus a specular highlight of adjustable shininess. */\nlet PhongMaterialElement = class PhongMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Phong);\n }\n /** Builds the {@link PhongMaterial}, adding the diffuse (`emissiveColor`, `reflectivity`, `refractionRatio`) and specular (`specularColor`, `shininess`, `flatShading`) properties to the base {@link Material}. */\n async createMaterial() {\n return Utils.extend({\n emissiveColor: this.emissiveColor || '#000',\n reflectivity: this.reflectivity ?? 0,\n refractionRatio: this.refractionRatio ?? 0,\n specularColor: this.specularColor || '#000',\n shininess: this.shininess ?? 0,\n flatShading: this.flatShading ?? true\n }, await super.createMaterial());\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'emissiveColor':\n case 'reflectivity':\n case 'refractionRatio':\n case 'specularColor':\n case 'shininess':\n case 'flatShading':\n this.updateMaterial();\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PhongMaterialElement.prototype, \"emissiveColor\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PhongMaterialElement.prototype, \"reflectivity\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PhongMaterialElement.prototype, \"refractionRatio\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PhongMaterialElement.prototype, \"specularColor\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PhongMaterialElement.prototype, \"shininess\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], PhongMaterialElement.prototype, \"flatShading\", void 0);\nPhongMaterialElement = __decorate([\n CustomElement({ tagName: `${P}-${TAG_MIDDLE_NAME}-material-phong` })\n], PhongMaterialElement);\nexport { PhongMaterialElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { KnownShader, MaterialElement } from './material';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-material-standard>`: produces a {@link StandardMaterial} using a physically-based (metalness/roughness) shading model. */\nlet StandardMaterialElement = class StandardMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Standard);\n }\n /** Builds the {@link StandardMaterial}, adding `emissiveColor`, `refractionRatio`, `metalness`, `roughness` and `flatShading` to the base {@link Material}. */\n async createMaterial() {\n return Utils.extend({\n emissiveColor: this.emissiveColor || '#000',\n refractionRatio: this.refractionRatio ?? 0,\n metalness: this.metalness ?? 0,\n roughness: this.roughness ?? 0,\n flatShading: this.flatShading ?? false\n }, await super.createMaterial());\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'emissiveColor':\n case 'roughness':\n case 'metalness':\n case 'refractionRatio':\n case 'flatShading':\n this.updateMaterial();\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], StandardMaterialElement.prototype, \"emissiveColor\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], StandardMaterialElement.prototype, \"refractionRatio\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], StandardMaterialElement.prototype, \"roughness\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], StandardMaterialElement.prototype, \"metalness\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], StandardMaterialElement.prototype, \"flatShading\", void 0);\nStandardMaterialElement = __decorate([\n CustomElement({ tagName: `${P}-${TAG_MIDDLE_NAME}-material-standard` })\n], StandardMaterialElement);\nexport { StandardMaterialElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { PacemEventTarget, Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\n//namespace Pacem.Components.Drawing3D {\n/**\n * Abstract base of the declarative geometric-primitive custom elements — {@link PacemBoxElement}, {@link PacemConeElement},\n * {@link PacemCylinderElement}, {@link PacemLineElement}, {@link PacemPlaneElement}, {@link PacemSphereElement},\n * {@link PacemTorusElement} and the {@link PolyhedronElement} family — that compute a {@link NodeGeometry} out of their\n * own shape parameters, ready to be assigned to a `Pacem3DMeshElement`'s `geometry` property.\n */\nexport class Pacem3DPrimitiveElement extends PacemEventTarget {\n viewActivatedCallback() {\n super.viewActivatedCallback();\n if (Utils.isNull(this.geometry)) {\n this.geometry = this.createDefaultGeometry();\n }\n }\n}\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], Pacem3DPrimitiveElement.prototype, \"geometry\", void 0);\n","import { Utils } from '@pacem/pacem-core';\n//namespace Pacem.Drawing3D {\n/**\n * Property decorator factory that turns the decorated field into an accessor backed by a private field, invoking\n * `callback` with the property name and old/new values whenever it is set to a different value. Used by\n * {@link NodeGeometry}/{@link LineGeometry}/{@link MeshGeometry} to flag themselves as dirty ({@link StalePropertyFlag.Geometry})\n * whenever their vertex data changes.\n * @param callback Invoked (with `this` bound to the decorated instance) on every effective change of the property.\n */\nexport function NotifyChange(callback) {\n return (target, prop, descriptor) => {\n const backingField = `_${prop}_${Utils.uniqueCode()}_backingField`;\n function getter() {\n return this[backingField];\n }\n function setter(val) {\n if (val !== this[backingField]) {\n const old = this[backingField];\n this[backingField] = val;\n callback.call(this, prop, old, val);\n }\n }\n //if (delete target[prop]) {\n Object.defineProperty(target, prop, {\n get: function () {\n return getter.call(this);\n },\n set: function (val) {\n setter.call(this, val);\n },\n enumerable: true,\n configurable: false\n });\n //}\n };\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Utils } from '@pacem/pacem-core';\nimport { StalePropertyFlag } from './types';\nimport { NotifyChange } from './decorators';\n/**\n * Abstract base for the concrete geometry classes ({@link LineGeometry}, {@link MeshGeometry}) that back a\n * {@link Pacem3DMeshElement}'s `geometry` property, providing shared bounding-volume computation helpers.\n */\nexport class NodeGeometry {\n constructor(positions = []) {\n this.positions = positions;\n }\n /** Computes the centroid (average) of the given positions. */\n static barycenter(positions) {\n var bary = { x: 0, y: 0, z: 0 };\n if (!Utils.isNullOrEmpty(positions)) {\n var count = positions.length;\n for (var i = 0; i < positions.length; i++) {\n var pt = positions[i];\n bary.x += pt.x;\n bary.y += pt.y;\n bary.z += pt.z;\n }\n var countDbl = 1.0 * count;\n bary.x /= countDbl;\n bary.y /= countDbl;\n bary.z /= countDbl;\n }\n return bary;\n }\n /** Computes the axis-aligned {@link Box3D} enclosing the given positions. */\n static boundingBox(positions) {\n const output = {\n minX: +Infinity, minY: +Infinity, minZ: +Infinity,\n maxX: -Infinity, maxY: -Infinity, maxZ: -Infinity\n };\n if (!Utils.isNullOrEmpty(positions)) {\n for (var i = 0; i < positions.length; i++) {\n var pt = positions[i];\n output.minX = Math.min(output.minX, pt.x);\n output.minY = Math.min(output.minY, pt.y);\n output.minZ = Math.min(output.minZ, pt.z);\n output.maxX = Math.max(output.maxX, pt.x);\n output.maxY = Math.max(output.maxY, pt.y);\n output.maxZ = Math.max(output.maxZ, pt.z);\n }\n }\n return output;\n }\n /** Marks the geometry as stale, flagging it with {@link StalePropertyFlag.Geometry} for the next render. */\n setAsDirty() {\n setSelfAsDirty.call(this);\n }\n}\nfunction setSelfAsDirty() {\n const me = this;\n me.flags = [/* no further specifications, other than 'geometry' */ StalePropertyFlag.Geometry];\n}\n/** A {@link NodeGeometry} rendered as a polyline through its {@link positions} (no faces/triangles). */\nexport class LineGeometry extends NodeGeometry {\n}\n__decorate([\n NotifyChange(setSelfAsDirty)\n], LineGeometry.prototype, \"positions\", void 0);\n/** A {@link MeshGeometry} implementation with lazily-computed {@link barycenter}/{@link boundingBox} and settable {@link boundingSphere}, used as the `geometry` of a {@link Pacem3DMeshElement}. */\nexport class MeshGeometry extends NodeGeometry {\n #boundingBox;\n #boundingSphere;\n #barycenter;\n /** Gets or sets the centroid of {@link positions}; computed on first access if not explicitly set. */\n get barycenter() {\n return this.#barycenter ??= NodeGeometry.barycenter(this.positions);\n }\n set barycenter(point) {\n this.#barycenter = point;\n }\n /** Gets or sets the axis-aligned bounding box; computed from {@link positions} on first access if not explicitly set. */\n get boundingBox() {\n return this.#boundingBox ??= NodeGeometry.boundingBox(this.positions);\n }\n set boundingBox(bbox) {\n this.#boundingBox = bbox;\n }\n /** Gets or sets the bounding sphere. */\n get boundingSphere() {\n return this.#boundingSphere;\n }\n set boundingSphere(sphere) {\n this.#boundingSphere = sphere;\n }\n constructor(positions, triangleIndices, textureCoordinates = [], normals = []) {\n super(positions);\n this.triangleIndices = triangleIndices;\n this.textureCoordinates = textureCoordinates;\n this.normals = normals;\n }\n}\n__decorate([\n NotifyChange(setSelfAsDirty)\n], MeshGeometry.prototype, \"positions\", void 0);\n__decorate([\n NotifyChange(setSelfAsDirty)\n], MeshGeometry.prototype, \"triangleIndices\", void 0);\n__decorate([\n NotifyChange(setSelfAsDirty)\n], MeshGeometry.prototype, \"textureCoordinates\", void 0);\n__decorate([\n NotifyChange(setSelfAsDirty)\n], MeshGeometry.prototype, \"normals\", void 0);\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemBoxElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-box>`: computes the {@link MeshGeometry} of a rectangular cuboid (box). */\nlet PacemBoxElement = PacemBoxElement_1 = class PacemBoxElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a box with the given size and per-axis segment subdivisions (all default to `1`). */\n static createMeshGeometry(width, height, depth, widthSegments, heightSegments, depthSegments) {\n const w = width || 1, h = height || 1, d = depth || 1, sw = widthSegments || 1, sh = heightSegments || 1, sd = depthSegments || 1;\n const positions = [];\n const uv = [];\n const indices = [];\n // populationg positions\n for (var j = 0; j <= sh; j++) {\n var y = h / 2.0 - h * (1.0 * j) / (1.0 * sh); // ??\n for (var k = 0; k <= sd; k++) {\n var z = -d / 2.0 + d * (1.0 * k) / (1.0 * sd);\n for (var i = 0; i <= sw; i++) {\n var x = -w / 2.0 + w * (1.0 * i) / (1.0 * sw);\n // add only surface nodes\n if (i == 0 || i == sw || k == 0 || k == sd || j == 0 || j == sh)\n positions.push({ x, y, z });\n }\n }\n }\n var getPosIndex = function (x, y, z) {\n var epsilon = .00001;\n for (var i = 0; i < positions.length; i++) {\n var pt = positions[i];\n if (Math.abs(pt.x - x) < epsilon && Math.abs(pt.y - y) < epsilon && Math.abs(pt.z - z) < epsilon)\n return i;\n }\n return -1;\n };\n var appendFace = function (c_1, c_2, c_3, c_4, u, v, u_next, v_next) {\n indices.push(c_1);\n indices.push(c_2);\n indices.push(c_3);\n indices.push(c_1);\n indices.push(c_3);\n indices.push(c_4);\n uv.push({ x: u, y: v_next });\n uv.push({ x: u_next, y: v_next });\n uv.push({ x: u_next, y: v });\n uv.push({ x: u, y: v_next });\n uv.push({ x: u_next, y: v });\n uv.push({ x: u, y: v });\n };\n // top face (1)\n for (var k = 0; k < sd; k++) {\n var y = h / 2.0;\n var z = -d / 2.0 + d * (1.0 * k) / (1.0 * sd);\n var z_next = -d / 2.0 + d * (1.0 * (k + 1)) / (1.0 * sd);\n for (var i = 0; i < sw; i++) {\n var x = -w / 2.0 + (1.0 * i) * w / (1.0 * sw);\n var x_next = -w / 2.0 + (1.0 * (i + 1)) * w / (1.0 * sw);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y, z_next);\n var c_2 = getPosIndex(x_next, y, z_next);\n var c_3 = getPosIndex(x_next, y, z);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (1.0 * (i + 1)) / (1.0 * sw);\n var u = (1.0 * i) / (1.0 * sw);\n var v_next = 1.0 - (1.0 * (k + 1)) / (1.0 * sd);\n var v = 1.0 - (1.0 * k) / (1.0 * sd);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n // back face (2)\n for (var j = 0; j < sh; j++) {\n var y = h / 2.0 - (1.0 * j) * h / (1.0 * sh);\n var y_next = h / 2.0 - (j + 1.0) * h / (1.0 * sh);\n var z = -d / 2.0;\n for (var i = 0; i < sw; i++) {\n var x = w / 2.0 - 1.0 * i * w / (1.0 * sw);\n var x_next = w / 2.0 - (i + 1.0) * w / (1.0 * sw);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y_next, z);\n var c_2 = getPosIndex(x_next, y_next, z);\n var c_3 = getPosIndex(x_next, y, z);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (i + 1.0) / (1.0 * sw);\n var u = (1.0 * i) / (1.0 * sw);\n var v_next = 1.0 - (j + 1.0) / (1.0 * sh);\n var v = 1.0 - 1.0 * j / (1.0 * sh);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n // left face (3)\n for (var j = 0; j < sh; j++) {\n var y = h / 2.0 - (1.0 * j) * h / (1.0 * sh);\n var y_next = h / 2.0 - (j + 1.0) * h / (1.0 * sh);\n var x = -w / 2.0;\n for (var k = 0; k < sd; k++) {\n var z = -d / 2.0 + k * d / (1.0 * sd);\n var z_next = -d / 2.0 + (k + 1.0) * d / (1.0 * sd);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y_next, z);\n var c_2 = getPosIndex(x, y_next, z_next);\n var c_3 = getPosIndex(x, y, z_next);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (k + 1.0) / (1.0 * sd);\n var u = (1.0 * k) / (1.0 * sd);\n var v_next = 1.0 - (j + 1.0) / (1.0 * sh);\n var v = 1.0 - j / (1.0 * sh);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n // front face (4)\n for (var j = 0; j < sh; j++) {\n var y = h / 2.0 - j * h / (1.0 * sh);\n var y_next = h / 2.0 - (j + 1.0) * h / (1.0 * sh);\n var z = d / 2.0;\n for (var i = 0; i < sw; i++) {\n var x = -w / 2.0 + i * w / (1.0 * sw);\n var x_next = -w / 2.0 + (i + 1.0) * w / (1.0 * sw);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y_next, z);\n var c_2 = getPosIndex(x_next, y_next, z);\n var c_3 = getPosIndex(x_next, y, z);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (i + 1.0) / (1.0 * sw);\n var u = (1.0 * i) / (1.0 * sw);\n var v_next = 1.0 - (j + 1.0) / (1.0 * sh);\n var v = 1.0 - (1.0 * j) / (1.0 * sh);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n // right face (5)\n for (var j = 0; j < sh; j++) {\n var y = h / 2.0 - j * h / (1.0 * sh);\n var y_next = h / 2.0 - (j + 1.0) * h / (1.0 * sh);\n var x = w / 2.0;\n for (var k = 0; k < sd; k++) {\n var z = d / 2.0 - k * d / (1.0 * sd);\n var z_next = d / 2.0 - (k + 1.0) * d / (1.0 * sd);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y_next, z);\n var c_2 = getPosIndex(x, y_next, z_next);\n var c_3 = getPosIndex(x, y, z_next);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (k + 1.0) / (1.0 * sd);\n var u = (1.0 * k) / (1.0 * sd);\n var v_next = 1.0 - (j + 1.0) / (1.0 * sh);\n var v = 1.0 - (1.0 * j) / (1.0 * sh);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n // bottom face (6)\n for (var k = 0; k < sd; k++) {\n var y = -h / 2.0;\n var z = d / 2.0 - d * k / (1.0 * sd);\n var z_next = d / 2.0 - d * (k + 1.0) / (1.0 * sd);\n for (var i = 0; i < sw; i++) {\n var x = -w / 2.0 + i * w / (1.0 * sw);\n var x_next = -w / 2.0 + (i + 1.0) * w / (1.0 * sw);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y, z_next);\n var c_2 = getPosIndex(x_next, y, z_next);\n var c_3 = getPosIndex(x_next, y, z);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (i + 1.0) / (1.0 * sw);\n var u = (1.0 * i) / (1.0 * sw);\n var v_next = 1.0 - (k + 1.0) / (1.0 * sd);\n var v = 1.0 - (1.0 * k) / (1.0 * sd);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n const geom = new MeshGeometry(positions, indices, uv);\n geom.key = `box_${width}x${height}x${depth}_w${widthSegments}_h${heightSegments}_d${depthSegments}`;\n computeSharpVertexNormals(geom);\n const center = { x: 0, y: 0, z: 0 };\n const w2 = width / 2, h2 = height / 2, d2 = depth / 2;\n //\n geom.barycenter = center;\n geom.boundingBox = { maxX: w2, maxY: h2, maxZ: d2, minX: -w2, minY: -h2, minZ: -d2 };\n geom.boundingSphere = { center, radius: Math.sqrt(Math.pow(w2, 2) + Math.pow(h2, 2) + Math.pow(d2, 2)) };\n //\n return geom;\n }\n /** Computes the box geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemBoxElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'width':\n case 'height':\n case 'depth':\n case 'widthSegments':\n case 'heightSegments':\n case 'depthSegments':\n this.geometry = PacemBoxElement_1.createMeshGeometry(this.width, this.height, this.depth, this.widthSegments, this.heightSegments, this.depthSegments);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"width\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"height\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"depth\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"widthSegments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"heightSegments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"depthSegments\", void 0);\nPacemBoxElement = PacemBoxElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-box' })\n], PacemBoxElement);\nexport { PacemBoxElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemConeElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME, DEG2RAD } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-cone>`: computes the {@link MeshGeometry} of a cone (a circular base tapering to an apex point). */\nlet PacemConeElement = PacemConeElement_1 = class PacemConeElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a cone with the given base radius, height, side count, lateral-surface segments and base-cap segments. */\n static createMeshGeometry(radius = 1, height = 1, sides = 18, heightSegments = 5, capSegments = 1) {\n const r = radius;\n const nodes = [], uv = [], indices = [];\n const theta = DEG2RAD * (360.0 / sides);\n const slope = r / height;\n const fY = height / heightSegments;\n const fU = 1.0 / sides;\n // top vertex\n nodes.push({ x: .0, y: height, z: .0 });\n // ======================================\n // side loops\n for (let j = 1; j <= heightSegments; j++) {\n const y = height - fY * j;\n const v = y / height;\n const rj = (height - y) * slope;\n // for loops other than tip loop\n const y_prev = y + fY;\n const v_prev = y_prev / height;\n for (let i = 0; i < sides; i++) {\n const angle = theta * i;\n const x = Math.cos(angle) * rj, z = -Math.sin(angle) * rj;\n nodes.push({ x, y, z });\n const index = 1 + sides * (j - 1) + i;\n const index_prev = i == 0 ? index + sides - 1 : index - 1;\n const u = i * fU;\n const u_prev = i == 0 ? (1 - fU) : fU * (i - 1);\n if (j == 1) {\n // tip loop\n // 1 triangle\n indices.push(0, index_prev, index);\n uv.push({ x: u, y: 1 }, { x: u_prev, y: v }, { x: u, y: v });\n continue;\n }\n const prevLoopIndex = 1 + sides * (j - 2) + i;\n const prevLoopIndex_prev = i == 0 ? prevLoopIndex + sides - 1 : prevLoopIndex - 1;\n // quad\n const A = prevLoopIndex_prev;\n const B = index_prev;\n const C = index;\n const D = prevLoopIndex;\n indices.push(C, A, B);\n indices.push(C, D, A);\n const uvA = { x: u_prev, y: v_prev };\n const uvB = { x: u_prev, y: v };\n const uvC = { x: u, y: v };\n const uvD = { x: u, y: v_prev };\n uv.push(uvC, uvA, uvB);\n uv.push(uvC, uvD, uvA);\n }\n }\n // bottom cap\n const startCapIndex = 1 + (heightSegments - 1) * sides;\n // bottom vertex (pivot)\n nodes.push({ x: .0, y: 0, z: .0 });\n const bottomIndex = startCapIndex + sides;\n // ======================================\n for (let j = 1; j <= capSegments; j++) {\n const rj_norm = j / capSegments;\n const rj = radius * rj_norm;\n // for loops other than bottom vertex loop\n const rj_norm_prev = (j - 1) / capSegments;\n for (let i = 0; i < sides; i++) {\n const angle = theta * i, cos = Math.cos(angle), sin = Math.sin(angle);\n const angle_prev = angle - theta, cos_prev = Math.cos(angle_prev), sin_prev = Math.sin(angle_prev);\n const u = .5 * (1 + cos * rj_norm), v = .5 * (1 + sin * rj_norm);\n const u_prev = .5 * (1 + cos_prev * rj_norm), v_prev = .5 * (1 + sin_prev * rj_norm);\n let index, index_prev;\n if (j != capSegments) {\n const x = Math.cos(angle) * rj, z = -Math.sin(angle) * rj;\n nodes.push({ x, y: 0, z });\n index = bottomIndex + 1 + (j - 1) * sides + i;\n index_prev = i == 0 ? index + sides - 1 : index - 1;\n }\n else {\n index = startCapIndex + i;\n index_prev = i == 0 ? startCapIndex + sides - 1 : index - 1;\n }\n if (j == 1) {\n // bottom vertex loop\n // 1 triangle\n indices.push(bottomIndex, index, index_prev);\n uv.push({ x: .5, y: .5 }, { x: u, y: v }, { x: u_prev, y: v_prev });\n continue;\n }\n const prevLoopU = .5 * (1 + cos * rj_norm_prev), prevLoopV = .5 * (1 + sin * rj_norm_prev);\n const prevLoopU_prev = .5 * (1 + cos_prev * rj_norm_prev), prevLoopV_prev = .5 * (1 + sin_prev * rj_norm_prev);\n const prevLoopIndex = bottomIndex + 1 + (j - 2) * sides + i;\n const prevLoopIndex_prev = i == 0 ? prevLoopIndex + sides - 1 : prevLoopIndex - 1;\n // quad\n const A = prevLoopIndex_prev;\n const B = index_prev;\n const C = index;\n const D = prevLoopIndex;\n indices.push(A, D, B);\n indices.push(B, D, C);\n const uvA = { x: prevLoopU_prev, y: prevLoopV_prev };\n const uvB = { x: u_prev, y: v_prev };\n const uvC = { x: u, y: v };\n const uvD = { x: prevLoopU, y: prevLoopV };\n uv.push(uvA, uvD, uvB);\n uv.push(uvB, uvD, uvC);\n }\n }\n // put the whole thing together\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `cone_${radius}x${height}_s${sides}_h${heightSegments}_c${capSegments}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n return geom;\n }\n /** Computes the cone geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemConeElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'radius':\n case 'height':\n case 'sides':\n case 'heightSegments':\n case 'capSegments':\n this.geometry = PacemConeElement_1.createMeshGeometry(this.radius, this.height, this.sides, this.heightSegments, this.capSegments);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemConeElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemConeElement.prototype, \"height\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemConeElement.prototype, \"sides\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemConeElement.prototype, \"heightSegments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemConeElement.prototype, \"capSegments\", void 0);\nPacemConeElement = PacemConeElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-cone' })\n], PacemConeElement);\nexport { PacemConeElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemCylinderElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME, DEG2RAD } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-cylinder>`: computes the {@link MeshGeometry} of a cylinder (two parallel circular caps joined by a straight lateral surface). */\nlet PacemCylinderElement = PacemCylinderElement_1 = class PacemCylinderElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a cylinder with the given radius, height, side count, lateral-surface segments and cap segments. */\n static createMeshGeometry(radius = 1, height = 1, sides = 18, heightSegments = 5, capSegments = 1) {\n const r = radius;\n const nodes = [], uv = [], indices = [];\n const theta = DEG2RAD * (360.0 / sides);\n // top & bottom vertices (pivot @(0,0,0))\n nodes.push({ x: .0, y: height, z: .0 });\n nodes.push({ x: .0, y: .0, z: .0 });\n // ======================================\n // cap loops\n const capRadius = r / capSegments;\n for (let j = 1; j <= capSegments; j++) {\n //int j_prev = j - 1;\n var rho = capRadius * j;\n for (var i = 0; i < sides; i++) {\n const startIndex = 2 + 2 * sides * (j - 1);\n const A = i == 0 ? startIndex + 2 * (sides - 1) : startIndex + 2 * (i - 1);\n const B = startIndex + 2 * i;\n const u = Math.cos(theta * i);\n const v = -Math.sin(theta * i);\n const u_prev = Math.cos(theta * (i - 1.0));\n const v_prev = -Math.sin(theta * (i - 1.0));\n const x = rho * u;\n const z = rho * v;\n const topPoint = { x, y: height, z };\n const bottomPoint = { x, y: .0, z };\n //\n nodes.push(topPoint);\n nodes.push(bottomPoint);\n // coordinates & texture\n const factor = .5 * rho / r;\n const uB = u * factor;\n const vB = v * factor;\n const uA = u_prev * factor;\n const vA = v_prev * factor;\n if (j == 1) {\n const faceIndicesTop = [0 /* top vertex*/, A, B];\n const faceIndicesBottom = [1 /* bottom vertex*/, B + 1, A + 1];\n // texture\n const uvTop = [\n { x: .5, y: .5 },\n { x: .5 + uA, y: .5 - vA },\n { x: 0.5 + uB, y: .5 - vB }\n ];\n const uvBottom = [\n { x: .5, y: .5 },\n { x: 0.5 + uB, y: .5 + vB },\n { x: .5 + uA, y: .5 + vA }\n ];\n // faces\n indices.push(...faceIndicesTop);\n indices.push(...faceIndicesBottom);\n // texture\n for (let i = 0; i < uvTop.length; i++)\n uv.push(uvTop[i]);\n for (let i = 0; i < uvBottom.length; i++)\n uv.push(uvBottom[i]);\n }\n else {\n const startIndexPrevLoop = 2 + 2 * sides * (j - 2);\n const D = i == 0 ? startIndexPrevLoop + 2 * (sides - 1) : startIndexPrevLoop + 2 * (i - 1);\n const C = startIndexPrevLoop + 2 * i;\n // coordinates & texture\n const factor0 = .5 * ((j - 1.0) / capSegments);\n const uC = u * factor0;\n const vC = v * factor0;\n const uD = u_prev * factor0;\n const vD = v_prev * factor0;\n const uvA = { x: .5 + uA, y: .5 - vA };\n const uvB = { x: .5 + uB, y: .5 - vB };\n const uvC = { x: .5 + uC, y: .5 - vC };\n const uvD = { x: .5 + uD, y: .5 - vD };\n const uvA2 = { x: .5 + uA, y: .5 + vA };\n const uvB2 = { x: .5 + uB, y: .5 + vB };\n const uvC2 = { x: .5 + uC, y: .5 + vC };\n const uvD2 = { x: .5 + uD, y: .5 + vD };\n // top\n indices.push(A);\n indices.push(B);\n indices.push(D);\n indices.push(D);\n indices.push(B);\n indices.push(C);\n // bottom\n indices.push(C + 1);\n indices.push(B + 1);\n indices.push(A + 1);\n indices.push(C + 1);\n indices.push(A + 1);\n indices.push(D + 1);\n // textures top\n uv.push(uvA);\n uv.push(uvB);\n uv.push(uvD);\n uv.push(uvD);\n uv.push(uvB);\n uv.push(uvC);\n // texture bottom\n uv.push(uvC2);\n uv.push(uvB2);\n uv.push(uvA2);\n uv.push(uvC2);\n uv.push(uvA2);\n uv.push(uvD2);\n }\n }\n }\n // ======================================\n // side loops\n const sideStartIndex = 2 + 2 * sides * (capSegments);\n const capLastIndex = 2 + 2 * sides * (capSegments - 1);\n const fU = 1.0 / sides;\n const fV = 1.0 / heightSegments;\n for (let j = 1; j <= heightSegments; j++) {\n for (let i = 0; i < sides; i++) {\n if (j != heightSegments) {\n var x = r * Math.cos(theta * i);\n var z = -r * Math.sin(theta * i);\n var y = (height * j) / heightSegments;\n //\n nodes.push({ x, y, z });\n }\n const i_prev = i == 0 ? sides - 1 : i - 1;\n const A = j == 1 ? capLastIndex + 2 * i_prev + 1 : sideStartIndex + sides * (j - 2) + i_prev;\n const B = j == 1 ? capLastIndex + 2 * i + 1 : sideStartIndex + sides * (j - 2) + i;\n const C = j == heightSegments ? capLastIndex + 2 * i : sideStartIndex + sides * (j - 1) + i;\n const D = j == heightSegments ? capLastIndex + 2 * i_prev : sideStartIndex + sides * (j - 1) + i_prev;\n const u_prev = i_prev * fU;\n const v_prev = (j - 1) * fV;\n const u = i == 0 ? 1.0 : i * fU;\n const v = j * fV;\n const uvA = { x: u_prev, y: v_prev };\n const uvB = { x: u, y: v_prev };\n const uvC = { x: u, y: v };\n const uvD = { x: u_prev, y: v };\n indices.push(A);\n indices.push(B);\n indices.push(C);\n indices.push(A);\n indices.push(C);\n indices.push(D);\n //\n uv.push(uvA);\n uv.push(uvB);\n uv.push(uvC);\n uv.push(uvA);\n uv.push(uvC);\n uv.push(uvD);\n }\n }\n // put the whole thing together\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `cylinder_${radius}x${height}_s${sides}_h${heightSegments}_c${capSegments}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n return geom;\n }\n /** Computes the cylinder geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemCylinderElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'radius':\n case 'height':\n case 'sides':\n case 'heightSegments':\n case 'capSegments':\n this.geometry = PacemCylinderElement_1.createMeshGeometry(this.radius, this.height, this.sides, this.heightSegments, this.capSegments);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCylinderElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCylinderElement.prototype, \"height\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCylinderElement.prototype, \"sides\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCylinderElement.prototype, \"heightSegments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCylinderElement.prototype, \"capSegments\", void 0);\nPacemCylinderElement = PacemCylinderElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-cylinder' })\n], PacemCylinderElement);\nexport { PacemCylinderElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemLineElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { LineGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME } from '../constants';\n//namespace Pacem.Components.Drawing3D {\nconst DEFAULT_LINE = [{ x: 0, y: 0, z: 0 }, { x: 0, y: 1, z: 0 }];\n/** `<pacem-3d-primitive-line>`: computes the {@link LineGeometry} of a polyline connecting a sequence of points. */\nlet PacemLineElement = PacemLineElement_1 = class PacemLineElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link LineGeometry} out of the given vertices (a single segment from `(0,0,0)` to `(0,1,0)` when omitted). */\n static createLineGeometry(positions) {\n return new LineGeometry(positions || DEFAULT_LINE);\n }\n /** Computes the line geometry from the default (unset) vertex positions. */\n createDefaultGeometry() {\n return PacemLineElement_1.createLineGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'positions':\n this.geometry = PacemLineElement_1.createLineGeometry(val);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemLineElement.prototype, \"positions\", void 0);\nPacemLineElement = PacemLineElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-line' })\n], PacemLineElement);\nexport { PacemLineElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemPlaneElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-plane>`: computes the {@link MeshGeometry} of a flat rectangular surface lying on the xz plane. */\nlet PacemPlaneElement = PacemPlaneElement_1 = class PacemPlaneElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a flat rectangle with the given width, length and per-axis segment subdivisions (defaulting to `1`x`1`, 4 segments each way). */\n static createMeshGeometry(width, length, widthSegments, lengthSegments) {\n width ||= 1.0;\n length ||= 1.0;\n widthSegments ||= 4;\n lengthSegments ||= 4;\n const halfWidth = width * .5, halfLength = length * .5;\n const nodes = [];\n const uv = [];\n const indices = [];\n const normals = [], normal = Geometry.LinearAlgebra.Vector3D.from(0, 0, 1);\n for (let j = 0; j <= lengthSegments; j++) {\n for (let i = 0; i <= widthSegments; i++) {\n const x = -halfWidth + i * width / (1.0 * widthSegments);\n const y = .0;\n const z = -halfLength + j * length / (1.0 * lengthSegments);\n nodes.push({ x, y, z });\n if (j < lengthSegments && i < widthSegments) {\n const rowPoints = widthSegments + 1;\n // const colPoints = lengthSegments + 1;\n const u_next = (i + 1.0) / (1.0 * widthSegments);\n const u = (1.0 * i) / (1.0 * widthSegments);\n const v_next = 1.0 - (j + 1.0) / (1.0 * lengthSegments);\n const v = 1.0 - (1.0 * j) / (1.0 * lengthSegments);\n indices.push((j + 1) * rowPoints + i);\n indices.push((j + 1) * rowPoints + i + 1);\n indices.push(j * rowPoints + i + 1);\n indices.push((j + 1) * rowPoints + i);\n indices.push(j * rowPoints + i + 1);\n indices.push(j * rowPoints + i);\n uv.push({ x: u, y: v_next });\n uv.push({ x: u_next, y: v_next });\n uv.push({ x: u_next, y: v });\n uv.push({ x: u, y: v_next });\n uv.push({ x: u_next, y: v });\n uv.push({ x: u, y: v });\n normals.push(normal, normal, normal, normal, normal, normal);\n }\n }\n }\n const geom = new MeshGeometry(nodes, indices, uv, normals);\n geom.key = `plane_${width}x${length}_w${widthSegments}_l${lengthSegments}`;\n // TODO: barycenter, boundingBox, boundingSphere\n return geom;\n }\n /** Computes the plane geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemPlaneElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'width':\n case 'length':\n case 'widthSegments':\n case 'lengthSegments':\n this.geometry = PacemPlaneElement_1.createMeshGeometry(this.width, this.length, this.widthSegments, this.lengthSegments);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPlaneElement.prototype, \"width\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPlaneElement.prototype, \"length\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPlaneElement.prototype, \"widthSegments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPlaneElement.prototype, \"lengthSegments\", void 0);\nPacemPlaneElement = PacemPlaneElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-plane' })\n], PacemPlaneElement);\nexport { PacemPlaneElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemTetrahedronElement_1, PacemOctahedronElement_1, PacemHexahedronElement_1, PacemIcosahedronElement_1, PacemDodecahedronElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { PacemBoxElement } from './box';\nimport { TAG_MIDDLE_NAME } from '../constants';\n//namespace Pacem.Components.Drawing3D {\nconst _utils = {\n parseFloats: function (input) {\n const pattern = /([\\d.-]+)/i;\n var match = pattern.exec(input);\n const ret = [];\n while (match != null) {\n const g = match[0];\n const j = parseFloat(g);\n ret.push(j);\n input = input.replace(g, '');\n match = pattern.exec(input);\n }\n return ret;\n }\n};\nconst Point3D = Geometry.LinearAlgebra.Vector3D;\n/**\n * Abstract base of the regular-polyhedron (Platonic solid) primitive custom elements — {@link PacemTetrahedronElement},\n * {@link PacemOctahedronElement}, {@link PacemHexahedronElement}, {@link PacemIcosahedronElement} and\n * {@link PacemDodecahedronElement} — each computing the {@link MeshGeometry} of a solid inscribed in a sphere of the\n * given {@link radius}.\n */\nexport class PolyhedronElement extends Pacem3DPrimitiveElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'radius') {\n this._assignMeshGeometry(val);\n }\n }\n _assignMeshGeometry(radius) {\n this.geometry = this.createMeshGeometry(radius > .0 ? radius : 1.0);\n }\n /** Computes the polyhedron geometry using a radius of `1` when {@link radius} hasn't been explicitly set. */\n createDefaultGeometry() {\n return this.createMeshGeometry(1.0);\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PolyhedronElement.prototype, \"radius\", void 0);\n// #region Tetrahedron\n/** `<pacem-3d-primitive-tetrahedron>`: computes the {@link MeshGeometry} of a regular tetrahedron (a Platonic solid with 4 triangular faces). */\nlet PacemTetrahedronElement = PacemTetrahedronElement_1 = class PacemTetrahedronElement extends PolyhedronElement {\n /** Builds the {@link MeshGeometry} of a tetrahedron inscribed in a sphere of the given radius (defaults to `1`). */\n static createMeshGeometry(radius) {\n radius ||= 1.0;\n const nodesCoordsString = \"0 0.5774 -0.8165, 0 0.5774 0.8165, 0.8165 -0.5774 0, -0.8165 -0.5774 0\";\n const nodesToParse = nodesCoordsString.split(',');\n const nodes = [];\n for (let i = 0; i < nodesToParse.length; i++) {\n const nodeToParse = nodesToParse[i];\n const pt3D = _utils.parseFloats(nodeToParse);\n nodes.push({ x: pt3D[0] * radius, y: pt3D[1] * radius, z: pt3D[2] * radius });\n }\n const indices = [1, 2, 0, 2, 3, 0, 3, 1, 0, 3, 2, 1];\n const textureCoordsString = \"0.5 0.9995, 0.5 0.0004995, 0.0004995 0.5, 0.9995 0.5, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995\";\n const pointsToParse = textureCoordsString.split(',');\n const texIndices = [4, 5, 6, 7, 8, 9, 10, 11, 0, 3, 2, 1];\n const uv = [];\n for (let i = 0; i < texIndices.length; i++) {\n const ndx = texIndices[i];\n const uvCoords = _utils.parseFloats(pointsToParse[ndx]);\n uv.push({ x: uvCoords[0], y: uvCoords[1] });\n }\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `tetrahedron_${radius}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n geom.boundingSphere = { center: Point3D.zero(), radius };\n return geom;\n }\n createMeshGeometry(radius = this.radius) {\n return PacemTetrahedronElement_1.createMeshGeometry(radius);\n }\n};\nPacemTetrahedronElement = PacemTetrahedronElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-tetrahedron' })\n], PacemTetrahedronElement);\nexport { PacemTetrahedronElement };\n// #endregion\n// #region Octahedron\n/** `<pacem-3d-primitive-octahedron>`: computes the {@link MeshGeometry} of a regular octahedron (a Platonic solid with 8 triangular faces). */\nlet PacemOctahedronElement = PacemOctahedronElement_1 = class PacemOctahedronElement extends PolyhedronElement {\n /** Builds the {@link MeshGeometry} of an octahedron inscribed in a sphere of the given radius (defaults to `1`). */\n static createMeshGeometry(radius) {\n radius ||= 1.0;\n // -------------------------------------------------------------------------------------------------\n const nodesCoordsString = \"0 0.7071 -0.7071, 0 0.7071 0.7071, 1 0 0, 0 -0.7071 -0.7071, -1 0 0, 0 -0.7071 0.7071\";\n const indices = [1, 2, 0, 2, 3, 0, 3, 4, 0, 4, 1, 0, 4, 5, 1, 5, 2, 1, 2, 5, 3, 4, 3, 5];\n const textureCoordsString = \"0.5 0.9995, 0.5 0.9995, 0.0004995 0.5, 0.5 0.9995, 0.9995 0.5, 0.5 0.0004995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995, 0.5 0.9995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995, 0.0004995 0.5, 0.5 0.0004995, 0.5 0.9995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.0004995, 0.5 0.9995\";\n const texIndices = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 19, 20, 21, 1, 2, 22, 23, 4, 3, 5];\n // -------------------------------------------------------------------------------------------------\n const nodesToParse = nodesCoordsString.split(',');\n const nodes = [];\n for (let i = 0; i < nodesToParse.length; i++) {\n const nodeToParse = nodesToParse[i];\n const pt3D = _utils.parseFloats(nodeToParse);\n nodes.push({ x: pt3D[0] * radius, y: pt3D[1] * radius, z: pt3D[2] * radius });\n }\n const pointsToParse = textureCoordsString.split(',');\n const uv = [];\n for (let i = 0; i < texIndices.length; i++) {\n const ndx = texIndices[i];\n const uvCoords = _utils.parseFloats(pointsToParse[ndx]);\n uv.push({ x: uvCoords[0], y: uvCoords[1] });\n }\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `octahedron_${radius}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n geom.boundingSphere = { center: Point3D.zero(), radius };\n return geom;\n }\n createMeshGeometry(radius = this.radius) {\n return PacemOctahedronElement_1.createMeshGeometry(radius);\n }\n};\nPacemOctahedronElement = PacemOctahedronElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-octahedron' })\n], PacemOctahedronElement);\nexport { PacemOctahedronElement };\n// #endregion\n// #region Hexahedron\n/** `<pacem-3d-primitive-hexahedron>`: computes the {@link MeshGeometry} of a regular hexahedron (a Platonic solid with 6 square faces, i.e. a cube). */\nlet PacemHexahedronElement = PacemHexahedronElement_1 = class PacemHexahedronElement extends PolyhedronElement {\n /** Builds the {@link MeshGeometry} of a cube inscribed in a sphere of the given radius (defaults to `1`), as an equal-sided {@link PacemBoxElement}. */\n static createMeshGeometry(radius) {\n radius ||= 1.0;\n const inv_sqrt3 = 1.0 / Math.sqrt(3.0);\n const w = 2.0 * radius * inv_sqrt3;\n const geom = PacemBoxElement.createMeshGeometry(w, w, w);\n geom.key = `hexahedron_${radius}`;\n return geom;\n }\n createMeshGeometry(radius = this.radius) {\n return PacemHexahedronElement_1.createMeshGeometry(radius);\n }\n};\nPacemHexahedronElement = PacemHexahedronElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-hexahedron' })\n], PacemHexahedronElement);\nexport { PacemHexahedronElement };\n// #endregion\n// #region Icosahedron\n/** `<pacem-3d-primitive-icosahedron>`: computes the {@link MeshGeometry} of a regular icosahedron (a Platonic solid with 20 triangular faces). */\nlet PacemIcosahedronElement = PacemIcosahedronElement_1 = class PacemIcosahedronElement extends PolyhedronElement {\n /** Builds the {@link MeshGeometry} of an icosahedron inscribed in a sphere of the given radius (defaults to `1`). */\n static createMeshGeometry(radius) {\n radius ||= 1.0;\n const nodesCoordsString = \"0 0.850651 -0.525731, 0 0.850651 0.525731, 0.850651 0.525731 0, 0.525731 0 -0.850651, -0.525731 0 -0.850651, -0.850651 0.525731 0, -0.525731 0 0.850651, 0.525731 0 0.850651, 0.850651 -0.525731 0, 0 -0.850651 0.525731, 0 -0.850651 -0.525731, -0.850651 -0.525731 0\";\n const indices = [1, 2, 0, 2, 3, 0, 3, 4, 0, 4, 5, 0, 5, 1, 0,\n 5, 6, 1, 6, 7, 1, 7, 2, 1, 2, 8, 3,\n 2, 7, 8, 6, 9, 7, 9, 8, 7, 8, 10, 3,\n 8, 9, 10, 6, 11, 9, 11, 10, 9, 10, 4, 3,\n 10, 11, 4, 6, 5, 11, 5, 4, 11];\n const textureCoordsString = \"0.5 0.808708, 0.5 0.999501, 0.5 0.808708, 0.191292 0.5, \" +\n \"0.000499547 0.5, 0.5 0.808708, 0.9995 0.5, 0.808708 0.5,\" +\n \"0.000499487 0.5, 0.5 0.191292, 0.5 0.000499487, 0.5 0.191292,\" +\n \"0.5 0.191292, 0.999501 0.5, 0.5 0.808708, 0.5 0.808708,\" +\n \"0.9995 0.5, 0.808708 0.999501, 0.191292 0.5, 0.808708 0.5,\" +\n \"0.5 0.999501, 0.808708 0.5, 0.999501 0.808708, 0.5 0.999501,\" +\n \"0.000499487 0.5, 0.5 0.191292, 0.5 0.808708, 0.9995 0.5,\" +\n \"0.808708 0.999501, 0.191292 0.5, 0.808708 0.5, 0.5 0.999501,\" +\n \"0.808708 0.5, 0.999501 0.808708, 0.5 0.808708, 0.5 0.191292,\" +\n \"0.9995 0.5, 0.000499547 0.5, 0.5 0.191292, 0.191292 0.5,\" +\n \"0.5 0.000499487, 0.808708 0.5, 0.5 0.000499487, 0.999501 0.191292,\" +\n \"0.5 0.191292, 0.808708 0.000499487, 0.9995 0.5, 0.5 0.191292,\" +\n \"0.5 0.808708, 0.9995 0.5, 0.5 0.191292, 0.808708 0.000499487,\" +\n \"0.999501 0.5, 0.5 0.808708, 0.5 0.000499487, 0.808708 0.5,\" +\n \"0.999501 0.191292, 0.808708 0.5, 0.5 0.808708, 0.5 0.191292\";\n const texIndices = [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\n 24, 25, 0, 26, 27, 28, 29, 30, 31, 32, 33, 1,\n 34, 35, 36, 2, 37, 38, 39, 40, 41, 42, 43, 7,\n 44, 45, 46, 8, 47, 48, 49, 50, 51, 52, 53, 9,\n 54, 55, 3, 10, 56, 57, 6, 58, 59, 5, 4, 11];\n // -------------------------------------------------------------------------------------------------\n const nodesToParse = nodesCoordsString.split(',');\n const nodes = [];\n for (let i = 0; i < nodesToParse.length; i++) {\n const nodeToParse = nodesToParse[i];\n const pt3D = _utils.parseFloats(nodeToParse);\n nodes.push({ x: pt3D[0] * radius, y: pt3D[1] * radius, z: pt3D[2] * radius });\n }\n const pointsToParse = textureCoordsString.split(',');\n const uv = [];\n for (let i = 0; i < texIndices.length; i++) {\n const ndx = texIndices[i];\n const uvCoords = _utils.parseFloats(pointsToParse[ndx]);\n uv.push({ x: uvCoords[0], y: uvCoords[1] });\n }\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `icosahedron_${radius}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n geom.boundingSphere = { center: Point3D.zero(), radius };\n return geom;\n }\n createMeshGeometry(radius = this.radius) {\n return PacemIcosahedronElement_1.createMeshGeometry(radius);\n }\n};\nPacemIcosahedronElement = PacemIcosahedronElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-icosahedron' })\n], PacemIcosahedronElement);\nexport { PacemIcosahedronElement };\n// #endregion\n// #region Dodecahedron\n/** `<pacem-3d-primitive-dodecahedron>`: computes the {@link MeshGeometry} of a regular dodecahedron (a Platonic solid with 12 pentagonal faces). */\nlet PacemDodecahedronElement = PacemDodecahedronElement_1 = class PacemDodecahedronElement extends PolyhedronElement {\n /** Builds the {@link MeshGeometry} of a dodecahedron inscribed in a sphere of the given radius (defaults to `1`). */\n static createMeshGeometry(radius) {\n radius ||= 1.0;\n const n1 = Point3D.from(0.356822 * radius, 0.934172 * radius, 0 * radius);\n const n2 = Point3D.from(-0.356822 * radius, 0.934172 * radius, 0 * radius);\n const n3 = Point3D.from(0.57735 * radius, 0.57735 * radius, -0.57735 * radius);\n const n4 = Point3D.from(0 * radius, 0.356822 * radius, -0.934172 * radius);\n const n5 = Point3D.from(-0.57735 * radius, 0.57735 * radius, -0.57735 * radius);\n const n6 = Point3D.from(-0.57735 * radius, 0.57735 * radius, 0.57735 * radius);\n const n7 = Point3D.from(0 * radius, 0.356822 * radius, 0.934172 * radius);\n const n8 = Point3D.from(0.57735 * radius, 0.57735 * radius, 0.57735 * radius);\n const n9 = Point3D.from(0.934172 * radius, 0 * radius, -0.356822 * radius);\n const n10 = Point3D.from(0.934172 * radius, 0 * radius, 0.356822 * radius);\n const n11 = Point3D.from(0 * radius, -0.356822 * radius, 0.934172 * radius);\n const n12 = Point3D.from(0.57735 * radius, -0.57735 * radius, 0.57735 * radius);\n const n13 = Point3D.from(0.57735 * radius, -0.57735 * radius, -0.57735 * radius);\n const n14 = Point3D.from(0.356822 * radius, -0.934172 * radius, 0 * radius);\n const n15 = Point3D.from(-0.57735 * radius, -0.57735 * radius, 0.57735 * radius);\n const n16 = Point3D.from(-0.356822 * radius, -0.934172 * radius, 0 * radius);\n const n17 = Point3D.from(0 * radius, -0.356822 * radius, -0.934172 * radius);\n const n18 = Point3D.from(-0.57735 * radius, -0.57735 * radius, -0.57735 * radius);\n const n19 = Point3D.from(-0.934172 * radius, 0 * radius, 0.356822 * radius);\n const n20 = Point3D.from(-0.934172 * radius, 0 * radius, -0.356822 * radius);\n const positions = [\n n1,\n n2,\n n3,\n n4,\n n5,\n n6,\n n7,\n n8,\n n9,\n n10,\n n11,\n n12,\n n13,\n n14,\n n15,\n n16,\n n17,\n n18,\n n19,\n n20\n ];\n const indices = [0, 2, 3, 0, 3, 4, 0, 4, 1, 1, 5, 6, 1, 6, 7,\n 1, 7, 0, 7, 9, 8, 7, 8, 2, 7, 2, 0,\n 7, 6, 10, 7, 10, 11, 7, 11, 9, 11, 13, 12,\n 11, 12, 8, 11, 8, 9, 11, 10, 14, 11, 14, 15,\n 11, 15, 13, 15, 17, 16, 15, 16, 12, 15, 12, 13,\n 15, 14, 18, 15, 18, 19, 15, 19, 17, 19, 4, 3,\n 19, 3, 16, 19, 16, 17, 19, 18, 5, 19, 5, 1,\n 19, 1, 4, 18, 14, 10, 18, 10, 6, 18, 6, 5,\n 3, 2, 8, 3, 8, 12, 3, 12, 16];\n const textureCoordsString = `0.5 0.999501, 0.5 0.999501, 0.191292 0.808708, 0.5 0.690792,\r\n 0.191292 0.808708, 0.191292 0.808708, 0.5 0.690792,\r\n 0.808708 0.808708, 0.000499517 0.5, 0.309208 0.5, 0.5 0.309208,\r\n 0.191292 0.191292, 0.191292 0.191292, 0.309208 0.5,\r\n 0.191292 0.191292, 0.5 0.000499517, 0.5 0.309208, 0.808708 0.191292,\r\n 0.000499517 0.5, 0.309208 0.5, 0.690792 0.5, 0.808708 0.808708,\r\n 0.5 0.999501, 0.690792 0.5, 0.5 0.999501, 0.191292 0.808708,\r\n 0.690792 0.5, 0.191292 0.808708, 0.309208 0.5, 0.309208 0.5,\r\n 0.191292 0.191292, 0.5 0.000499517, 0.309208 0.5, 0.5 0.000499517,\r\n 0.808708 0.191292, 0.309208 0.5, 0.808708 0.191292,\r\n 0.690792 0.5, 0.191292 0.808708, 0.309208 0.5, 0.690792 0.5,\r\n 0.191292 0.808708, 0.690792 0.5, 0.808708 0.808708,\r\n 0.191292 0.808708, 0.808708 0.808708, 0.808708 0.808708,\r\n 0.5 0.690792, 0.5 0.309208, 0.808708 0.808708, 0.5 0.309208,\r\n 0.808708 0.191292, 0.808708 0.191292, 0.9995 0.5, 0.191292 0.191292,\r\n 0.5 0.000499517, 0.808708 0.191292, 0.191292 0.191292,\r\n 0.808708 0.191292, 0.690792 0.5, 0.191292 0.191292,\r\n 0.690792 0.5, 0.191292 0.191292, 0.5 0.000499517, 0.808708 0.191292,\r\n 0.191292 0.191292, 0.808708 0.191292, 0.690792 0.5,\r\n 0.690792 0.5, 0.309208 0.5, 0.690792 0.5, 0.808708 0.808708,\r\n 0.5 0.999501, 0.690792 0.5, 0.5 0.999501, 0.191292 0.808708,\r\n 0.690792 0.5, 0.191292 0.808708, 0.5 0.000499517, 0.808708 0.191292,\r\n 0.690792 0.5, 0.5 0.000499517, 0.690792 0.5, 0.309208 0.5,\r\n 0.309208 0.5, 0.191292 0.191292, 0.9995 0.5, 0.808708 0.808708,\r\n 0.5 0.690792, 0.9995 0.5, 0.5 0.690792, 0.5 0.309208,\r\n 0.9995 0.5, 0.5 0.309208, 0.309208 0.5, 0.690792 0.5,\r\n 0.808708 0.808708, 0.309208 0.5, 0.808708 0.808708,\r\n 0.5 0.999501, 0.000499517 0.5, 0.5 0.309208, 0.000499517 0.5,\r\n 0.5 0.690792, 0.5 0.690792, 0.000499517 0.5, 0.5 0.690792,\r\n 0.191292 0.191292`;\n const texIndices = [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,\n 44, 45, 0, 46, 47, 48, 49, 50, 51, 7, 52, 53,\n 54, 55, 56, 57, 58, 59, 60, 61, 9, 62, 63, 64,\n 65, 66, 67, 11, 68, 69, 70, 71, 72, 73, 74, 75,\n 76, 77, 13, 78, 79, 80, 81, 82, 83, 15, 84, 85,\n 86, 87, 88, 89, 90, 91, 92, 93, 17, 94, 95, 96,\n 97, 98, 99, 19, 1, 4, 100, 14, 101, 102, 10, 103,\n 18, 6, 5, 104, 2, 105, 106, 8, 107, 3, 12, 16];\n // -------------------------------------------------------------------------------------------------\n const pointsToParse = textureCoordsString.split(',');\n const uv = [];\n for (let i = 0; i < texIndices.length; i++) {\n const ndx = texIndices[i];\n const uvCoords = _utils.parseFloats(pointsToParse[ndx]);\n uv.push({ x: uvCoords[0], y: uvCoords[1] });\n }\n const geom = new MeshGeometry(positions, indices, uv);\n geom.key = `dodecahedron_${radius}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n geom.boundingSphere = { center: Point3D.zero(), radius };\n return geom;\n }\n createMeshGeometry(radius = this.radius) {\n return PacemDodecahedronElement_1.createMeshGeometry(radius);\n }\n};\nPacemDodecahedronElement = PacemDodecahedronElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-dodecahedron' })\n], PacemDodecahedronElement);\nexport { PacemDodecahedronElement };\n// #endregion\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemSphereElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME, DEG2RAD } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-sphere>`: computes the {@link MeshGeometry} of a UV sphere. */\nlet PacemSphereElement = PacemSphereElement_1 = class PacemSphereElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a sphere with the given radius (defaults to `1`) and tessellation (defaults to `8`). */\n static createMeshGeometry(radius = 1, segs = 8) {\n //\n const nodes = [];\n const uv = [];\n const indices = [];\n //\n const r = radius, tessellation = segs;\n const theta = DEG2RAD * (360.0 / tessellation);\n const segments = tessellation % 2 == 0 ? tessellation / 2 : (tessellation - 1) / 2;\n // top vertex\n nodes.push({ x: .0, y: r, z: .0 });\n for (let j = 1; j < segments; j++) {\n // loop \"latitude\"\n const angle1 = theta * j;\n const cos_angle1 = Math.cos(angle1);\n const sin_angle1 = Math.sin(angle1);\n const v = 1.0 - 1.0 * j / segments;\n for (let i = 0; i < tessellation; i++) {\n // loop \"longitude\"\n const angle2 = theta * i - Math.PI / 2.0;\n const cos_angle2 = Math.cos(angle2);\n const sin_angle2 = Math.sin(angle2);\n const x = r * sin_angle1 * cos_angle2;\n const y = r * cos_angle1;\n const z = r * sin_angle1 * sin_angle2;\n nodes.push({ x, y, z });\n // coordinates & texture\n const i_prev = i == 0 ? tessellation - 1 : i - 1;\n const u = i == 0 ? .0 : 1.0 - 1.0 * i / tessellation;\n const u_prev = 1.0 - 1.0 * i_prev / tessellation;\n // triangles\n if (j == 1) {\n indices.push(1 + i);\n indices.push(1 + i_prev);\n indices.push(0);\n //\n uv.push({ x: u, y: v });\n uv.push({ x: u_prev, y: v });\n uv.push({ x: .5, y: 1.0 });\n }\n else {\n indices.push((j - 1) * tessellation + i + 1);\n indices.push((j - 1) * tessellation + i_prev + 1);\n indices.push((j - 2) * tessellation + i_prev + 1);\n indices.push((j - 1) * tessellation + i + 1);\n indices.push((j - 2) * tessellation + i_prev + 1);\n indices.push((j - 2) * tessellation + i + 1);\n //\n const v_prev = 1.0 - (j - 1.0) / segments;\n //var faceUV = [];\n uv.push({ x: u, y: v });\n uv.push({ x: u_prev, y: v });\n uv.push({ x: u_prev, y: v_prev });\n uv.push({ x: u, y: v });\n uv.push({ x: u_prev, y: v_prev });\n uv.push({ x: u, y: v_prev });\n }\n }\n }\n // bottom vertex\n nodes.push({ x: .0, y: -r, z: .0 });\n const last = nodes.length - 1;\n for (let i = 0; i < tessellation; i++) {\n const j = segments - 2;\n const i_prev = i == 0 ? tessellation - 1 : i - 1;\n const u = i == 0 ? .0 : 1.0 - 1.0 * i / tessellation;\n const u_prev = 1.0 - 1.0 * i_prev / tessellation;\n const v = 1.0 - (j + 1.0) / segments;\n // triangles\n indices.push(last);\n indices.push(j * tessellation + 1 + i_prev);\n indices.push(j * tessellation + 1 + i);\n uv.push({ x: .5, y: 0 });\n uv.push({ x: u_prev, y: v });\n uv.push({ x: u, y: v });\n }\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `sphere_${radius}_s${segs}`;\n computeSharpVertexNormals(geom);\n return geom;\n }\n /** Computes the sphere geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemSphereElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'radius':\n case 'segments':\n this.geometry = PacemSphereElement_1.createMeshGeometry(this.radius, this.segments);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSphereElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSphereElement.prototype, \"segments\", void 0);\nPacemSphereElement = PacemSphereElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-sphere' })\n], PacemSphereElement);\nexport { PacemSphereElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemTorusElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME, DEG2RAD } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-torus>`: computes the {@link MeshGeometry} of a torus (donut shape): a tube revolved around a central axis. */\nlet PacemTorusElement = PacemTorusElement_1 = class PacemTorusElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a torus with the given outer/inner radii and ring/tube segment counts. */\n static createMeshGeometry(radius = 1, innerRadius = .25, segments = 24, sides = 12) {\n //\n const nodes = [];\n const uv = [];\n const coords = [];\n const theta = DEG2RAD * (360.0 / segments);\n const phi = DEG2RAD * (360.0 / sides);\n const r1 = radius;\n const r2 = innerRadius;\n for (let j = 0; j < segments; j++) {\n // Math.PI/2 adjustement (useful for UV mapping)\n const angle1 = theta * j - Math.PI / 2.0;\n const sin_angle1 = Math.sin(angle1);\n const cos_angle1 = Math.cos(angle1);\n for (let i = 0; i < sides; i++) {\n // Math.PI adjustement (useful for UV mapping)\n const angle2 = phi * i + Math.PI;\n const cos_angle2 = Math.cos(angle2);\n const x = r1 * cos_angle1 + r2 * cos_angle2 * cos_angle1;\n const y = r2 * Math.sin(angle2);\n const z = r1 * sin_angle1 + r2 * cos_angle2 * sin_angle1;\n nodes.push({ x, y, z });\n const prev_j = j > 0 ? j - 1 : segments - 1;\n const prev_i = i > 0 ? i - 1 : sides - 1;\n const u = j == 0 ? .0 : 1.0 - 1.0 * j / segments;\n const v = i > 0 ? 1.0 * i / sides : 1.0;\n const u_prev = j > 0 ? 1.0 - (j - 1.0) / segments : 1.0 / segments;\n const v_prev = i > 0 ? (i - 1.0) / sides : 1.0 - 1.0 / sides;\n // triangles <=> Int32Collection\n // <=> PointCollection\n coords.push(j * sides + prev_i);\n coords.push(prev_j * sides + prev_i);\n coords.push(prev_j * sides + i);\n coords.push(j * sides + prev_i);\n coords.push(prev_j * sides + i);\n coords.push(j * sides + i);\n //\n uv.push({ x: u, y: v_prev });\n uv.push({ x: u_prev, y: v_prev });\n uv.push({ x: u_prev, y: v });\n uv.push({ x: u, y: v_prev });\n uv.push({ x: u_prev, y: v });\n uv.push({ x: u, y: v });\n }\n }\n const geom = new MeshGeometry(nodes, coords, uv);\n geom.key = `torus_${radius}x${innerRadius}_t${segments}_s${sides}`;\n computeSharpVertexNormals(geom);\n return geom;\n }\n /** Computes the torus geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemTorusElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'radius':\n case 'innerRadius':\n case 'segments':\n case 'sides':\n this.geometry = PacemTorusElement_1.createMeshGeometry(this.radius, this.innerRadius, this.segments, this.sides);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemTorusElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemTorusElement.prototype, \"innerRadius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemTorusElement.prototype, \"segments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemTorusElement.prototype, \"sides\", void 0);\nPacemTorusElement = PacemTorusElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-torus' })\n], PacemTorusElement);\nexport { PacemTorusElement };\n","import { CustomEventUtils, Utils } from '@pacem/pacem-core';\nimport { Point } from '@pacem/pacem-foundation';\nimport { isCamera } from '../types';\nfunction _clipPoint(evt, rect) {\n let x, y;\n if (Point.isPoint(evt)) {\n x = evt.x;\n y = evt.y;\n }\n else {\n const { page } = CustomEventUtils.getEventCoordinates(evt);\n const p = { x: page.x - rect.x, y: page.y - rect.y };\n x = p.x;\n y = p.y;\n }\n const clipX = x / rect.width * 2 - 1;\n const clipY = y / rect.height * -2 + 1;\n return { x: clipX, y: clipY };\n}\n/** Shared helpers used by the concrete `pacem-3d` rendering-backend adapters (Three.js, WebGPU): type guards, buffer flattening, camera lookup and pointer-to-clip-space conversion. */\nexport class AdapterUtils {\n /** Returns whether the given object is a {@link MeshGeometry} (has `positions` and `triangleIndices` arrays). */\n static isMeshGeometry(obj) {\n return 'positions' in obj && Utils.isArray(obj.positions)\n && 'triangleIndices' in obj && Utils.isArray(obj.triangleIndices);\n }\n /** Returns whether the given object is a {@link Vector3D} (has numeric `x`/`y`/`z`). */\n static isVector3D(obj) {\n return 'x' in obj && typeof obj.x === 'number'\n && 'y' in obj && typeof obj.y === 'number'\n && 'z' in obj && typeof obj.z === 'number';\n }\n /** Returns whether the given object is an {@link Rgba} color (has numeric `r`/`g`/`b`). */\n static isRgba(obj) {\n return 'r' in obj && typeof obj.r === 'number'\n && 'g' in obj && typeof obj.g === 'number'\n && 'b' in obj && typeof obj.b === 'number';\n }\n /**\n * Flattens an array of 3D vectors, UV coordinates, or RGBA colors into a single flat number array (interleaved components), ready for a GPU buffer.\n * @param array Array of {@link Vector3D}, {@link UVMap} entries, or {@link Rgba} values to flatten\n */\n static flattenVectorArray(array) {\n const retval = [];\n for (let v of array) {\n if (AdapterUtils.isVector3D(v)) {\n retval.push(v.x, v.y, v.z);\n }\n else if (AdapterUtils.isRgba(v)) {\n retval.push(v.r, v.g, v.b, v.a ?? 1);\n }\n else {\n retval.push(v.x, v.y);\n }\n }\n return retval;\n }\n /**\n * Returns the first non-hidden {@link Camera} among the given renderables, if any.\n * @param items Renderable items to search\n */\n static findCamera(items) {\n return (items || []).find(r => isCamera(r) && !r.hide);\n }\n clipPixel(evt, viewport) {\n if (viewport instanceof HTMLElement) {\n viewport = Utils.offsetRect(viewport);\n }\n return _clipPoint(evt, viewport);\n }\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils, CustomElementUtils } from '@pacem/pacem-core';\nimport { Colors } from '@pacem/pacem-foundation';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { StalePropertyFlag, isMesh, isUi3DObject, Pacem3DAdapterElement, Pacem3DObjectElement, Pacem3DGroupElement, Pacem3DLightElement, Pacem3DCameraElement, Pacem3DPerspectiveCameraElement, Pacem3DOrthographicCameraElement, Pacem3DMeshElement } from '../types';\nimport { MeshGeometry, LineGeometry } from '../geometry';\nimport { AdapterUtils } from './shared';\nimport { isStandardMaterial, isPhongMaterial, isLambertMaterial, isLineMaterial, isMaterial } from '../materials/material';\n//namespace Pacem.Components.Drawing3D {\nfunction isMeshGeometry(obj) {\n return AdapterUtils.isMeshGeometry(obj);\n}\nfunction isVector3D(obj) {\n return AdapterUtils.isVector3D(obj);\n}\nfunction flattenVectorArray(array) {\n return AdapterUtils.flattenVectorArray(array);\n}\nconst threeJsVersion = '0.152.2', lastOrbitCtrlJsVersion = '0.147.0';\n;\nconst consts = {\n VERSION: threeJsVersion,\n API_URI: `https://unpkg.com/three@${threeJsVersion}/build/three.min.js`,\n ORBIT_URI: `https://unpkg.com/three@${lastOrbitCtrlJsVersion}/examples/js/controls/OrbitControls.js`,\n LOADERS: [\n //`https://unpkg.com/three@${threeJsVersion}/examples/js/loaders/OBJLoader.js`,\n //`https://unpkg.com/three@${threeJsVersion}/examples/js/loaders/MTLLoader.js`,\n ],\n DEFAULT_MATERIAL: function () {\n return new THREE.MeshStandardMaterial({ color: '#069', flatShading: true });\n }\n};\nfunction matrix3DToMatrix4(m) {\n const matrix = new THREE.Matrix4();\n matrix.set(m.m11, m.m12, m.m13, m.m14, m.m21, m.m22, m.m23, m.m24, m.m31, m.m32, m.m33, m.m34, m.offsetX, m.offsetY, m.offsetZ, m.m44);\n return matrix;\n}\n// as of https://codepen.io/discoverthreejs/full/vwVeZB\nfunction fitCameraToSelection(camera, controls /* OrbitControls */, selection, fitOffset = 1.333) {\n const box = new THREE.Box3();\n for (const object of selection) {\n box.expandByObject(object);\n }\n const size = box.getSize(new THREE.Vector3());\n const center = box.getCenter(new THREE.Vector3());\n const maxSize = Math.max(size.x, size.y, size.z);\n const fitHeightDistance = maxSize / (2 * Math.atan(Math.PI * camera.fov / 360));\n const fitWidthDistance = fitHeightDistance / camera.aspect;\n const distance = fitOffset * Math.max(fitHeightDistance, fitWidthDistance);\n const hasControls = !Utils.isNull(controls);\n var direction;\n if (hasControls) {\n direction = controls.target.clone()\n .sub(camera.position)\n .normalize()\n .multiplyScalar(distance);\n controls.maxDistance = distance * 10;\n controls.target.copy(center);\n }\n camera.near = distance / 100;\n camera.far = distance * 100;\n camera.updateProjectionMatrix();\n if (hasControls) {\n camera.position.copy(controls.target).sub(direction);\n controls.update();\n }\n}\nfunction flattenMatrix3D(m) {\n return [\n // right way to translate the matrix3D to matrix4\n m.m11, m.m21, m.m31, m.offsetX,\n m.m12, m.m22, m.m32, m.offsetY,\n m.m13, m.m23, m.m33, m.offsetZ,\n m.m14, m.m24, m.m34, m.m44,\n ];\n}\nfunction nodeGeometryToBufferGeometry(mesh) {\n const geometry = new THREE.BufferGeometry();\n const vertices = flattenVectorArray(mesh.positions);\n geometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));\n if (mesh instanceof MeshGeometry) {\n if (!Utils.isNullOrEmpty(mesh.triangleIndices)) {\n geometry.setIndex(mesh.triangleIndices);\n }\n const vertices = flattenVectorArray(mesh.positions);\n geometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));\n const uvs = flattenVectorArray(mesh.textureCoordinates);\n geometry.setAttribute('uv', new THREE.Float32BufferAttribute(uvs, 2));\n if (Utils.isNullOrEmpty(mesh.normals)) {\n geometry.computeVertexNormals();\n }\n else {\n const normals = flattenVectorArray(mesh.normals);\n geometry.setAttribute('normal', new THREE.Float32BufferAttribute(normals, 3));\n }\n }\n return geometry;\n}\nfunction lightToLight(item) {\n var light;\n switch (item.type) {\n case 'spot':\n const spotLight = new THREE.SpotLight();\n spotLight.target.position.set(item.target.x, item.target.y, item.target.z);\n light = spotLight;\n break;\n default:\n light = new THREE.PointLight();\n break;\n }\n return light;\n}\nfunction materialToMaterial(material) {\n if (Utils.isNull(material)) {\n return null;\n }\n const lineBase = {\n color: typeof material.color === 'string' ? material.color : Colors.stringify(material.color),\n opacity: material.opacity ?? 1,\n transparent: true,\n wireframe: material.wireframe ?? false,\n visible: material.visible ?? true\n };\n const base = Utils.extend({}, lineBase, { wireframe: material.wireframe ?? false });\n const mipMapMaterial = (m) => {\n if (material.map) {\n m['map'] = new THREE.TextureLoader().load(material.map, _ => {\n // console.log('texture loaded!');\n m.needsUpdate = true;\n });\n }\n return m;\n };\n if (isStandardMaterial(material)) {\n const std = mipMapMaterial(new THREE.MeshStandardMaterial(Utils.extend(base, {\n roughness: material.roughness,\n metalness: material.metalness,\n emissive: material.emissiveColor,\n flatShading: material.flatShading,\n refractionRatio: material.refractionRatio,\n })));\n return std;\n }\n else if (isPhongMaterial(material)) {\n const phong = mipMapMaterial(new THREE.MeshPhongMaterial(Utils.extend(base, {\n shininess: material.shininess,\n emissive: material.emissiveColor,\n flatShading: material.flatShading,\n specular: material.specularColor,\n reflectivity: material.reflectivity,\n refractionRatio: material.refractionRatio,\n })));\n return phong;\n }\n else if (isLambertMaterial(material)) {\n const lambert = mipMapMaterial(new THREE.MeshLambertMaterial(Utils.extend(base, {\n emissive: material.emissiveColor,\n reflectivity: material.reflectivity,\n refractionRatio: material.refractionRatio,\n })));\n return lambert;\n }\n else if (isLineMaterial(material)) {\n const dash = material.dashArray && material.dashArray[0] || null, gap = material.dashArray && material.dashArray.length > 1 && material.dashArray[1] || dash;\n const lineMatOptions = Utils.extend(lineBase, {\n linecap: material.lineCap ?? 'round',\n linejoin: material.lineJoin ?? 'round',\n linewidth: material.lineWidth ?? 1\n });\n return Utils.isNullOrEmpty(material.dashArray) ?\n new THREE.LineBasicMaterial(lineMatOptions)\n : new THREE.LineDashedMaterial(Utils.extend({ dashSize: dash, gapSize: gap }, lineMatOptions));\n }\n else if (isMaterial(material)) {\n const basic = mipMapMaterial(new THREE.MeshBasicMaterial(base));\n return basic;\n }\n else {\n return null;\n }\n}\nfunction materialToMaterials(frontMaterial, backMaterial, multiAllowed) {\n // material\n const multi = multiAllowed;\n // composite\n const materials = [];\n // front mat\n const material = materialToMaterial(frontMaterial);\n if (!Utils.isNull(material)) {\n material.side = THREE.FrontSide;\n materials.push(material);\n }\n // back mat\n if (!Utils.isNull(backMaterial)) {\n if (backMaterial == frontMaterial) {\n material.side = THREE.DoubleSide;\n }\n else {\n // multi-material\n const backsideMaterial = materialToMaterial(backMaterial);\n if (!Utils.isNull(backsideMaterial)) {\n backsideMaterial.side = THREE.BackSide;\n materials.push(backsideMaterial);\n }\n }\n }\n return multi && materials.length > 1 ? materials : material;\n}\nfunction load(item) {\n if (!Utils.isNullOrEmpty(item.content)) {\n const type = item.type?.toLowerCase();\n switch (type) {\n case 'obj':\n const obj = new THREE['OBJLoader']();\n return obj.parse(item.content);\n default:\n const loader = new THREE.ObjectLoader();\n return loader.parse(item.content);\n }\n }\n else {\n throw new Error('Missing content.');\n }\n}\nfunction meshType(geometry) {\n return geometry instanceof LineGeometry ? THREE.Line : THREE.Mesh;\n}\nfunction build(mesh) {\n if (Utils.isNullOrEmpty(mesh.geometry)) {\n return null;\n }\n const ctor = meshType(mesh.geometry);\n return new ctor();\n}\nfunction isTHREEAvailable() {\n return 'THREE' in window;\n}\nasync function whenTHREEAvailable(...args) {\n const start = Date.now();\n var initialized = false;\n do {\n initialized = isTHREEAvailable();\n for (let pred of args) {\n initialized &&= pred();\n }\n if (!initialized) {\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n } while (!initialized && (Date.now() - start) < 30000);\n if (!initialized) {\n throw new Error('The wait for THREE adapter initialization timed out.');\n }\n}\n/**\n * `<pacem-3d-three-adapter>`: {@link Pacem3DAdapterElement} rendering backend built on top of the\n * {@link https://threejs.org/ | Three.js}/WebGL library (lazily loaded from a CDN on first use). Translates the\n * {@link RenderableElement} scene graph into `THREE.Object3D`s, renders them with a `THREE.WebGLRenderer` and\n * supports mouse-driven orbit controls via {@link orbit}.\n */\nlet Pacem3DThreeAdapterElement = class Pacem3DThreeAdapterElement extends Pacem3DAdapterElement {\n constructor() {\n super(...arguments);\n this._renderer = null;\n this._camera = null;\n this._scene = null;\n this._orbitCtrls = null;\n this._objects = new WeakMap();\n this._dict = {};\n this._orbitControlsDelegate = (_) => {\n };\n this._ensureAndRefresh = (item, object3D, parent) => {\n object3D.matrixAutoUpdate = false;\n // choose whether to render the object or not\n if (object3D.visible = !item.hide) {\n // the modeling part\n // 1. pacem 3d mesh\n if (isMesh(item)) {\n let mesh3D = object3D;\n if (item.flags.indexOf(StalePropertyFlag.Geometry) >= 0) {\n mesh3D.geometry.dispose();\n // swap Line <-> Mesh according to the geometry\n const mesh3D2 = build(item);\n if (mesh3D2.constructor.name !== mesh3D.constructor.name) {\n parent.remove(object3D);\n delete this._dict[object3D.id];\n object3D = mesh3D = mesh3D2;\n }\n // /swap\n mesh3D.geometry = nodeGeometryToBufferGeometry(item.geometry);\n }\n if (item.flags.indexOf(StalePropertyFlag.Material) >= 0) {\n if (Utils.isArray(mesh3D.material)) {\n for (let m of mesh3D.material) {\n m.dispose();\n }\n }\n else {\n mesh3D.material.dispose();\n }\n mesh3D.material = materialToMaterials(item.material) || consts.DEFAULT_MATERIAL();\n }\n }\n // 2. 3d 'native' object\n else if (item instanceof Pacem3DObjectElement\n && (item.flags.indexOf(StalePropertyFlag.Material) >= 0 || item.flags.indexOf(StalePropertyFlag.Geometry) >= 0)) {\n // swap reference\n object3D.parent && object3D.parent.remove(object3D);\n object3D = load(item);\n }\n // 3. grouping object\n else if (item instanceof Pacem3DGroupElement) {\n if (item.flags.indexOf(StalePropertyFlag.Children) >= 0) {\n // remove all children\n for (let j = object3D.children.length - 1; j >= 0; j--) {\n const child = object3D.children[j];\n object3D.remove(child);\n }\n // re-create\n for (let child of item.items) {\n this._addOrUpdateItem(child, object3D);\n }\n }\n }\n // 4. light\n else if (item instanceof Pacem3DLightElement) {\n const light = object3D;\n if (item.flags.indexOf(StalePropertyFlag.Light) >= 0) {\n light.color = new THREE.Color(item.color);\n light.intensity = item.intensity;\n }\n }\n // the configuring part\n let posv = item.position; // || new THREE.Vector3(0, 0, 0);\n if (isUi3DObject(item)\n && !Utils.isNull(item.transformMatrix)\n && (item.flags.indexOf(StalePropertyFlag.Position) >= 0 || item.flags.indexOf(StalePropertyFlag.Transform) >= 0)) {\n const positionMatrix = Geometry.LinearAlgebra.Matrix3D.from(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, posv.x, posv.y, posv.z, 1);\n // item.transformMatrix is a local matrix thus\n // prepend in the multiplication (i.e. FIRST apply transform THEN apply positioning)\n const transformMatrix = Geometry.LinearAlgebra.Matrix3D.multiply(item.transformMatrix, positionMatrix);\n THREE.Matrix4.prototype.set.apply(object3D.matrix, flattenMatrix3D(transformMatrix));\n //object3D.updateMatrix();\n }\n else if (item.flags.indexOf(StalePropertyFlag.Position) >= 0) {\n object3D.position.set(posv.x, posv.y, posv.z);\n object3D.updateMatrix();\n }\n }\n object3D.userData = item.tag;\n if (Utils.isNull(parent.getObjectById(object3D.id))) {\n parent.add(object3D);\n this._dict[object3D.id] = item;\n }\n // clear flags\n item.flags.splice(0);\n return object3D;\n };\n //#endregion\n }\n _assertMonoStage(scene) {\n if (scene != this._3d && !Utils.isNull(this._3d)) {\n throw new Error('Stage mismatch.');\n }\n }\n dispose(scene) {\n // do nothing\n }\n snapshot(scene, background, type, quality) {\n if (scene != this._3d) {\n return Promise.resolve(null);\n }\n const jpeg = !Utils.isNullOrEmpty(background), mime = type ?? (jpeg ? 'image/jpeg' : null), compression = quality ?? (jpeg ? .9 : null);\n return new Promise((resolve, _) => {\n this.render();\n Utils.snapshotElement(this._stage, background, mime, compression).then(resolve);\n });\n }\n project(scene, point3D) {\n this._assertMonoStage(scene);\n // check feasibility\n if (Utils.isNull(this._camera) || Utils.isNull(this._stage))\n return null;\n //\n const stage = this._stage;\n const vector = new THREE.Vector3(point3D.x, point3D.y, point3D.z);\n const width = stage.width, height = stage.height;\n const widthHalf = width / 2, heightHalf = height / 2;\n const point = vector.project(this._camera);\n const x = (point.x * widthHalf) + widthHalf;\n const y = -(point.y * heightHalf) + heightHalf;\n return { x: x, y: y };\n }\n zoomFit(scene, ...items) {\n this._assertMonoStage(scene);\n return new Promise((resolve, reject) => {\n const camera = this._camera;\n const map = this._objects;\n const targets = items.filter(o => map.has(o)).map(o => map.get(o));\n if (Utils.isNull(camera) || Utils.isNullOrEmpty(targets)) {\n resolve();\n }\n fitCameraToSelection(camera, this._orbitCtrls, targets);\n resolve();\n });\n }\n getScene(scene) {\n this._assertMonoStage(scene);\n return this._scene;\n }\n raycast(scene, point, size, callback) {\n this._assertMonoStage(scene);\n if (isTHREEAvailable() && !Utils.isNull(this._camera)) {\n const camera = this._camera;\n const vector = new THREE.Vector2((point.x / size.width) * 2 - 1, -(point.y / size.height) * 2 + 1);\n const raycaster = new THREE.Raycaster();\n raycaster.setFromCamera(vector, camera);\n const intersects = raycaster.intersectObjects(this._scene.children, true);\n let obj;\n let intersection;\n let j = 0;\n while (intersects.length > j && (intersection = intersects[j++]) && (obj = intersection.object)) {\n const item = this._dict[obj.id];\n if (item.inert) {\n continue;\n }\n const v = intersection.point, x = v.x, y = v.y, z = v.z, point = { x, y, z };\n callback({ object: this._dict[obj.id], point });\n return;\n }\n }\n callback(null);\n }\n // #region ABSTRACT IMPLEMENTATION\n async initialize(container) {\n if (!Utils.isNull(this._stage)) {\n return this._stage;\n }\n this._3d = container;\n const wrapper = container.stage;\n const stage = this._stage = document.createElement('canvas');\n wrapper.innerHTML = '';\n wrapper.appendChild(stage);\n if (!isTHREEAvailable()) {\n await CustomElementUtils.importjs(consts.API_URI);\n await whenTHREEAvailable();\n await Promise.all([CustomElementUtils.importjs(consts.ORBIT_URI)]\n .concat(consts.LOADERS.map(js => CustomElementUtils.importjs(js))));\n }\n // here comes THREE.js\n this._scene = new THREE.Scene();\n // this._scene.add(new THREE.Mesh(new THREE.PlaneGeometry(1, 1, 1, 1), consts.DEFAULT_MATERIAL()));\n this.invalidateSize(container);\n let w = this._stage.width, h = this._stage.height;\n //if (!ctrl.renderer)\n let parameters = {\n canvas: stage, antialias: true, stencil: false, alpha: container.transparent ?? true //, clearAlpha: 1\n };\n this._renderer = new THREE.WebGLRenderer(parameters);\n this._renderer.setSize(w, h);\n if (container.background && !container.transparent) {\n let clr = container.background;\n if (typeof clr === 'string') {\n clr = Colors.parse(clr);\n }\n const theejsClr = new THREE.Color(clr.r, clr.g, clr.b);\n this._renderer.setClearColor(theejsClr, clr.a);\n }\n this.orbit = container.orbit;\n return stage;\n }\n _setCamera(cam) {\n this._camera = cam;\n this.invalidateSize(this._3d);\n this._disposeOrbitControls();\n // re-init\n if (this.orbit) {\n this._initOrbitControls();\n }\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'orbit') {\n if (val === true)\n this._initOrbitControls();\n else\n this._disposeOrbitControls();\n }\n }\n _initOrbitControls() {\n const cam = this._camera;\n if (Utils.isNull(this._3d) || Utils.isNull(cam)) {\n return;\n }\n const controls = this._orbitCtrls = new THREE['OrbitControls'](cam, this._3d.stage);\n controls.addEventListener('change', this._orbitControlsDelegate);\n }\n _disposeOrbitControls() {\n const controls = this._orbitCtrls;\n if (Utils.isNull(controls)) {\n return;\n }\n controls.removeEventListener('change', this._orbitControlsDelegate);\n controls.dispose();\n }\n _updateRenderer(container, renderer = this._renderer) {\n if (!container.transparent) {\n if (container.background) {\n let clr = container.background;\n if (typeof clr === 'string') {\n clr = Colors.parse(clr);\n }\n const theejsClr = new THREE.Color(clr.r, clr.g, clr.b);\n renderer.setClearColor(theejsClr, clr.a);\n }\n else {\n renderer.setClearColor(null);\n }\n }\n else {\n renderer.setClearAlpha(0);\n }\n }\n invalidateSize(scene, size = scene.size) {\n this._assertMonoStage(scene);\n if (!isTHREEAvailable() || Utils.isNull(size)) {\n return;\n }\n let w = size.width;\n let h = size.height;\n this._stage.width = w;\n this._stage.height = h;\n let camera = this._camera;\n if (camera instanceof THREE.PerspectiveCamera) {\n camera.aspect = w / h;\n camera.updateProjectionMatrix();\n }\n if (this._renderer) {\n this._renderer.setSize(w, h);\n this._updateRenderer(scene);\n }\n }\n removeItem(scene, item) {\n this._assertMonoStage(scene);\n const bag = this._objects;\n const obj3d = bag.get(item);\n if (!Utils.isNull(obj3d)) {\n this._scene.remove(obj3d);\n delete this._dict[obj3d.id];\n bag.delete(item);\n }\n }\n updateItem(scene, item) {\n this._assertMonoStage(scene);\n const bag = this._objects;\n if (!Utils.isNull(item.parent) && bag.has(item.parent)) {\n const parent3d = bag.get(item.parent);\n this._addOrUpdateItem(item, parent3d);\n }\n else {\n this._addOrUpdateItem(item);\n }\n }\n addItem(scene, item) {\n this._assertMonoStage(scene);\n this._addOrUpdateItem(item);\n }\n _addOrUpdateItem(item, parent = this._scene) {\n if (!isTHREEAvailable() || Utils.isNull(parent)) {\n return;\n }\n if (item instanceof Pacem3DCameraElement) {\n if (item instanceof Pacem3DPerspectiveCameraElement) {\n var pcam;\n if (this._camera instanceof THREE.PerspectiveCamera) {\n var pcam = this._camera;\n }\n else {\n pcam = new THREE.PerspectiveCamera();\n }\n const lookAtVector = new THREE.Vector3(item.lookAt.x, item.lookAt.y, item.lookAt.z);\n pcam.lookAt(lookAtVector);\n pcam.position.set(item.position.x, item.position.y, item.position.z);\n pcam.fov = item.fov;\n pcam.aspect = item.aspect;\n pcam.near = item.near;\n pcam.far = item.far;\n //\n this._setCamera(pcam);\n //\n const orbit = this._orbitCtrls;\n if (!Utils.isNull(orbit) && orbit.object === pcam) {\n orbit.target = lookAtVector;\n orbit.update();\n }\n }\n else if (item instanceof Pacem3DOrthographicCameraElement) {\n // bunch of duplicated code\n // no need to refactor since it's a deprecating branch of development\n var ocam;\n if (this._camera instanceof THREE.OrthographicCamera) {\n var ocam = this._camera;\n }\n else {\n ocam = new THREE.OrthographicCamera();\n }\n const lookAtVector = new THREE.Vector3(item.lookAt.x, item.lookAt.y, item.lookAt.z);\n ocam.lookAt(lookAtVector);\n ocam.position.set(item.position.x, item.position.y, item.position.z);\n ocam.left = item.left;\n ocam.right = item.right;\n ocam.top = item.top;\n ocam.bottom = item.bottom;\n ocam.near = item.near;\n ocam.far = item.far;\n //\n this._setCamera(ocam);\n //\n const orbit = this._orbitCtrls;\n if (!Utils.isNull(orbit) && orbit.object === ocam) {\n orbit.target = lookAtVector;\n orbit.update();\n }\n }\n else {\n // cam not supported\n throw new Error(`Camera ${item} not supported.`);\n }\n }\n else {\n if (!this._objects.has(item)) {\n // adding\n const then = (object3D) => {\n // clear flags\n // item.flags.splice(0);\n if (object3D) {\n object3D = this._ensureAndRefresh(item, object3D, parent);\n this._objects.set(item, object3D);\n }\n else {\n // object not built\n // throw?\n }\n };\n // TODO: switch to interface matching\n if (item instanceof Pacem3DObjectElement) {\n const mesh = load(item);\n then(mesh);\n }\n else if (item instanceof Pacem3DMeshElement) {\n // beware! a change in the geometry could cause a change in the object3D type\n const mesh = build(item);\n then(mesh);\n }\n else if (item instanceof Pacem3DLightElement) {\n const light = lightToLight(item);\n then(light);\n }\n else if (item instanceof Pacem3DGroupElement) {\n const group = new THREE.Group();\n then(group);\n }\n }\n else {\n // updating\n const obj = this._objects.get(item);\n const objOut = this._ensureAndRefresh(item, obj, parent);\n if (objOut != obj) {\n this._objects.set(item, objOut);\n }\n }\n }\n }\n render() {\n if (this._camera) {\n this._renderer.render(this._scene, this._camera);\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], Pacem3DThreeAdapterElement.prototype, \"orbit\", void 0);\nPacem3DThreeAdapterElement = __decorate([\n CustomElement({ tagName: P + '-3d-three-adapter' })\n], Pacem3DThreeAdapterElement);\nexport { Pacem3DThreeAdapterElement };\n","//namespace Pacem.Drawing3D.WebGPU {\n/** Prefix prepended to every WebGPU resource label ({@link GPURenderPipeline}s, bind groups, layouts, shader modules, ...) created by this adapter, so they're easy to spot in browser devtools/profilers. */\nexport const LABEL_PREFIX = 'pacem-3d-';\n/** Maximum value representable by a 32-bit unsigned integer (2^32 - 1). Used as the color-picking \"no object\" sentinel `u32` id. */\nexport const U32_MAX = 4_294_967_295;\n// #region vertex state\n/** Vertex buffer slot (index into {@link GPUVertexState.buffers}) carrying mesh vertex positions (or the packed position+normal+uv buffer, see {@link PipelineOptions.packedVertices}). */\nexport const VERTEX_BUFFER_INDEX_MESH_POSITION = 0;\n/** Vertex buffer slot (index into {@link GPUVertexState.buffers}) carrying mesh vertex normals, when vertices aren't packed. */\nexport const VERTEX_BUFFER_INDEX_MESH_NORMAL = 1;\n/** Vertex buffer slot (index into {@link GPUVertexState.buffers}) carrying mesh UV coordinates, when vertices aren't packed. */\nexport const VERTEX_BUFFER_INDEX_MESH_UV = 2;\n/** `@location` index of the surface normal in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_NORMAL = 0;\n/** `@location` index of the world-space vertex position in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_VERTEX = 1;\n/** `@location` index of the UV coordinate in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_UV = 2;\n/** `@location` index of the vertex/triangle index in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_INDEX = 3;\n/** `@location` index of the picking ray data in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_RAY = 4;\n/** `@location` index of the instance index in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_INSTANCE = 5;\n/** `@group` index of the world/normal transform uniform bind group. */\nexport const UNIFORM_GROUP_INDEX_TRANSFORM = 1;\n/** `@group` index of the camera view/projection uniform bind group. */\nexport const UNIFORM_GROUP_INDEX_CAMERA = 0;\n/** `@group` index of the pointer/interaction uniform bind group. Deliberately aliased to {@link UNIFORM_GROUP_INDEX_CAMERA} so interaction data shares the camera's binding group. */\nexport const UNIFORM_GROUP_INDEX_INTERACTION = UNIFORM_GROUP_INDEX_CAMERA; // put it in camera same binding group\n/** `@group` index of the line-geometry storage bind group (positions + line properties). */\nexport const STORAGE_GROUP_INDEX_LINE = 2;\n/** `@group` index of the color-picking (object-id) uniform bind group. */\nexport const UNIFORM_GROUP_INDEX_COLORPICKING = 2;\n/** `@binding` index of the world/normal transform uniform, within {@link UNIFORM_GROUP_INDEX_TRANSFORM}. */\nexport const UNIFORM_BINDING_INDEX_TRANSFORM = 0;\n/** `@binding` index of the camera view/projection uniform, within {@link UNIFORM_GROUP_INDEX_CAMERA}. */\nexport const UNIFORM_BINDING_INDEX_CAMERA = 0;\n/** `@binding` index of the pointer/interaction uniform, within {@link UNIFORM_GROUP_INDEX_INTERACTION}. */\nexport const UNIFORM_BINDING_INDEX_INTERACTION = 1;\n// #endregion\n// #region fragment state\n/** `@group` index of the material (storage buffer + optional texture/sampler) bind group. */\nexport const MATERIAL_GROUP_INDEX = 2;\n/** `@group` index of the per-light uniform bind group, immediately following {@link MATERIAL_GROUP_INDEX}. */\nexport const UNIFORM_GROUP_INDEX_LIGHTING = MATERIAL_GROUP_INDEX + 1;\n/** `@binding` index of the material storage buffer, within {@link MATERIAL_GROUP_INDEX}. */\nexport const STORAGE_MATERIAL_INDEX = 0;\n/** `@binding` index of the material's texture sampler, within {@link MATERIAL_GROUP_INDEX}. */\nexport const SAMPLER_BINDING_INDEX = 1;\n/** `@binding` index of the material's texture, within {@link MATERIAL_GROUP_INDEX}. */\nexport const TEXTURE_BINDING_INDEX = 2;\n/** WGSL identifier used to reference the bound material struct/storage-buffer in generated fragment shader code. */\nexport const MATERIAL_REFERENCE = 'material';\n/** WGSL identifier used to reference the running vertex/fragment color in generated shader fragments (spliced in and out by texture/lighting stages). */\nexport const VERTEX_COLOR_REFERENCE = 'color';\n/** WGSL identifier used to reference the accumulated ambient-light contribution in generated fragment shader code. */\nexport const AMBIENT_COLOR_REFERENCE = 'ambient';\n/** WGSL identifier used to reference the accumulated (directional/omni) lighting contribution in generated fragment shader code. */\nexport const LIGHTING_COLOR_REFERENCE = 'lighting';\n// #endregion\n// #region WGSL\n/** Name of the WGSL struct describing per-vertex input attributes, used by generated vertex shader code. */\nexport const WGSL_VERTEXINPUT_STRUCT_NAME = 'VertexInput';\n/** Name of the WGSL struct describing vertex-stage output / fragment-stage input, used by generated vertex and fragment shader code. */\nexport const WGSL_VERTEXOUTPUT_STRUCT_NAME = 'VertexOutput';\n/** Name of the WGSL struct describing the pointer/interaction uniform data, used by generated shader code. */\nexport const WGSL_INTERACTIONDATA_STRUCT_NAME = 'InteractionData';\n// #endregion\n// Kinda polyfill for WebGPU constants, as TypeScript 6.0 does include WebGPU types but does NOT include these constants for magic numbers:\n/** Polyfill for the WebGPU `GPUBufferUsage` bitflags (`lib.dom` declares the `GPUBufferUsageFlags` type but not these numeric flag values). Combine with `|` when creating a {@link GPUBuffer}, e.g. `GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST`. */\nexport var GPUBufferUsage;\n(function (GPUBufferUsage) {\n GPUBufferUsage[GPUBufferUsage[\"COPY_SRC\"] = 4] = \"COPY_SRC\";\n GPUBufferUsage[GPUBufferUsage[\"COPY_DST\"] = 8] = \"COPY_DST\";\n GPUBufferUsage[GPUBufferUsage[\"INDEX\"] = 16] = \"INDEX\";\n GPUBufferUsage[GPUBufferUsage[\"INDIRECT\"] = 256] = \"INDIRECT\";\n GPUBufferUsage[GPUBufferUsage[\"MAP_READ\"] = 1] = \"MAP_READ\";\n GPUBufferUsage[GPUBufferUsage[\"MAP_WRITE\"] = 2] = \"MAP_WRITE\";\n GPUBufferUsage[GPUBufferUsage[\"QUERY_RESOLVE\"] = 512] = \"QUERY_RESOLVE\";\n GPUBufferUsage[GPUBufferUsage[\"STORAGE\"] = 128] = \"STORAGE\";\n GPUBufferUsage[GPUBufferUsage[\"UNIFORM\"] = 64] = \"UNIFORM\";\n GPUBufferUsage[GPUBufferUsage[\"VERTEX\"] = 32] = \"VERTEX\";\n})(GPUBufferUsage || (GPUBufferUsage = {}));\n/** Polyfill for the WebGPU `GPUTextureUsage` bitflags (`lib.dom` declares the `GPUTextureUsageFlags` type but not these numeric flag values). Combine with `|` when creating a {@link GPUTexture}. */\nexport var GPUTextureUsage;\n(function (GPUTextureUsage) {\n GPUTextureUsage[GPUTextureUsage[\"COPY_SRC\"] = 1] = \"COPY_SRC\";\n GPUTextureUsage[GPUTextureUsage[\"COPY_DST\"] = 2] = \"COPY_DST\";\n GPUTextureUsage[GPUTextureUsage[\"RENDER_ATTACHMENT\"] = 16] = \"RENDER_ATTACHMENT\";\n GPUTextureUsage[GPUTextureUsage[\"STORAGE_BINDING\"] = 8] = \"STORAGE_BINDING\";\n GPUTextureUsage[GPUTextureUsage[\"TEXTURE_BINDING\"] = 4] = \"TEXTURE_BINDING\";\n})(GPUTextureUsage || (GPUTextureUsage = {}));\n/** Polyfill for the WebGPU `GPUShaderStage` bitflags (`lib.dom` declares the `GPUShaderStageFlags` type but not these numeric flag values). Combine with `|` in {@link GPUBindGroupLayoutEntry.visibility}, e.g. `GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT`. */\nexport var GPUShaderStage;\n(function (GPUShaderStage) {\n GPUShaderStage[GPUShaderStage[\"VERTEX\"] = 1] = \"VERTEX\";\n GPUShaderStage[GPUShaderStage[\"FRAGMENT\"] = 2] = \"FRAGMENT\";\n GPUShaderStage[GPUShaderStage[\"COMPUTE\"] = 4] = \"COMPUTE\";\n})(GPUShaderStage || (GPUShaderStage = {}));\n/** Polyfill for the WebGPU `GPUMapMode` flags (`lib.dom` declares the type but not these numeric values). Used with {@link GPUBuffer.mapAsync}. */\nexport var GPUMapMode;\n(function (GPUMapMode) {\n GPUMapMode[GPUMapMode[\"READ\"] = 1] = \"READ\";\n GPUMapMode[GPUMapMode[\"WRITE\"] = 2] = \"WRITE\";\n})(GPUMapMode || (GPUMapMode = {}));\n","/** Categorizes a bind group by the role of the resources it carries (mesh transforms, camera, texture, light, interaction data), used to look up {@link BindGroupDefinition}s via {@link WGSL.bindings}. */\nexport var WGSLBindingType;\n(function (WGSLBindingType) {\n WGSLBindingType[\"Mesh\"] = \"mesh\";\n WGSLBindingType[\"Camera\"] = \"camera\";\n WGSLBindingType[\"Texture\"] = \"texture\";\n WGSLBindingType[\"Light\"] = \"light\";\n WGSLBindingType[\"Interaction\"] = \"interaction\";\n})(WGSLBindingType || (WGSLBindingType = {}));\n","import { GPUBufferUsage } from './constants';\n//namespace Pacem.Drawing3D.WebGPU {\n/**\n * Low-level factory for typed {@link GPUBuffer}s (vertex, uniform, storage, index) used throughout the WebGPU backend\n * to upload CPU-side geometry/material/uniform data to the GPU. Vertex and index buffers are populated immediately\n * (via `mappedAtCreation`); uniform and storage buffers are allocated empty, sized to `data`, and are expected to be\n * populated later via {@link GPUQueue.writeBuffer} (see {@link Buffer}/`abstractions.ts` and the `fresh`-tracking\n * buffer accessors in `renderablebuffer.ts`).\n */\nexport class Buffers {\n /**\n * Creates a {@link GPUBuffer} usable as a vertex buffer (`VERTEX | COPY_DST`), writing `data` into it immediately.\n * @param device The {@link GPUDevice} to allocate the buffer on.\n * @param data Vertex attribute data (e.g. flattened positions/normals/uv coordinates).\n * @param label Optional debug label.\n */\n static create(device, data, label = '') {\n const buffer = device.createBuffer({\n size: data.byteLength, label,\n usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n mappedAtCreation: true\n });\n new Float32Array(buffer.getMappedRange()).set(data);\n buffer.unmap();\n return buffer;\n }\n static createUniform(device, data, label = '') {\n return device.createBuffer({\n size: data.byteLength, label,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n }\n static createStorage(device, data, label = '') {\n return device.createBuffer({\n size: data.byteLength, label,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n });\n }\n /**\n * Creates a {@link GPUBuffer} usable as an index buffer (`INDEX | COPY_DST`), writing `data` into it immediately.\n * @param device The {@link GPUDevice} to allocate the buffer on.\n * @param data 16-bit vertex indices.\n * @param label Optional debug label.\n */\n static createIndexed(device, data, label = '') {\n const buffer = device.createBuffer({\n size: data.byteLength, label,\n usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,\n mappedAtCreation: true\n });\n new Uint16Array(buffer.getMappedRange()).set(data);\n buffer.unmap();\n return buffer;\n }\n}\n/**\n * Helpers to build {@link GPUVertexBufferLayout}s describing how a vertex buffer's contents map to shader `@location`\n * inputs, for use in a {@link GPURenderPipelineDescriptor.vertex} state.\n */\nexport class BufferLayouts {\n static createVertex(shaderLocationStart = 0, size = 3, ...sizes) {\n const attributes = [];\n let fullSize = 0, index = 0;\n for (let sz of [size].concat(sizes)) {\n attributes.push({\n shaderLocation: shaderLocationStart + index,\n offset: fullSize * Float32Array.BYTES_PER_ELEMENT,\n format: `float32x${sz}`,\n });\n fullSize += sz;\n index++;\n }\n return {\n arrayStride: fullSize /* x, y, z */ * Float32Array.BYTES_PER_ELEMENT,\n attributes,\n stepMode: 'vertex'\n };\n }\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { VERTEX_OUTPUT_LOCATION_NORMAL, VERTEX_OUTPUT_LOCATION_VERTEX, VERTEX_OUTPUT_LOCATION_UV, VERTEX_OUTPUT_LOCATION_INDEX, VERTEX_OUTPUT_LOCATION_RAY, VERTEX_OUTPUT_LOCATION_INSTANCE, MATERIAL_GROUP_INDEX, STORAGE_MATERIAL_INDEX, VERTEX_COLOR_REFERENCE, LIGHTING_COLOR_REFERENCE, AMBIENT_COLOR_REFERENCE } from '../constants';\n/** Fallback options used by {@link getBasicMaterialFragmentWgsl}: mirrors the `VERTEX_OUTPUT_LOCATION_*` layout produced by `mesh-vertex.ts` and reads the diffuse color from {@link MATERIAL_GROUP_INDEX}/{@link STORAGE_MATERIAL_INDEX}. */\nconst DefaultBasicMaterialFragmentOptions = {\n outputNormalLocation: VERTEX_OUTPUT_LOCATION_NORMAL,\n outputVertexLocation: VERTEX_OUTPUT_LOCATION_VERTEX,\n outputUvLocation: VERTEX_OUTPUT_LOCATION_UV,\n outputVertexIndexLocation: VERTEX_OUTPUT_LOCATION_INDEX,\n outputRayIndexLocation: VERTEX_OUTPUT_LOCATION_RAY,\n outputInstanceIndexLocation: VERTEX_OUTPUT_LOCATION_INSTANCE,\n storageMaterialGroupIndex: MATERIAL_GROUP_INDEX,\n storageMaterialBindingIndex: STORAGE_MATERIAL_INDEX,\n};\n/** Joins a {@link WGSLFragmentExtra} string array (`definitions`/`bindings`) with CRLF newlines, or returns an empty string when omitted. */\nfunction adaptWGSLStringArray(array = []) {\n return array.join('\\r\\n');\n}\n/**\n * Turns a {@link WGSLFragmentExtra.modifiers} array into a block of WGSL statements to inline into `main`. Entries\n * already ending with `;` are emitted verbatim; bare expressions are wrapped into `${VERTEX_COLOR_REFERENCE} = <expr>;`\n * so lighting/texture snippets (see {@link ambientLight}/{@link directionalLight}/{@link omniLight}/{@link textureMap})\n * can either replace or contribute to the running `color`/`ambient`/`lighting` accumulators.\n */\nfunction adaptWGSLModifierStringArray(array = []) {\n let output = '';\n for (let modifier of array) {\n const trimmed = modifier.trim();\n if (trimmed.endsWith(';')) {\n output += (trimmed + '\\r\\n\\t');\n }\n else {\n output += `${VERTEX_COLOR_REFERENCE} = ${trimmed};\\r\\n\\t`;\n }\n }\n return output;\n}\n/**\n * Composes the fragment shader for the \"basic\" (unlit-by-default) material: it reads a flat `diffuseColor` from a\n * storage buffer, then lets `extensions.modifiers` (lighting/texture snippets) accumulate into the `color`,\n * `ambient` and `lighting` WGSL variables ({@link VERTEX_COLOR_REFERENCE}/{@link AMBIENT_COLOR_REFERENCE}/{@link LIGHTING_COLOR_REFERENCE}).\n * If nothing wrote a `lighting` color (alpha stays `0`), it is treated as fully lit (`white`) so the material\n * renders unshaded when no light snippet is attached; the final output is `color * lighting + ambient`.\n *\n * Splices `extensions.definitions`/`extensions.bindings`/`extensions.modifiers` (see {@link WGSLFragmentExtra}) into\n * the `// definitions`, `// bindings` and body sections of the generated source, alongside the fixed\n * `diffuseColor` storage binding and the `@fragment fn main` signature matching `mesh-vertex.ts`'s `VertexOutput`.\n *\n * @param extensions Extra WGSL `definitions`/`bindings`/`modifiers` to merge in (e.g. lighting/texture contributions).\n * @param options Location/binding overrides; defaults to {@link DefaultBasicMaterialFragmentOptions}, matching the vertex-stage outputs produced by `mesh-vertex.ts`.\n * @returns Complete WGSL fragment-shader source with a single `@fragment fn main` entry point returning `@location(0) vec4f`.\n */\nexport function getBasicMaterialFragmentWgsl(extensions = {}, options = DefaultBasicMaterialFragmentOptions) {\n const opts = Utils.extend({}, DefaultBasicMaterialFragmentOptions, options);\n const definitions = adaptWGSLStringArray(extensions.definitions), bindings = adaptWGSLStringArray(extensions.bindings), modifiers = adaptWGSLModifierStringArray(extensions.modifiers);\n const color = VERTEX_COLOR_REFERENCE, lighting = LIGHTING_COLOR_REFERENCE, ambient = AMBIENT_COLOR_REFERENCE;\n return `// definitions\r\n\r\n${definitions}\r\n\r\n// bindings\r\n@group(${opts.storageMaterialGroupIndex}) @binding(${opts.storageMaterialBindingIndex}) var<storage, read> diffuseColor: vec4f;\r\n${bindings}\r\n\r\nconst empty = vec4f(0,0,0,0);\r\nconst white = vec4f(1,1,1,1);\r\n\r\n@fragment fn main (\r\n @builtin(position) position: vec4f, // clip-space position\r\n @location(${opts.outputNormalLocation}) normal: vec3f, // world-space normal\r\n @location(${opts.outputVertexLocation}) vertex: vec3f, // world-space position\r\n @location(${opts.outputUvLocation}) uv: vec2f,\r\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index: u32, // vertex index,\r\n @location(${opts.outputRayIndexLocation}) ray: vec3f, // ray (eye-to-vertex) vector\r\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\r\n) -> @location(0) vec4f {\r\n var ${color} = diffuseColor;\r\n var ${ambient}: vec4f = empty;\r\n var ${lighting}: vec4f = empty;\r\n\r\n // modifiers\r\n ${modifiers}\r\n\r\n ${lighting} = select(white, ${lighting}, ${lighting}.a > 0);\r\n return ${color} * ${lighting} + ${ambient};\r\n}`;\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { STORAGE_GROUP_INDEX_LINE, STORAGE_MATERIAL_INDEX } from '../constants';\n/** Fallback options used by {@link getLineMaterialFragmentWgsl}: reads instance/vertex index from locations 0/1 (matching `line-vertex.ts`'s `VertexOutput`) and the color storage buffer at {@link STORAGE_GROUP_INDEX_LINE}` + 1`/{@link STORAGE_MATERIAL_INDEX}. */\nconst DefaultLineMaterialFragmentOptions = {\n outputInstanceIndexLocation: 0,\n outputVertexIndexLocation: 1,\n storageMaterialGroupIndex: STORAGE_GROUP_INDEX_LINE + 1,\n storageMaterialBindingIndex: STORAGE_MATERIAL_INDEX,\n};\n/** Joins a {@link WGSLFragmentExtra} string array (`definitions`/`bindings`) with CRLF newlines, or returns an empty string when omitted. */\nfunction adaptWGSLStringArray(array = []) {\n return array.join('\\r\\n');\n}\n/**\n * Turns a {@link WGSLFragmentExtra.modifiers} array into a block of WGSL statements to inline into `main`. Entries\n * already ending with `;` are emitted verbatim (assumed to be full statements); bare expressions are wrapped into\n * `output = <expr>;` so each modifier can either replace or contribute to the fragment's `output` color variable.\n */\nfunction adaptWGSLModifierStringArray(array = []) {\n let output = '';\n for (let modifier of array) {\n const trimmed = modifier.trim();\n if (trimmed.endsWith(';')) {\n output += (trimmed + '\\r\\n');\n }\n else {\n output += `output = ${trimmed};\\r\\n`;\n }\n }\n return output;\n}\n/**\n * Composes the fragment shader for line/polyline rendering: it looks up the current vertex's color from a\n * per-vertex `vertexColors` storage buffer (indexed modulo its length via `getVertexColor`, so a shorter palette\n * cycles/repeats across a longer line) and returns it as `@location(0) vec4f`, honoring any `extensions.modifiers`\n * applied afterwards (e.g. dashing, fading).\n *\n * Splices `extensions.definitions`/`extensions.bindings`/`extensions.modifiers` (see {@link WGSLFragmentExtra},\n * typically produced by the light snippets in this folder) into the `// definitions`, `// bindings` and body\n * sections of the generated source, in addition to the fixed `vertexColors` storage binding.\n *\n * @param extensions Extra WGSL `definitions`/`bindings`/`modifiers` to merge in (e.g. lighting contributions).\n * @param options Binding/location overrides; defaults to {@link DefaultLineMaterialFragmentOptions}, matching the vertex-stage outputs produced by `line-vertex.ts`.\n * @returns Complete WGSL fragment-shader source with a single `@fragment fn main` entry point.\n */\nexport function getLineMaterialFragmentWgsl(extensions = {}, options = DefaultLineMaterialFragmentOptions) {\n const opts = Utils.extend({}, DefaultLineMaterialFragmentOptions, options);\n const definitions = adaptWGSLStringArray(extensions.definitions), bindings = adaptWGSLStringArray(extensions.bindings), modifiers = adaptWGSLModifierStringArray(extensions.modifiers);\n return `// definitions\r\n${definitions}\r\n\r\n// bindings\r\n@group(${options.storageMaterialGroupIndex}) @binding(${options.storageMaterialBindingIndex}) var<storage, read> vertexColors: array<vec4f>;\r\n${bindings}\r\n\r\nfn getVertexColor(index: u32) -> vec4f {\r\n let numColors = arrayLength(&vertexColors);\r\n let vertexColorIndex = index % numColors;\r\n return vertexColors[vertexColorIndex];\r\n}\r\n\r\n@fragment fn main (\r\n @builtin(position) position: vec4f, // clip-space position\r\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance: u32, // instance index\r\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index: u32 // vertex index\r\n) -> @location(0) vec4f {\r\n var output = getVertexColor(index);\r\n\r\n // modifiers\r\n ${modifiers}\r\n\r\n return output;\r\n}`;\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { Colors } from '@pacem/pacem-foundation';\nimport { isBasicMaterial, isLineMaterial, KnownShader } from '../../materials/material';\nimport { Buffers } from './buffers';\nimport { GPUTextureUsage } from './constants';\nimport { getBasicMaterialFragmentWgsl } from './wgsl/basic-material-fragment';\nimport { getLineMaterialFragmentWgsl } from './wgsl/line-material-fragment';\nimport { LABEL_PREFIX } from './constants';\n//namespace Pacem.Drawing3D.WebGPU {\n/**\n * Factory that converts a scene-facing {@link Material3D} (`../../materials/material.ts`) into its WebGPU-side\n * counterpart ({@link Material}, `abstractions.ts`): a {@link BasicMaterial} or {@link LineMaterial} wrapping the GPU\n * buffer/texture/WGSL-fragment logic consumed when building render pipelines (see `pipelinefactory.ts`).\n */\nexport class Materials {\n /**\n * Wraps `material` in the {@link Material} implementation matching its `shader`.\n * @param material The scene material to wrap.\n * @returns A {@link BasicMaterial} or {@link LineMaterial}, depending on `material.shader`.\n * @throws {TypeError} If `material.shader` isn't one of the supported {@link KnownShader} values.\n */\n static create(material) {\n if (isBasicMaterial(material)) {\n return new BasicMaterial(material);\n }\n if (isLineMaterial(material)) {\n return new LineMaterial(material);\n }\n throw new TypeError(`Material type '${material.shader}' not supported.`);\n }\n}\nconst EmptyMaterialWGSLDelegates = {\n// empty delegates\n};\nclass MaterialBase {\n constructor(material) {\n if (Utils.isNull(this.#material = material)) {\n throw new ReferenceError(\"Null material provided.\");\n }\n }\n #material;\n get material() { return this.#material; }\n get wgsl() {\n return EmptyMaterialWGSLDelegates;\n }\n buffer({ device }, label = LABEL_PREFIX + 'material-' + this.shader + '-buffer') {\n const { r, g, b, a } = this._diffuseColor();\n const materialValue = new Float32Array([r, g, b, a]);\n return { buffer: Buffers.createStorage(device, materialValue, label), value: materialValue, version: performance.now() };\n }\n _diffuseColor() {\n const { visible, opacity, color } = this.material;\n if (!(visible ?? true)) {\n return { r: 0, g: 0, b: 0, a: 0 };\n }\n const retval = typeof color === 'string' ? Colors.parse(color) : (color ?? { r: 1, g: 1, b: 1, a: 1 });\n if (opacity >= 0 && opacity <= 1) {\n return Utils.extend(retval, { a: retval.a * opacity });\n }\n return retval;\n }\n}\n/**\n * WebGPU-side counterpart of a {@link BasicMaterial3D}: supplies the diffuse-color storage buffer (inherited from\n * {@link MaterialBase.buffer}) and, when the material has a `texture`, allocates the backing {@link GPUTexture}\n * (pixel data is copied in later by the mesh pipeline's material bind-group setup, see `pipelinefactory.ts`).\n */\nexport class BasicMaterial extends MaterialBase {\n get shader() {\n return KnownShader.Basic;\n }\n constructor(material) {\n super(material);\n if (material.shader != this.shader) {\n throw new TypeError(\"Basic material expected.\");\n }\n }\n /**\n * Allocates the (uninitialized) {@link GPUTexture} for the material's `texture`, if any.\n * @param key Must be `'texture'`; any other {@link MaterialKey} (or a material without a `texture`) yields `null`.\n */\n texture({ device }, key = 'texture') {\n const material = this.material;\n if (key === 'texture' && !Utils.isNull(material.texture)) {\n const texBmp = material.texture;\n const texture = device.createTexture({\n format: 'rgba8unorm',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_DST,\n size: [texBmp.width, texBmp.height],\n });\n return { texture, source: texBmp };\n }\n return null;\n }\n // TODO: put it in the material instance/interface\n /** Basic-material fragment shader WGSL source generator; see `wgsl/basic-material-fragment.ts`. */\n static { this.fragment = getBasicMaterialFragmentWgsl; }\n}\n/**\n * WebGPU-side counterpart of a {@link LineMaterial3D}: supplies the diffuse-color storage buffer (inherited from\n * {@link MaterialBase.buffer}) plus a dedicated `'line'` uniform buffer holding the canvas size and half line-width,\n * consumed by the line vertex shader (`wgsl/line-vertex.ts`).\n */\nexport class LineMaterial extends MaterialBase {\n get shader() {\n return KnownShader.Line;\n }\n constructor(material) {\n super(material);\n if (material.shader != this.shader) {\n throw new TypeError(\"Line material expected.\");\n }\n }\n /**\n * Returns the `'line'` uniform buffer (canvas width/height and half line-width) for `key === 'line'`; otherwise\n * defers to the inherited diffuse-color buffer.\n * @param ctx WebGPU context supplying the device and canvas.\n * @param key Which buffer to build; only `'line'` is handled specially.\n */\n buffer(ctx, key) {\n switch (key) {\n case 'line':\n const { device, canvas } = ctx;\n const lineMaterial = this.material;\n const lineValue = new Float32Array([canvas.clientWidth, canvas.clientHeight, lineMaterial.lineWidth / 2]);\n return { buffer: Buffers.createUniform(device, lineValue, LABEL_PREFIX + 'line-' + this.shader + '-buffer'), value: lineValue, version: performance.now() };\n default:\n return super.buffer(ctx);\n }\n }\n /** Lines have no texture support; always returns `null`. */\n texture(_) {\n return null;\n }\n /** Line-material fragment shader WGSL source generator; see `wgsl/line-material-fragment.ts`. */\n static { this.fragment = getLineMaterialFragmentWgsl; }\n}\n","import { WGSL_VERTEXINPUT_STRUCT_NAME, WGSL_VERTEXOUTPUT_STRUCT_NAME, WGSL_INTERACTIONDATA_STRUCT_NAME } from '../constants';\n//namespace Pacem.Drawing3D.WebGPU {\n/** Placeholder identifiers (`input`, `data`) fed to a {@link VertexInputModifierDelegate}/{@link VertexOutputModifierDelegate} callback when {@link extractMeshVertexModifierFunctionComponents} needs to materialize its WGSL source before parsing it. */\nconst defaultVertexGeometryModifierArgs = ['input', 'data'];\n//const defaultVertexGeometryModifier: VertexInputModifierDelegate = (...defaultVertexGeometryModifierArgs) => {\n// const [inputRef, dataRef] = defaultVertexGeometryModifierArgs;\n// return `fn echo(${inputRef}: ${WGSL_VERTEXINPUT_STRUCT_NAME}, ${dataRef}: ${WGSL_INTERACTIONDATA_STRUCT_NAME}) -> ${WGSL_VERTEXINPUT_STRUCT_NAME} { return ${inputRef}; }`;\n//};\n/**\n * Parses a user-supplied vertex-stage modifier (see {@link VertexInputModifierDelegate}/{@link VertexOutputModifierDelegate},\n * consumed by `mesh-vertex.ts`'s `getMeshVertexWgsl`) into its WGSL function name, parameter names and body, so the\n * caller can inline it as a standalone `fn` definition and reference it by name from the generated vertex shader.\n *\n * If `wgsl` is a callback rather than a raw string, it is first invoked with the placeholder argument names in\n * {@link defaultVertexGeometryModifierArgs} to obtain its WGSL source. The resulting source is then matched against\n * `fn <name>(<arg0>: <ArgType>, <arg1>: InteractionData) -> <ArgType> { <body> }`, where `<ArgType>` must be either\n * `VertexInput` ({@link WGSL_VERTEXINPUT_STRUCT_NAME}) or `VertexOutput` ({@link WGSL_VERTEXOUTPUT_STRUCT_NAME}) and\n * must match on both sides of the signature (an input modifier both takes and returns `VertexInput`, an output\n * modifier both takes and returns `VertexOutput`), with the second parameter always typed\n * {@link WGSL_INTERACTIONDATA_STRUCT_NAME}.\n *\n * @param wgsl Raw WGSL function source, or a delegate that produces it when called with `(inputRef, interactionDataRef)`.\n * @returns The parsed function's `name`, its two parameter `args` (in order), and its `body` (the statements between the braces, trimmed).\n * @throws If the source doesn't match the required single-function signature, or if its parameter types are inconsistent with the modifier contract.\n */\nexport function extractMeshVertexModifierFunctionComponents(wgsl) {\n if (typeof wgsl !== 'string') {\n wgsl = wgsl(...defaultVertexGeometryModifierArgs);\n }\n // regex that remove all the wgsl comments and extract the function name, arguments and body\n const regex = new RegExp(`fn\\\\s+(\\\\w+)\\\\s*\\\\(([^)]*)\\\\)\\\\s*->\\\\s*(${WGSL_VERTEXINPUT_STRUCT_NAME}|${WGSL_VERTEXOUTPUT_STRUCT_NAME})\\\\s*{((.|\\\\n)+)}\\\\s*$`);\n const match = wgsl.match(regex);\n if (match) {\n const name = match[1];\n const args = match[2].split(',').map(arg => {\n const kvp = arg.split(':');\n return { name: kvp[0].trim(), type: kvp[1].trim() };\n });\n if (args.length !== 2\n || args[0].type !== match[3] // the first argument type must match the function return type\n || args[1].type !== WGSL_INTERACTIONDATA_STRUCT_NAME) {\n throw new Error(`Invalid modifier function. Invalid signature types (arg1: ${args[0]?.type}, arg2: ${args[1]?.type})`);\n }\n const body = match[4].trim();\n return { name, args: args.map(i => i.name), body };\n }\n else {\n throw new Error(`Invalid modifier function. Must be a valid WGSL function with the signature: fn name(arg1: ${WGSL_VERTEXINPUT_STRUCT_NAME}|${WGSL_VERTEXOUTPUT_STRUCT_NAME}, arg2: ${WGSL_INTERACTIONDATA_STRUCT_NAME}) -> ${WGSL_VERTEXINPUT_STRUCT_NAME}|${WGSL_VERTEXOUTPUT_STRUCT_NAME}`);\n }\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { VERTEX_OUTPUT_LOCATION_NORMAL, VERTEX_OUTPUT_LOCATION_VERTEX, VERTEX_OUTPUT_LOCATION_UV, VERTEX_OUTPUT_LOCATION_INDEX, VERTEX_OUTPUT_LOCATION_RAY, VERTEX_OUTPUT_LOCATION_INSTANCE, VERTEX_BUFFER_INDEX_MESH_POSITION, VERTEX_BUFFER_INDEX_MESH_NORMAL, VERTEX_BUFFER_INDEX_MESH_UV, UNIFORM_BINDING_INDEX_CAMERA, UNIFORM_GROUP_INDEX_CAMERA, UNIFORM_BINDING_INDEX_TRANSFORM, UNIFORM_GROUP_INDEX_TRANSFORM, UNIFORM_BINDING_INDEX_INTERACTION, UNIFORM_GROUP_INDEX_INTERACTION, WGSL_VERTEXINPUT_STRUCT_NAME, WGSL_VERTEXOUTPUT_STRUCT_NAME, WGSL_INTERACTIONDATA_STRUCT_NAME } from '../constants';\nimport { extractMeshVertexModifierFunctionComponents } from './shared';\n/** Fallback options used by {@link getMeshVertexWgsl}: the standard `VERTEX_OUTPUT_LOCATION_*`/`VERTEX_BUFFER_INDEX_MESH_*` layout and the transform/camera/interaction uniform coordinates shared across mesh pipelines. */\nconst DefaultMeshVertexOptions = {\n outputNormalLocation: VERTEX_OUTPUT_LOCATION_NORMAL,\n outputVertexLocation: VERTEX_OUTPUT_LOCATION_VERTEX,\n outputUvLocation: VERTEX_OUTPUT_LOCATION_UV,\n outputVertexIndexLocation: VERTEX_OUTPUT_LOCATION_INDEX,\n outputInstanceIndexLocation: VERTEX_OUTPUT_LOCATION_INSTANCE,\n outputRayLocation: VERTEX_OUTPUT_LOCATION_RAY,\n inputPositionLocation: VERTEX_BUFFER_INDEX_MESH_POSITION,\n inputNormalLocation: VERTEX_BUFFER_INDEX_MESH_NORMAL,\n inputUvLocation: VERTEX_BUFFER_INDEX_MESH_UV,\n uniformViewBindingIndex: UNIFORM_BINDING_INDEX_CAMERA,\n uniformViewGroupIndex: UNIFORM_GROUP_INDEX_CAMERA,\n uniformWorldBindingIndex: UNIFORM_BINDING_INDEX_TRANSFORM,\n uniformWorldGroupIndex: UNIFORM_GROUP_INDEX_TRANSFORM,\n uniformInteractionBindingIndex: UNIFORM_BINDING_INDEX_INTERACTION,\n uniformInteractionGroupIndex: UNIFORM_GROUP_INDEX_INTERACTION,\n};\n/**\n * Composes the standard vertex shader used to draw mesh geometry: it transforms each vertex position by the\n * world/view/projection matrices, transforms the normal by the (precomputed) normal matrix, passes UVs through\n * unchanged, and computes an eye-to-vertex `ray` (normalized `worldPosition - camera.position`) plus the built-in\n * vertex/instance indices — everything the fragment shaders in this folder (see `basic-material-fragment.ts`,\n * `standard-material-fragment.ts`) expect to find on `VertexOutput`.\n *\n * Declares the `VertexOutput`/`VertexInput`/`Transforms`/`Camera`/`InteractionData` WGSL structs (using the\n * `WGSL_*_STRUCT_NAME` constants so downstream shaders can reference them by the same names), binds the\n * `transforms`/`camera`/`interaction` uniforms at the configured `@group`/`@binding` coordinates, and — if\n * `options.inputModifier`/`options.outputModifier` are supplied (raw WGSL or a {@link VertexInputModifierDelegate}/{@link VertexOutputModifierDelegate}) —\n * parses them via {@link extractMeshVertexModifierFunctionComponents} and inlines them as extra `fn` definitions\n * invoked before returning, letting user code rewrite the input geometry or tweak the computed output per-vertex.\n *\n * @param options Location/binding overrides and optional input/output WGSL modifiers; defaults to {@link DefaultMeshVertexOptions}.\n * @returns Complete WGSL vertex-shader source with a single `@vertex fn main` entry point returning `VertexOutput`.\n */\nexport function getMeshVertexWgsl(options = DefaultMeshVertexOptions) {\n if (options != DefaultMeshVertexOptions) {\n options = Utils.extend({}, DefaultMeshVertexOptions, options);\n }\n // vertex input modifier?\n const modifierInput = options.inputModifier;\n let modifyInstructionInput = 'vertexInput', modifierFnInput = '';\n if (!Utils.isNullOrEmpty(modifierInput)) {\n const { name: modifierName, args: [arg0, arg1], body: modifierBody } = extractMeshVertexModifierFunctionComponents(modifierInput);\n modifyInstructionInput = `${modifierName}(vertexInput, interaction)`;\n modifierFnInput = `fn ${modifierName} (${arg0}: ${WGSL_VERTEXINPUT_STRUCT_NAME}, ${arg1}: ${WGSL_INTERACTIONDATA_STRUCT_NAME}) -> ${WGSL_VERTEXINPUT_STRUCT_NAME} {\r\n ${modifierBody}\r\n}`;\n }\n // vertex output modifier?\n const modifierOutput = options.outputModifier;\n let modifyInstructionOutput = 'output', modifierFnOutput = '';\n if (!Utils.isNullOrEmpty(modifierOutput)) {\n const { name: modifierName, args: [arg0, arg1], body: modifierBody } = extractMeshVertexModifierFunctionComponents(modifierOutput);\n modifyInstructionOutput = `${modifierName}(output, interaction)`;\n modifierFnOutput = `fn ${modifierName} (${arg0}: ${WGSL_VERTEXINPUT_STRUCT_NAME}, ${arg1}: ${WGSL_INTERACTIONDATA_STRUCT_NAME}) -> ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n ${modifierBody}\r\n}`;\n }\n const opts = Utils.extend({}, DefaultMeshVertexOptions, options);\n return `struct ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n @builtin(position) position : vec4f, // clip space position\r\n @location(${opts.outputNormalLocation}) normal: vec3f, // world space normal\r\n @location(${opts.outputVertexLocation}) vertex : vec3f, // world space position\r\n @location(${opts.outputUvLocation}) uv : vec2f, // texture coordinates\r\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index : u32, // vertex index\r\n @location(${opts.outputRayLocation}) ray : vec3f, // eye-to-point vector in world space\r\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\r\n}\r\n\r\nstruct ${WGSL_VERTEXINPUT_STRUCT_NAME} {\r\n @location(${opts.inputPositionLocation}) position: vec3f,\r\n @location(${opts.inputNormalLocation}) normal: vec3f,\r\n @location(${opts.inputUvLocation}) uv: vec2f,\r\n @builtin(vertex_index) index: u32,\r\n @builtin(instance_index) instance: u32,\r\n}\r\n\r\nstruct Transforms {\r\n world: mat4x4f,\r\n normal: mat3x3f,\r\n}\r\n\r\nstruct Camera {\r\n view: mat4x4f,\r\n projection: mat4x4f,\r\n position: vec3f,\r\n}\r\n\r\nstruct ${WGSL_INTERACTIONDATA_STRUCT_NAME} {\r\n // mouse coordinatges in NDC space ([-1,1], [-1,1])\r\n cursor: vec2f,\r\n // canvas size in pixels\r\n resolution: vec2f,\r\n // some phase timer (e.g. time since mouse down, or time since last click, etc.)\r\n time: f32,\r\n}\r\n\r\n${modifierFnInput}\r\n\r\n${modifierFnOutput}\r\n\r\n@group(${opts.uniformWorldGroupIndex}) @binding(${opts.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\r\n@group(${opts.uniformViewGroupIndex}) @binding(${opts.uniformViewBindingIndex}) var<uniform> camera: Camera;\r\n@group(${opts.uniformInteractionGroupIndex}) @binding(${opts.uniformInteractionBindingIndex}) var<uniform> interaction: ${WGSL_INTERACTIONDATA_STRUCT_NAME};\r\n\r\n@vertex fn main(vertexInput: ${WGSL_VERTEXINPUT_STRUCT_NAME}) -> ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n let input = ${modifyInstructionInput};\r\n let position4 = vec4f(input.position, 1.0);\r\n let worldTransform = transforms.world;\r\n let viewProjectionTransform = camera.projection;\r\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\r\n let worldPosition = (worldTransform * position4).xyz;\r\n let output = ${WGSL_VERTEXOUTPUT_STRUCT_NAME}(\r\n worldViewProjectionTransform * position4,\r\n transforms.normal * input.normal,\r\n worldPosition,\r\n input.uv,\r\n input.index,\r\n normalize(worldPosition - camera.position),\r\n input.instance\r\n );\r\n return ${modifyInstructionOutput};\r\n}`;\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { VERTEX_BUFFER_INDEX_MESH_POSITION, UNIFORM_GROUP_INDEX_CAMERA, UNIFORM_BINDING_INDEX_CAMERA, UNIFORM_GROUP_INDEX_TRANSFORM, UNIFORM_BINDING_INDEX_TRANSFORM, STORAGE_GROUP_INDEX_LINE, WGSL_VERTEXOUTPUT_STRUCT_NAME } from '../constants';\n/** Fallback options used by {@link getDefaultLineVertexWgsl}/{@link getFatLineVertexWgsl}: positions/dimensions read from {@link STORAGE_GROUP_INDEX_LINE}, transform/camera uniforms from the shared {@link UNIFORM_GROUP_INDEX_TRANSFORM}/{@link UNIFORM_GROUP_INDEX_CAMERA} coordinates. */\nconst DefaultLineVertexOptions = {\n inputPositionLocation: VERTEX_BUFFER_INDEX_MESH_POSITION,\n outputInstanceIndexLocation: 0,\n outputVertexIndexLocation: 1,\n storagePositionsGroupIndex: STORAGE_GROUP_INDEX_LINE,\n storagePositionsBindingIndex: 0,\n uniformDimensionsGroupIndex: STORAGE_GROUP_INDEX_LINE,\n uniformDimensionsBindingIndex: 1,\n uniformViewGroupIndex: UNIFORM_GROUP_INDEX_CAMERA,\n uniformViewBindingIndex: UNIFORM_BINDING_INDEX_CAMERA,\n uniformWorldGroupIndex: UNIFORM_GROUP_INDEX_TRANSFORM,\n uniformWorldBindingIndex: UNIFORM_BINDING_INDEX_TRANSFORM,\n};\n/** Builds the `VertexOutput` struct shared by both line vertex shaders below: clip-space `position` plus flat `instance`/`index` varyings, at the configured output locations, consumed by `line-material-fragment.ts`. */\nfunction getVertexOutputStructDefinition(opts) {\n return `struct ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n @builtin(position) position : vec4f, // clip space position\r\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\r\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index : u32, // vertex index\r\n}`;\n}\n/**\n * Composes the vertex shader for thin (native-line-width, 1px) line rendering: each vertex reads its `x`/`y`/`z`\n * directly out of a flattened `positions: array<f32>` storage buffer (three floats per point, indexed by the\n * built-in `vertex_index`) rather than a vertex-buffer attribute, then applies the usual world/view/projection\n * transform chain. `instance_index` is passed through unchanged so the fragment stage\n * (`line-material-fragment.ts`) can look up a per-vertex color.\n *\n * Declares `VertexOutput`/`Transforms`/`Camera` WGSL structs and binds `transforms`/`camera`/`positions` at the\n * configured `@group`/`@binding` coordinates.\n *\n * @param options Location/binding overrides; defaults to {@link DefaultLineVertexOptions}.\n * @returns Complete WGSL vertex-shader source with a single `@vertex fn main` entry point returning `VertexOutput`.\n */\nexport function getDefaultLineVertexWgsl(options = DefaultLineVertexOptions) {\n const opts = Utils.extend({}, DefaultLineVertexOptions, options);\n return `${getVertexOutputStructDefinition(opts)}\r\n\r\nstruct Transforms {\r\n world: mat4x4f,\r\n normal: mat3x3f,\r\n}\r\n\r\nstruct Camera {\r\n view: mat4x4f,\r\n projection: mat4x4f,\r\n position: vec3f\r\n}\r\n\r\n@group(${opts.uniformWorldGroupIndex}) @binding(${opts.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\r\n@group(${opts.uniformViewGroupIndex}) @binding(${opts.uniformViewBindingIndex}) var<uniform> camera: Camera;\r\n@group(${opts.storagePositionsGroupIndex}) @binding(${opts.storagePositionsBindingIndex}) var<storage, read> positions: array<f32>;\r\n\r\n@vertex fn main(@builtin(instance_index) instance: u32,\r\n @builtin(vertex_index) index: u32) -> ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n\r\n let x = positions[3u * index + 0u];\r\n let y = positions[3u * index + 1u];\r\n let z = positions[3u * index + 2u];\r\n let position4 = vec4f(x, y, z, 1.0);\r\n let worldTransform = transforms.world;\r\n let viewProjectionTransform = camera.projection;\r\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\r\n let worldPosition = (worldTransform * position4).xyz;\r\n return ${WGSL_VERTEXOUTPUT_STRUCT_NAME}(\r\n worldViewProjectionTransform * position4,\r\n instance,\r\n index);\r\n}`;\n}\n/**\n * Composes the vertex shader for \"fat\" (screen-space-thickness) line rendering: unlike\n * {@link getDefaultLineVertexWgsl}, it expects to be invoked with 6 vertices per line segment (a quad split into\n * two triangles, per the index-to-corner mapping documented in `computeOffsetPosition`'s inline diagram) and\n * offsets each corner perpendicular to the segment's screen-space direction by half of a uniform pixel width, so\n * the line renders at a constant on-screen thickness regardless of distance from the camera.\n *\n * `computeClipPosition` reads a point's `x`/`y`/`z` out of the flattened `positions: array<f32>` storage buffer\n * (as in {@link getDefaultLineVertexWgsl}) and transforms it to clip space; `computeOffsetPosition` then derives\n * the two endpoints' NDC direction, builds a perpendicular offset scaled by `dimensions.halfLineWidth` and the\n * viewport size, and picks/offsets the correct quad corner based on `vertex_index` (segment endpoint is\n * `instance_index`/`instance_index + 1`).\n *\n * Declares `VertexOutput`/`Transforms`/`Camera`/`Pixels` WGSL structs and binds `transforms`/`camera`/`positions`/`dimensions`\n * at the configured `@group`/`@binding` coordinates (`dimensions` carries `viewportWidth`, `viewportHeight` and `halfLineWidth` in pixels).\n *\n * @param options Location/binding overrides; defaults to {@link DefaultLineVertexOptions}.\n * @returns Complete WGSL vertex-shader source with a single `@vertex fn main` entry point returning `VertexOutput`.\n */\nexport function getFatLineVertexWgsl(options = DefaultLineVertexOptions) {\n const opts = Utils.extend({}, DefaultLineVertexOptions, options);\n return `${getVertexOutputStructDefinition(opts)}\r\n\r\nstruct Transforms {\r\n world: mat4x4f,\r\n normal: mat3x3f,\r\n}\r\n\r\nstruct Camera {\r\n view: mat4x4f,\r\n projection: mat4x4f,\r\n position: vec3f\r\n}\r\n\r\nstruct Pixels {\r\n viewportWidth: f32,\r\n viewportHeight: f32,\r\n halfLineWidth: f32\r\n}\r\n\r\n@group(${opts.uniformWorldGroupIndex}) @binding(${opts.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\r\n@group(${opts.uniformViewGroupIndex}) @binding(${opts.uniformViewBindingIndex}) var<uniform> camera: Camera;\r\n@group(${opts.storagePositionsGroupIndex}) @binding(${opts.storagePositionsBindingIndex}) var<storage, read> positions: array<f32>;\r\n@group(${opts.uniformDimensionsGroupIndex}) @binding(${opts.uniformDimensionsBindingIndex}) var<uniform> dimensions: Pixels;\r\n\r\nfn computeClipPosition(index: u32) -> vec4f {\r\n let x = positions[3u * index + 0u];\r\n let y = positions[3u * index + 1u];\r\n let z = positions[3u * index + 2u];\r\n let position4 = vec4f(x, y, z, 1.0);\r\n let worldTransform = transforms.world;\r\n let viewProjectionTransform = camera.projection;\r\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\r\n return worldViewProjectionTransform * position4;\r\n}\r\n\r\nfn computeOffsetPosition(p0: vec4f, p1: vec4f, index: u32) -> vec4f {\r\n\r\n let viewportSize = vec2f(dimensions.viewportWidth, dimensions.viewportHeight);\r\n let normalizedSize = normalize(viewportSize);\r\n let halfThickness = dimensions.halfLineWidth / dimensions.viewportWidth;\r\n let p0ndc = p0.xyz / p0.w;\r\n let p1ndc = p1.xyz / p1.w;\r\n let dir = normalize((p1ndc - p0ndc).xy);\r\n let offsetX = halfThickness * 2.0 / normalizedSize.x;\r\n let offsetY = halfThickness * 2.0 / normalizedSize.y;\r\n\r\n // perp\r\n let perp0 = vec2f(-dir.y * offsetX, dir.x * offsetY);\r\n let perp1 = perp0;\r\n\r\n /*\r\n\r\n position0-0 -----*----- position0-1\r\n |\\\\ |\r\n | \\\\ |\r\n | \\\\ |\r\n | \\\\ |\r\n | \\\\ |\r\n | \\\\ |\r\n | \\\\ |\r\n | \\\\|\r\n position1-0 -----*----- position1-1\r\n\r\n indexes:\r\n ------------\r\n p0-0 -> 0, 3\r\n p0-1 -> 5\r\n p1-0 -> 1\r\n p1-1 -> 2, 4\r\n */\r\n\r\n var outPos: vec2f;\r\n var w = p0.w;\r\n var z = p0.z;\r\n if (index == 0 || index == 3){\r\n outPos = p0ndc.xy - perp0;\r\n }\r\n else if (index == 1){\r\n outPos = p1ndc.xy - perp1;\r\n w = p1.w;\r\n z = p1.z;\r\n }\r\n else if (index == 5){\r\n outPos = p0ndc.xy + perp0;\r\n }\r\n else { //if (index == 2 || index == 4)\r\n outPos = p1ndc.xy + perp1;\r\n w = p1.w;\r\n z = p1.z;\r\n }\r\n\r\n // return vec4f(outPos , 0, 1.0);\r\n return vec4f(outPos * w, z, w);\r\n}\r\n\r\n@vertex fn main(@builtin(instance_index) instance: u32,\r\n @builtin(vertex_index) index: u32) -> ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n\r\n // vertex index starting at 1\r\n let position0 = computeClipPosition(instance);\r\n let position1 = computeClipPosition(instance + 1);\r\n\r\n // apply offset\r\n let position = computeOffsetPosition(position0, position1, index);\r\n\r\n return ${WGSL_VERTEXOUTPUT_STRUCT_NAME}(\r\n position,\r\n instance,\r\n index\r\n );\r\n}`;\n}\n","import { UNIFORM_GROUP_INDEX_COLORPICKING } from '../constants';\n//namespace Pacem.Drawing3D.WebGPU {\n/**\n * Composes the fragment shader used by the {@link Raycaster} off-screen pass for GPU-based, color-coded object\n * picking: instead of computing a lit color, it simply outputs the renderable's own numeric `id` (bound as a\n * `ColorPicker` uniform) into a single-channel `r32uint` render target, so the CPU side can later read back the\n * pixel under the pointer and resolve it to the {@link Renderable} that was drawn there.\n *\n * Declares the `ColorPicker` struct (`id: u32`) and its `var<uniform>` binding at `@binding(0)` within the given\n * `@group`; unlike the material fragments in this folder it takes no {@link WGSLFragmentExtra} — it is not meant to\n * be extended with lighting/texture snippets.\n *\n * @param groupIndex `@group` index at which the per-renderable `ColorPicker` uniform is bound; defaults to {@link UNIFORM_GROUP_INDEX_COLORPICKING}.\n * @returns Complete WGSL fragment-shader source with a single `@fragment fn main` entry point returning `@location(0) u32`.\n */\nexport function getColorPickingFragmentWgsl(groupIndex = UNIFORM_GROUP_INDEX_COLORPICKING) {\n return `struct ColorPicker {\r\n id: u32,\r\n };\r\n\r\n @group(${groupIndex}) @binding(0) var<uniform> colorPicker: ColorPicker;\r\n\r\n @fragment\r\n fn main(@builtin(position) position: vec4f) -> @location(0) u32 {\r\n return colorPicker.id;\r\n }\r\n `;\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { SAMPLER_BINDING_INDEX } from '../constants';\n/** Fallback references used by {@link textureMap} when not overridden: reads UV coordinates from the `uv` varying. */\nconst DefaultTextureMapReferences = {\n uv: 'uv',\n};\n/**\n * Builds a {@link WGSLFragmentExtra} that samples a 2D texture and tints it by a base color: `textureSample(tex, sampler, uv) * inputColor`.\n * Declares a fresh `sampler`/`texture_2d<f32>` pair (uniquely named per call via {@link Utils.uniqueCode}) as `bindings`\n * at consecutive `@binding` indices (`binding` for the sampler, `binding + 1` for the texture) within the given\n * `@group`, and emits no `definitions`.\n *\n * As `modifiers`, either a single bare sample-and-multiply expression (single consumer), or, when\n * `references.outputColors` lists multiple output variable names, one assignment per name — the first computes the\n * sample, the rest copy it — so several downstream color channels (e.g. diffuse and ambient) can share one texture fetch.\n *\n * @param references WGSL identifiers for the UV coordinates (`uv`, defaults to `'uv'`), the base color to tint (`inputColor`, required) and, optionally, one or more output variable names (`outputColors`) to assign the sampled color to.\n * @param group `@group` index at which the generated sampler/texture pair is bound.\n * @param binding `@binding` index (within `group`) for the sampler; the texture is bound at `binding + 1`. Defaults to {@link SAMPLER_BINDING_INDEX}.\n * @returns Fragment-shader `bindings`/`modifiers` meant to be spliced into a material fragment shader (see {@link getBasicMaterialFragmentWgsl}/{@link getStandardMaterialFragmentWgsl}).\n */\nexport function textureMap(references = DefaultTextureMapReferences, group, binding = SAMPLER_BINDING_INDEX) {\n const key = Utils.uniqueCode();\n const samplerReference = `sampler_${key}`;\n const texReference = `tex_${key}`;\n const ref = Utils.extend({}, DefaultTextureMapReferences, references);\n const inputColor = ref.inputColor, outputColors = ref.outputColors;\n if (Utils.isNullOrEmpty(inputColor)) {\n throw new Error('Must provide either input and output vertex color parameter names.');\n }\n const modifiers = outputColors ?\n outputColors.map((name, index) => index === 0 ? `${name} = textureSample(${texReference}, ${samplerReference}, ${ref.uv}) * ${inputColor};` : `${name} = ${outputColors[0]};`)\n : [`textureSample(${texReference}, ${samplerReference}, ${ref.uv}) * ${inputColor}`];\n return {\n // type definitions\n //definition: '',\n // bindings\n bindings: [`@group(${group}) @binding(${binding}) var ${samplerReference}: sampler;`,\n `@group(${group}) @binding(${binding + 1}) var ${texReference}: texture_2d<f32>;`],\n // modifiers\n modifiers\n };\n}\n","import { Utils } from '@pacem/pacem-core';\n/** Fallback references used by {@link directionalLight} when not overridden: reads the world-space `normal` varying and treats the base color as `white`. */\nconst DefaultDirectionalLightReferences = {\n normal: 'normal', inputColor: 'white'\n};\n/**\n * Builds a {@link WGSLFragmentExtra} implementing a directional (sun-like, parallel-rays) light: a Lambertian\n * diffuse term computed from the dot product between the surface normal and the (negated, normalized) light\n * direction, modulated by the light's color and intensity. Unlike {@link omniLight}, it carries no position/falloff\n * or specular term.\n *\n * Emits, as `definitions`, a `DirectionalLight` struct (`color: vec4f`, `direction: vec3f`, `intensity: f32`) and a\n * `computeDirectional` helper function; as `bindings`, a `var<uniform>` declaration for the light data at the given\n * `@group`/`@binding` coordinates; and, as `modifiers`, either a statement that accumulates the contribution into\n * `references.outputColor` (`+=`) when provided, or a bare expression otherwise (for single-light use sites that\n * assign it directly).\n *\n * @param references WGSL identifiers for the surface normal (`normal`), the base color to shade (`inputColor`) and, optionally, the color variable to accumulate into (`outputColor`).\n * @param group `@group` index at which the generated `DirectionalLight` uniform is bound.\n * @param binding `@binding` index (within `group`) at which the generated `DirectionalLight` uniform is bound.\n * @returns Fragment-shader `definitions`/`bindings`/`modifiers` meant to be spliced into a material fragment shader (see {@link getBasicMaterialFragmentWgsl}/{@link getStandardMaterialFragmentWgsl}).\n */\nexport function directionalLight(references, group, binding) {\n const key = Utils.uniqueCode();\n const lightReference = `directional_${key}`;\n const ref = Utils.extend({}, DefaultDirectionalLightReferences, references);\n const inputColor = ref.inputColor, outputColor = ref.outputColor, normal = ref.normal ?? 'normal';\n if (Utils.isNullOrEmpty(inputColor)) {\n throw new Error('Must provide input vertex color parameter name.');\n }\n return {\n // type definitions\n definitions: [`struct DirectionalLight {\r\n color: vec4f,\r\n direction: vec3f,\r\n intensity: f32\r\n}`, `fn computeDirectional(normal: vec3f, color: vec4f, light: DirectionalLight) -> vec4f {\r\n let n = normalize(normal);\r\n let d = normalize(light.direction);\r\n let factor = light.intensity * .5 * (1.0 + dot(n, -d));\r\n let output = color.rgb * light.color.rgb * factor;\r\n return vec4f(output, color.a);\r\n}`],\n // bindings\n bindings: [`@group(${group}) @binding(${binding}) var<uniform> ${lightReference}: DirectionalLight;`],\n // modifiers\n modifiers: outputColor ? [`${outputColor} += computeDirectional(${normal}, ${inputColor}, ${lightReference});`] : [`computeDirectional(${normal}, ${inputColor}, ${lightReference})`]\n };\n}\n","import { Utils } from '@pacem/pacem-core';\n/** Fallback references used by {@link omniLight} when not overridden: reads the world-space `normal`/`vertex`/`ray` varyings, treats the base color as `white` and disables the specular term (`empty` color, `0` shininess). */\nconst DefaultOmniLightReferences = {\n normal: 'normal', position: 'vertex', ray: 'ray', inputColor: 'white', specularColor: 'empty', shininess: '0'\n};\n/**\n * Builds a {@link WGSLFragmentExtra} implementing an omnidirectional (point) light with a Blinn-Phong-like\n * specular term: a Lambertian diffuse factor from the normal-to-light direction (light position minus surface\n * position, i.e. no distance falloff), plus a specular highlight from the half-vector between the light direction\n * and the eye-to-vertex ray, scaled by `shininess`. Unlike {@link directionalLight}, the light has a `position` in\n * world space rather than a constant direction.\n *\n * Emits, as `definitions`, an `OmniLight` struct (`color: vec4f`, `position: vec3f`, `intensity: f32`) and a\n * `computeOmni` helper function; as `bindings`, a `var<uniform>` declaration for the light data at the given\n * `@group`/`@binding` coordinates; and, as `modifiers`, either a statement that accumulates the contribution into\n * `references.outputColor` (`+=`) when provided, or a bare expression otherwise.\n *\n * @param references WGSL identifiers for the surface normal (`normal`), world-space position (`position`), eye-to-vertex ray (`ray`), base color (`inputColor`), specular color (`specularColor`), shininess factor (`shininess`) and, optionally, the color variable to accumulate into (`outputColor`).\n * @param group `@group` index at which the generated `OmniLight` uniform is bound.\n * @param binding `@binding` index (within `group`) at which the generated `OmniLight` uniform is bound.\n * @returns Fragment-shader `definitions`/`bindings`/`modifiers` meant to be spliced into a material fragment shader (see {@link getBasicMaterialFragmentWgsl}/{@link getStandardMaterialFragmentWgsl}).\n */\nexport function omniLight(references, group, binding) {\n const key = Utils.uniqueCode();\n const lightReference = `omni_${key}`;\n const ref = Utils.extend({}, DefaultOmniLightReferences, references);\n const inputColor = ref.inputColor, outputColor = ref.outputColor, normal = ref.normal, ray = ref.ray, vertex = ref.position, shininess = ref.shininess, specularColor = ref.specularColor;\n if (Utils.isNullOrEmpty(inputColor)) {\n throw new Error('Must provide input vertex color parameter name.');\n }\n return {\n // type definitions\n definitions: [`struct OmniLight {\r\n color: vec4f,\r\n position: vec3f,\r\n intensity: f32\r\n}`, `fn computeOmni(position: vec3f, normal: vec3f, ray: vec3f, color: vec4f, specularColor: vec4f, shininess: f32, light: OmniLight) -> vec4f {\r\n\r\n // color\r\n let n = normalize(normal);\r\n let d = normalize(position - light.position);\r\n let factor = light.intensity * .5 * (1.0 + dot(n, -d));\r\n\r\n // specular\r\n let r = normalize(ray);\r\n let halfVector = normalize(d + r);\r\n let specular = specularColor.rgb * shininess * dot(n, -halfVector);\r\n\r\n let output = color.rgb * light.color.rgb * factor + specular;\r\n return vec4f(output, color.a);\r\n}`],\n // bindings\n bindings: [`@group(${group}) @binding(${binding}) var<uniform> ${lightReference}: OmniLight;`],\n // modifiers\n modifiers: outputColor ? [`${outputColor} += computeOmni(${vertex}, ${normal}, ${ray}, ${inputColor}, ${specularColor}, ${shininess}, ${lightReference});`] : [`computeOmni(${vertex}, ${normal}, ${ray}, ${inputColor}, ${specularColor}, ${shininess}, ${lightReference})`]\n };\n}\n","import { Utils } from '@pacem/pacem-core';\n/**\n * Builds a {@link WGSLFragmentExtra} implementing the ambient light contribution to a fragment shader: it multiplies the\n * fragment's base color by a uniform light color/intensity, uniformly across the surface (no dependency on normal or\n * view direction, unlike {@link directionalLight}/{@link omniLight}).\n *\n * Emits, as `definitions`, an `AmbientLight` struct (`color: vec4f`, `intensity: f32`) and a `computeAmbient` helper\n * function; as `bindings`, a `var<uniform>` declaration for the light data at the given `@group`/`@binding`\n * coordinates; and, as `modifiers`, a statement assigning the computed color into `references.outputColor`.\n *\n * @param references WGSL identifiers for the color to shade (`inputColor`) and the variable to assign the ambient-lit result to (`outputColor`). Both are required.\n * @param group `@group` index at which the generated `AmbientLight` uniform is bound.\n * @param binding `@binding` index (within `group`) at which the generated `AmbientLight` uniform is bound.\n * @returns Fragment-shader `definitions`/`bindings`/`modifiers` meant to be spliced into a material fragment shader (see {@link getBasicMaterialFragmentWgsl}/{@link getStandardMaterialFragmentWgsl}).\n */\nexport function ambientLight(references, group, binding) {\n const key = Utils.uniqueCode();\n const lightReference = `ambient_${key}`;\n const inputColor = references.inputColor, outputColor = references.outputColor;\n if (Utils.isNullOrEmpty(inputColor) || Utils.isNullOrEmpty(outputColor)) {\n throw new Error('Must provide either input and output vertex color parameter names.');\n }\n return {\n // type definitions\n definitions: [`struct AmbientLight {\r\n color: vec4f,\r\n intensity: f32\r\n}`, `fn computeAmbient(color: vec4f, light: AmbientLight) -> vec4f {\r\n return vec4f(light.intensity * color.rgb * light.color.rgb, color.a);\r\n}`],\n // bindings\n bindings: [`@group(${group}) @binding(${binding}) var<uniform> ${lightReference}: AmbientLight;`],\n // modifiers\n modifiers: [`${outputColor} = computeAmbient(${inputColor}, ${lightReference});`]\n };\n}\n","import { Geometry } from '@pacem/pacem-numerical';\nimport { isPerspectiveCamera, isOrthographicCamera } from '../../types';\n//namespace Pacem.Drawing3D.WebGPU {\nconst Vector3D = Geometry.LinearAlgebra.Vector3D;\nconst Matrix3D = Geometry.LinearAlgebra.Matrix3D;\nconst DEFAULT_SIZE = { width: 1, height: 1 };\n/**\n * Factory that converts a scene-facing {@link Camera3D} (`../../types.ts`) into its WebGPU-side counterpart\n * ({@link Camera}, `abstractions.ts`): either a {@link PerspectiveCamera} or an {@link OrthographicCamera}, exposing\n * `view()`/`projection()` matrices consumed when building the camera's uniform buffer (see `renderablebuffer.ts`).\n */\nexport class Cameras {\n /**\n * Creates a new webgpu {@link Camera} given a canonic one.\n * @param camera\n * @returns\n */\n static create(camera) {\n if (isPerspectiveCamera(camera)) {\n return new PerspectiveCamera(camera);\n }\n if (isOrthographicCamera(camera)) {\n return new OrthographicCamera(camera);\n }\n throw new TypeError(`Camera type '${camera['type']}' not supported.`);\n }\n}\n/**\n * Camera orientation 4x4 matrix.\n * @param eye\n * @param target\n * @param up\n * @returns\n */\nfunction view(eye, target, up) {\n const z = /* inverse forward is eye -> target */ Vector3D.subtract(target, eye);\n const x = Vector3D.cross(up, z);\n const y = Vector3D.cross(z, x);\n Vector3D.normalize(x);\n Vector3D.normalize(z);\n Vector3D.normalize(y);\n const offsetX = -Vector3D.dot(x, eye);\n const offsetY = -Vector3D.dot(y, eye);\n const offsetZ = -Vector3D.dot(z, eye);\n return Matrix3D.from(x.x, y.x, z.x, 0, x.y, y.y, z.y, 0, x.z, y.z, z.z, 0, offsetX, offsetY, offsetZ, 1);\n}\nfunction assertNearFarCorrectness(near, far) {\n if (near <= 0) {\n throw new RangeError(\"Near plane distance must be positive.\");\n }\n if (far <= near) {\n throw new RangeError(\"Far plane distance must be greater than near plane distance.\");\n }\n}\n/**\n * Perspective transformation 4x4 matrix.\n * @param fovY Vertical field of view (in radians)\n * @param aspectRatio Frustum aspect ratio\n * @param near Clipping plane near distance (not z coordinate)\n * @param far Clipping plane far distance (not z coordinate)\n * @returns\n */\nfunction perspective(fovY = 120, aspectRatio = 1, near = 0.1, far = 1000) {\n assertNearFarCorrectness(near, far);\n const scale = Math.tan(.5 * Math.PI * (1 - fovY / 180));\n const m11 = scale / aspectRatio;\n const finitelyFar = Number.isFinite(far);\n const m33 = finitelyFar ? (far / (near - far)) : -1;\n const offsetZ = finitelyFar ? (far * near / (near - far)) : -near;\n return Matrix3D.from(m11, 0, 0, 0, 0, scale, 0, 0, 0, 0, m33, -1, 0, 0, offsetZ, 0);\n}\n/**\n * Othographic transformation 4x4 matrix.\n * @param left Viewport's left side\n * @param right Viewport's right side\n * @param top Viewport's top side\n * @param bottom Viewport's bottom side\n * @param near Clipping plane near distance\n * @param far Clipping plane far distance\n */\nfunction orthographic(left, right, top, bottom, near = .1, far = 1000) {\n assertNearFarCorrectness(near, far);\n return Matrix3D.from(2 / (right - left), 0, 0, 0, 0, 2 / (top - bottom), 0, 0, 0, 0, 1 / (near - far), 0, (left + right) / (left - right), (top + bottom) / (bottom - top), near / (near - far), 1);\n}\n/**\n * WebGPU-side counterpart of an {@link OrthographicCamera3D}: computes the view matrix from `position`/`lookAt`/`up`,\n * and an orthographic projection matrix from the camera's `left`/`right`/`top`/`bottom`/`near`/`far` planes, scaled\n * by the eye-to-target distance and (if given) the viewport aspect ratio.\n */\nexport class OrthographicCamera {\n constructor(_camera) {\n this._camera = _camera;\n }\n /** Computes the view matrix for `camera`; see {@link view} for a bound instance-method equivalent. */\n static view(camera) {\n return view(camera.position, camera.lookAt, camera.up);\n }\n /**\n * Computes the orthographic projection matrix for `camera`.\n * @param camera Source orthographic camera.\n * @param size Viewport size, used to correct the projected frustum for aspect ratio; defaults to a 1:1 viewport.\n */\n static projection(camera, size = DEFAULT_SIZE) {\n const eye = camera.position, target = camera.lookAt;\n const z = Vector3D.subtract(target, eye);\n Vector3D.normalize(z);\n const zoom = Vector3D.dot(z, eye);\n const { height, width } = size;\n const ratio = width / height;\n const factor = .5 * zoom;\n const w = factor * ratio, h = factor;\n const top = camera.top * h, bottom = camera.bottom * h;\n const right = camera.right * w, left = camera.left * w;\n return orthographic(left, right, top, bottom, camera.near, camera.far);\n }\n /** Computes the view matrix for the wrapped camera. See {@link Camera.view}. */\n view() {\n return OrthographicCamera.view(this._camera);\n }\n /** Computes the orthographic projection matrix for the wrapped camera. See {@link Camera.projection}. */\n projection(size) {\n return OrthographicCamera.projection(this._camera, size);\n }\n}\n/**\n * WebGPU-side counterpart of a {@link PerspectiveCamera3D}: computes the view matrix from `position`/`lookAt`/`up`,\n * and a perspective projection matrix from the camera's vertical field of view, aspect ratio and near/far clip planes.\n */\nexport class PerspectiveCamera {\n constructor(_camera) {\n this._camera = _camera;\n }\n /** Computes the view matrix for `camera`; see {@link view} for a bound instance-method equivalent. */\n static view(camera) {\n return view(camera.position, camera.lookAt, camera.up);\n }\n /**\n * Computes the perspective projection matrix for `camera`, combining its `aspectRatio` with `size`'s\n * (`size.width / size.height`) to correct for non-square viewports.\n * @param camera Source perspective camera.\n * @param size Viewport size, used to correct for aspect ratio; defaults to a 1:1 viewport.\n */\n static projection(camera, size = DEFAULT_SIZE) {\n const aspectRatio = (size.width / size.height) / camera.aspectRatio;\n return perspective(camera.fov, aspectRatio, camera.near, camera.far);\n }\n /** Computes the view matrix for the wrapped camera. See {@link Camera.view}. */\n view() {\n return PerspectiveCamera.view(this._camera);\n }\n /** Computes the perspective projection matrix for the wrapped camera. See {@link Camera.projection}. */\n projection(size) {\n return PerspectiveCamera.projection(this._camera, size);\n }\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { Colors } from '@pacem/pacem-foundation';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { StalePropertyFlag, isGroup, isMesh, isCamera, isLight, isGeometry, isInteraction, isMeshGeometry } from '../../types';\nimport { KnownShader, isMaterial } from '../../materials/material';\nimport { AdapterUtils } from '../shared';\nimport { U32_MAX, LABEL_PREFIX } from './constants';\nimport { Buffers } from './buffers';\nimport { Cameras } from './cameras';\nimport { Materials } from './materials';\n//namespace Pacem.Drawing3D.WebGPU {\nconst Vector3D = Geometry.LinearAlgebra.Vector3D;\nconst Matrix3D = Geometry.LinearAlgebra.Matrix3D;\nfunction throwBufferRequestError(key, type) {\n if (typeof type === 'function') {\n type = type.name;\n }\n throw new RangeError(`Buffer '${key}' not available for ${type}.`);\n}\nfunction createRenderableBuffer(item, parent, ...args) {\n item.stage ??= parent?.item.stage;\n if (isGroup(item)) {\n item.key ??= 'group_' + Utils.uniqueCode();\n return new RenderableGroupBuffer(item, parent, ...args);\n }\n if (isMesh(item)) {\n item.key ??= 'mesh_' + Utils.uniqueCode();\n return new RenderableMeshBuffer(item, parent, ...args);\n }\n if (isCamera(item)) {\n item.key ??= 'camera_' + Utils.uniqueCode();\n return new RenderableCameraBuffer(item /*, parent*/);\n }\n if (isLight(item)) {\n item.key ??= 'light_' + item.type + '_' + Utils.uniqueCode();\n return new RenderableLightBuffer(item /*, parent*/);\n }\n throw new Error(`Renderable is not supported.`);\n}\n/**\n * Drives one render (or raycast) pass over a fixed snapshot of the scene: iterates the meshes accumulated in a\n * {@link RenderableBufferSet}, invoking a callback for each mesh together with the shared camera and lights, and\n * seals (clears the stale-property flags of) every buffer that participated in a successful draw. Rebuilt by\n * `renderer.ts`'s `RendererClass` whenever the scene graph changes (see `update`), and driven once per frame by\n * `RendererClass.render`/`RendererClass.raycast`.\n */\nexport class RenderLooper {\n constructor(_set) {\n this._set = _set;\n }\n /** @internal */\n get items() {\n return this._set;\n }\n /**\n * Invokes `render(mesh, camera, lights)` for every non-disposed mesh buffer in the set, skipping meshes for\n * which `render` returns `false` (e.g. hidden items). After each successful call, clears the\n * {@link StalePropertyFlag}s on the mesh buffer and, the first time each occurs, on the shared camera/light\n * buffers; group buffers are always sealed at the end regardless of whether any mesh rendered.\n * @param render Callback invoked once per mesh with its buffer, the (single) camera buffer and all light buffers; return `false` to skip that mesh (its flags are left untouched).\n */\n loop(render) {\n const { meshes, cameras, groups, lights } = this._set;\n const camera = cameras[0];\n let cameraDone = false, lightsDone = false;\n for (let mesh of meshes) {\n if (mesh.disposed) {\n continue;\n }\n // execute\n const rendered = render(mesh, camera, lights);\n if (!rendered) {\n continue;\n }\n // seal buffers\n RenderableBuffers.clearFlags(mesh);\n if (!cameraDone) {\n RenderableBuffers.clearFlags(camera);\n cameraDone = true;\n }\n if (!lightsDone) {\n lights.forEach(light => RenderableBuffers.clearFlags(light));\n lightsDone = true;\n }\n }\n for (let group of groups) {\n // seal group buffers\n RenderableBuffers.clearFlags(group);\n }\n }\n}\n/**\n * Factory for {@link ManagedBuffer}s wrapping non-{@link Renderable} scene data — geometry ({@link NodeGeometry}/\n * {@link MeshGeometry}), material ({@link Material3D}) and interaction (pointer/time/viewport) state — so this data\n * can be shared and cached across the {@link RenderableBuffer}s that reference it (e.g. a geometry instance reused by\n * several meshes), rather than re-uploaded to the GPU per mesh.\n */\nexport class ManagedBuffers {\n /**\n * Wraps `item` in the {@link ManagedBuffer} implementation matching its runtime type.\n * @param item A geometry ({@link NodeGeometry}/{@link MeshGeometry}), material ({@link Material3D}) or {@link Interaction} instance.\n * @throws {Error} If `item`'s type isn't recognized.\n */\n static create(item) {\n if (isGeometry(item)) {\n item.key ??= 'geometry_' + Utils.uniqueCode();\n return new GeometryBuffer(item);\n }\n if (isMaterial(item)) {\n return new MaterialBuffer(item);\n }\n if (isInteraction(item)) {\n return new InteractionBuffer(item);\n }\n throw new Error(`Object is not supported.`);\n }\n}\n/**\n * Factory and stale-flag utilities for {@link RenderableBuffer}s wrapping {@link Renderable} scene items (groups,\n * meshes, cameras, lights). Callers (see `renderer.ts`'s `RendererClass`) cache one buffer per item across frames, so\n * the underlying GPU resources persist until the item is removed from the scene.\n */\nexport class RenderableBuffers {\n /**\n * Wraps `item` in the {@link RenderableBuffer} implementation matching its kind (group/mesh/camera/light),\n * recursively wrapping a group's children.\n * @param item The scene renderable to wrap.\n * @param args Extra constructor arguments forwarded to mesh buffers (the shared geometry/material {@link ManagedBuffer} caches; see `renderer.ts`).\n * @throws {Error} If `item`'s type isn't recognized.\n */\n static create(item, ...args) {\n return createRenderableBuffer(item, null, ...args);\n }\n /**\n * Clears the {@link StalePropertyFlag}s on `buffer`'s underlying item, marking it as up to date until the next\n * scene-graph mutation flags it again.\n * @param buffer The buffer whose item's flags should be cleared.\n * @param includeParent Whether to also clear the parent group buffer's flags, recursively up the hierarchy.\n */\n static clearFlags(buffer, includeParent = false) {\n buffer.item.flags.splice(0);\n if (includeParent) {\n const bufferBase = buffer;\n if (!Utils.isNull(bufferBase.parent)) {\n RenderableBuffers.clearFlags(bufferBase.parent, true);\n }\n }\n }\n /**\n * Returns the union of `buffer`'s own {@link StalePropertyFlag}s with those of all its ancestor group buffers —\n * the effective set of \"what changed\" a re-render of this item needs to account for.\n * @param buffer The buffer to compute the effective flag set for.\n */\n static allFlags(buffer) {\n const bufferBase = buffer;\n const parentBufferBase = bufferBase.parent;\n const parentFlags = Utils.isNull(parentBufferBase) ? [] : RenderableBuffers.allFlags(parentBufferBase);\n return bufferBase.item.flags.union(parentFlags);\n }\n}\nclass ManagedBufferBase {\n #item;\n constructor(item) {\n this.#item = item;\n }\n get item() {\n return this.#item;\n }\n #lock = false;\n lock() {\n this.#lock = true;\n }\n unlock() {\n this.#lock = false;\n const garbage = this.#garbage;\n while (garbage.length > 0) {\n const obj = garbage.shift();\n this._destroyUnsafe(obj);\n }\n }\n #garbage = [];\n _destroyUnsafe(obj) {\n if ('texture' in obj) {\n obj.texture.destroy();\n }\n else if ('buffer' in obj) {\n obj.buffer.destroy();\n }\n }\n destroySafely(...objects) {\n for (let obj of Array.from(objects).concat(...this.#garbage.splice(0))) {\n if (!obj) {\n continue;\n }\n if (this.#lock) {\n this.#garbage.push(obj);\n }\n else {\n this._destroyUnsafe(obj);\n }\n }\n }\n #disposed = false;\n destroy() {\n this.dispose();\n this.#disposed = true;\n }\n get disposed() {\n return this.#disposed;\n }\n}\nclass RenderableBufferBase extends ManagedBufferBase {\n constructor(item, parentBuffer) {\n super(item);\n this.#parent = parentBuffer;\n this.#u32id = Utils.uniqueId() % U32_MAX;\n }\n #u32id;\n #parent;\n #u32idBuffer = new Map();\n get parent() {\n return this.#parent;\n }\n get id() {\n return this.#u32id;\n }\n allFlags() {\n const parent = this.parent;\n // TODO: this one line is a perf hog!\n return this.item.flags.union(parent?.allFlags() ?? []);\n }\n buildParentWorldTransform() {\n let worldMatrix = Matrix3D.identity();\n let step = this;\n while (!Utils.isNull(step.parent)) {\n const parentItem = step.parent.item;\n const parentItemMatrix = Matrix3D.translate(parentItem.transformMatrix ?? Matrix3D.identity(), parentItem.position ?? Vector3D.zero());\n worldMatrix = Matrix3D.multiply(worldMatrix, parentItemMatrix);\n step = step.parent;\n }\n return worldMatrix;\n }\n buildWorldTransform() {\n const itemMatrix = Matrix3D.translate(this.item.transformMatrix ?? Matrix3D.identity(), this.item.position ?? Vector3D.zero());\n const parentWorldMatrix = this.buildParentWorldTransform();\n return Matrix3D.multiply(itemMatrix, parentWorldMatrix);\n }\n #versions = new Map();\n version(key) {\n return this.#versions.get(key) ?? 0;\n }\n buffer(context, key) {\n if (key === 'u32id') {\n const u32idBuffer = this.#u32idBuffer;\n const { pipeline, device } = context;\n if (u32idBuffer.has(pipeline)) {\n return Utils.extend({ fresh: false }, u32idBuffer.get(pipeline));\n }\n const u32idBufferValue = new Uint32Array([this.id]);\n const u32idBufferBuffer = Buffers.createUniform(device, u32idBufferValue, LABEL_PREFIX + 'u32id-buffer');\n const retval = Utils.extend({ buffer: u32idBufferBuffer, value: u32idBufferValue, version: performance.now() }, { fresh: true });\n this.#u32idBuffer.set(pipeline, retval);\n return retval;\n }\n const retval = this.specificBuffer(context, key);\n this.#versions.set(key, retval.version);\n return retval;\n }\n}\nconst DefaultMaterial = { shader: KnownShader.Basic, color: '#c0c0c0', flags: [] };\n// #region GROUP\nclass RenderableGroupBuffer extends RenderableBufferBase {\n #children;\n constructor(group, parent, ...args) {\n super(group, parent);\n this.#children = group.childRenderables.map(i => createRenderableBuffer(i, this, ...args));\n }\n get children() {\n return this.#children;\n }\n specificBuffer(ctx, key) {\n return null;\n }\n texture(_) {\n throw new Error(\"Method not implemented.\");\n }\n dispose() {\n this.#children.forEach(i => i.destroy());\n //this.#children = null;\n }\n}\n// #endregion\n// #region CAMERA\nclass RenderableCameraBuffer extends RenderableBufferBase {\n #viewBag = new Map();\n #view;\n constructor(camera) {\n super(camera);\n }\n texture(_) {\n throw new Error(\"Method not implemented.\");\n }\n specificBuffer(context, key) {\n //const camera = this.item;\n let fresh = false;\n if (this.allFlags().length > 0 || Utils.isNull(this.#view)) {\n fresh = true;\n this.#viewBag.clear();\n this._rebuildMatrices(context);\n }\n const { pipeline } = context;\n if (!this.#viewBag.has(pipeline)) {\n fresh = true;\n this.#viewBag.set(pipeline, this.#view);\n }\n RenderableBuffers.clearFlags(this);\n switch (key) {\n case 'cameraViewTransform':\n return Utils.extend(this.#view, { fresh });\n default:\n throwBufferRequestError(key, RenderableCameraBuffer);\n }\n }\n _rebuildMatrices({ device, canvas }) {\n // this._destroyView();\n const cam = this.item;\n const camera = Cameras.create(cam);\n const { x, y, z } = cam.position;\n const view = camera.view();\n const projection = camera.projection(canvas);\n const viewProjection = Matrix3D.multiply(view, projection);\n const viewValue = new Float32Array(16 + 16 + 4);\n viewValue.set(Matrix3D.toArray(view), 0);\n viewValue.set(Matrix3D.toArray(viewProjection), 16);\n viewValue.set([x, y, z], 32);\n // reuse GPUBuffer (always same size)\n if (Utils.isNull(this.#view)) {\n const viewBuffer = Buffers.createUniform(device, viewValue, LABEL_PREFIX + 'view-buffer');\n this.#view = { buffer: viewBuffer, value: viewValue, version: performance.now().roundoff() };\n }\n else {\n this.#view.value = viewValue;\n this.#view.version = performance.now().roundoff();\n }\n }\n _destroyView() {\n this.#viewBag.clear();\n const view = this.#view;\n this.#view = null;\n this.destroySafely(view);\n }\n dispose() {\n this._destroyView();\n }\n}\n// #endregion\n// #region GEOMETRY\nclass GeometryBuffer extends ManagedBufferBase {\n #bufferBag = {};\n #freshness = { positions: true, normals: true, uv: true, packed: true };\n #geometryBuffers;\n constructor(geometry) {\n super(geometry);\n geometry.flags ??= [];\n }\n buffer(context, key) {\n const flags = this.item.flags ?? [];\n if (Utils.isNull(this.#geometryBuffers) || flags.includes(StalePropertyFlag.Geometry)) {\n flags.splice(0);\n this.#bufferBag = /* reset */ {};\n this._rebuildGeometryBuffers(context);\n }\n const freshness = this.#freshness;\n const geom = this.#geometryBuffers;\n const { pipeline } = context;\n const bag = (this.#bufferBag[key] ??= new Map());\n const newInPipeline = !bag.has(pipeline);\n const ensureInBag = (buffer) => {\n if (newInPipeline) {\n bag.set(pipeline, buffer);\n }\n return buffer;\n };\n switch (key) {\n case 'geometryPositions':\n const { positions } = geom, posFresh = freshness.positions;\n freshness.positions = false;\n return Utils.extend(ensureInBag(positions), { fresh: posFresh || newInPipeline });\n case 'geometryNormals':\n const { normals } = geom, normFresh = freshness.normals;\n freshness.normals = false;\n return Utils.extend(ensureInBag(normals), { fresh: normFresh || newInPipeline });\n case 'geometryTexCoords':\n const { uv } = geom, uvFresh = freshness.uv;\n freshness.uv = false;\n return Utils.extend({ fresh: uvFresh || newInPipeline }, ensureInBag(uv));\n case 'geometry':\n // alltogether\n const { packed } = geom, geomFresh = freshness.packed;\n freshness.packed = false;\n return Utils.extend(ensureInBag(packed), { fresh: geomFresh || newInPipeline });\n default:\n throwBufferRequestError(key, GeometryBuffer);\n }\n }\n texture(_) {\n throw new Error(\"Method not implemented.\");\n }\n _rebuildGeometryBuffers({ device }) {\n this._destroyBuffers();\n const version = performance.now();\n const geometry = this.item, key = geometry.key;\n if (isMeshGeometry(geometry)) {\n const meshGeometry = geometry;\n // flatten positions...\n const hasTriangleIndices = !Utils.isNullOrEmpty(meshGeometry.triangleIndices);\n const flatPositions = hasTriangleIndices ?\n meshGeometry.triangleIndices.map(index => meshGeometry.positions[index])\n : meshGeometry.positions;\n const length2 = flatPositions.length * 2, length3 = length2 + flatPositions.length;\n const positionsValue = new Float32Array(length3);\n const normalsValue = new Float32Array(length3);\n const uvValue = new Float32Array(length2);\n const geomValue = new Float32Array(2 * length3 + length2);\n for (let j = 0; j < flatPositions.length; j++) {\n const offset2 = 2 * j;\n const offset3 = 3 * j;\n const { x, y, z } = flatPositions[j];\n const { x: nx, y: ny, z: nz } = meshGeometry.normals[j];\n const { x: u, y: v } = meshGeometry.textureCoordinates[j];\n positionsValue.set([x, y, z], offset3);\n normalsValue.set([nx, ny, nz], offset3);\n uvValue.set([u, v], offset2);\n geomValue.set([x, y, z, nx, ny, nz, u, v], offset3 * 2 + offset2);\n }\n const positions = Buffers.create(device, positionsValue, LABEL_PREFIX + 'meshgeometry-' + key + '-positions-buffer');\n const normals = Buffers.create(device, normalsValue, LABEL_PREFIX + 'meshgeometry-' + key + '-normals-buffer');\n const uv = Buffers.create(device, uvValue, LABEL_PREFIX + 'meshgeometry-' + key + '-uvmap-buffer');\n const geom = Buffers.create(device, geomValue, LABEL_PREFIX + 'meshgeometry-' + key + '-buffer');\n this.#geometryBuffers = {\n packed: { buffer: geom, value: geomValue, version },\n positions: { buffer: positions, value: positionsValue, version },\n normals: { buffer: normals, value: normalsValue, version },\n uv: { buffer: uv, value: uvValue, version },\n };\n this.#freshness = { positions: true, normals: true, uv: true, packed: true };\n }\n else {\n const positionsValue = new Float32Array(AdapterUtils.flattenVectorArray(geometry.positions));\n const positions = Buffers.createStorage(device, positionsValue, LABEL_PREFIX + 'nodegeometry-' + key + '-positions-buffer');\n this.#geometryBuffers = {\n positions: { buffer: positions, value: positionsValue, version },\n packed: { buffer: positions, value: positionsValue, version }\n };\n this.#freshness = { positions: true, packed: true };\n }\n }\n _destroyBuffers() {\n this.#bufferBag = {};\n const obsolete = this.#geometryBuffers;\n if (!Utils.isNull(obsolete)) {\n this.destroySafely(obsolete.positions, obsolete.normals, obsolete.uv);\n }\n }\n dispose() {\n this._destroyBuffers();\n }\n}\n// #endregion\n// #region MATERIAL\nclass MaterialBuffer extends ManagedBufferBase {\n #bufferBag = {};\n #textureBag = {};\n #wgpuMaterial;\n #buffers = new Map();\n #textures = new Map();\n constructor(material) {\n super(material);\n material.flags ??= [];\n if (material.flags.indexOf(StalePropertyFlag.Material) === -1) {\n material.flags.push(StalePropertyFlag.Material);\n }\n }\n buffer(context, key) {\n const flags = this.item.flags ?? [];\n let fresh = Utils.isNull(this.#wgpuMaterial);\n if (flags.includes(StalePropertyFlag.Material)) {\n this.#bufferBag = /* reset */ {};\n flags.splice(0);\n fresh = true;\n this.#textures.clear();\n this._resetMaterialBuffers();\n }\n const { pipeline } = context;\n const bag = (this.#bufferBag[key] ??= new Map());\n switch (key) {\n case 'material':\n case 'line':\n const buffer = this._ensureMaterialBuffer(context, key);\n if (buffer) {\n if (!bag.has(pipeline)) {\n fresh = true;\n bag.set(pipeline, buffer);\n }\n return Utils.extend(buffer, { fresh });\n }\n return null;\n default:\n throwBufferRequestError(key, MaterialBuffer);\n }\n }\n _ensureMaterialBuffer(ctx, key = 'material') {\n const set = this.#buffers;\n let retval = set.get(key);\n if (retval) {\n return retval;\n }\n if (set.has(key)) {\n return null;\n }\n retval = this.#wgpuMaterial?.buffer(ctx, key);\n if (retval) {\n set.set(key, retval);\n }\n return retval;\n }\n _resetMaterialBuffers() {\n this.#wgpuMaterial = Materials.create(this.item);\n this._destroyBuffers();\n }\n texture(ctx, key = 'texture') {\n const set = this.#textures;\n let retval = set.get(key), fresh = false;\n if (!retval) {\n retval = this.#wgpuMaterial?.texture(ctx, key);\n if (!retval) {\n return null;\n }\n set.set(key, retval);\n fresh = true;\n //\n this.#textureBag = /* reset */ {};\n }\n const { pipeline } = ctx;\n const bag = (this.#textureBag[key] ??= new Map());\n if (!bag.has(pipeline)) {\n fresh = true;\n bag.set(pipeline, retval);\n }\n return Utils.extend(retval, { fresh });\n }\n dispose() {\n this._destroyBuffers();\n }\n _destroyBuffers() {\n // memoizers\n this.#bufferBag = {};\n this.#textureBag = {};\n // buffers\n const buffers = this.#buffers.values();\n this.#buffers.clear(); // clear before destroying\n this.destroySafely(...buffers);\n // textures\n const textures = this.#textures.values();\n this.#textures.clear(); // clear before destroying\n textures.forEach(t => t.texture.destroy());\n }\n}\n// #endregion\n// #region INTERACTION\nclass InteractionBuffer extends ManagedBufferBase {\n #fields = {\n time: 0, cursor: { x: 0, y: 0 }, resolution: { width: 0, height: 0 }\n };\n #buffer;\n #bufferBag = new Map();\n constructor(data) {\n super(data);\n Utils.extend(this.#fields, data);\n }\n buffer(context, key) {\n switch (key) {\n // altogether\n case 'interaction':\n return this._ensureInteractionBuffer(context);\n default:\n throwBufferRequestError(key, InteractionBuffer);\n }\n }\n texture(_) {\n throw new Error(\"Method not implemented.\");\n }\n _ensureInteractionBuffer(ctx, key = 'interaction') {\n const fields = this.#fields, item = this.item;\n let fresh = (!this.#buffer\n || item.time !== fields.time\n || item.resolution?.width !== fields.resolution.width\n || item.resolution?.height !== fields.resolution.height);\n if (!fresh && !Utils.isNull(item.cursor)) {\n fresh = item.cursor.x !== fields.cursor.x\n || item.cursor.y !== fields.cursor.y;\n }\n if (fresh) {\n // [4bytes cursor.x, 4bytes cursor.y, 4bytes resolution.width, 4bytes resolution.height, 4bytes time] = 20 bytes total]\n const value = new Float32Array([item.cursor?.x ?? 0, item.cursor?.y ?? 0, item.resolution.width, item.resolution.height, item.time, /* padding */ .0]);\n const buffer = Buffers.createUniform(ctx.device, value, LABEL_PREFIX + 'interaction-buffer');\n this.#buffer = { buffer, value, version: performance.now() };\n this.#bufferBag.clear();\n }\n const { pipeline } = ctx;\n const bag = this.#bufferBag;\n if (!bag.has(pipeline)) {\n fresh = true;\n bag.set(pipeline, this.#buffer);\n }\n return Utils.extend(this.#buffer, { fresh });\n }\n _destroyBuffers() {\n // memoizer\n this.#bufferBag.clear();\n // buffer itself\n const obsolete = this.#buffer;\n if (!Utils.isNull(obsolete)) {\n this.destroySafely(obsolete);\n }\n }\n dispose() {\n this._destroyBuffers();\n }\n}\n// #endregion\n// #region MESH\nclass RenderableMeshBuffer extends RenderableBufferBase {\n #geometryBuffers;\n #geometryBuffer;\n #materialBuffers;\n #materialBuffer;\n #worldTransform;\n #freshness = {\n geometry: true, material: true, transform: true\n };\n #worldTransformBufferBag = new Map();\n constructor(mesh, parent, geometries, materials) {\n super(mesh, parent);\n mesh.flags ??= [];\n if (mesh.flags.indexOf(StalePropertyFlag.Geometry) === -1) {\n mesh.flags.push(StalePropertyFlag.Geometry);\n }\n if (mesh.flags.indexOf(StalePropertyFlag.Material) === -1) {\n mesh.flags.push(StalePropertyFlag.Material);\n }\n if (mesh.flags.indexOf(StalePropertyFlag.Position) === -1 && mesh.flags.indexOf(StalePropertyFlag.Transform) === -1) {\n mesh.flags.push(StalePropertyFlag.Transform);\n }\n this.#geometryBuffers = geometries;\n this.#materialBuffers = materials;\n }\n texture(ctx, key) {\n const material = this.#materialBuffer;\n return material?.texture(ctx, key);\n }\n specificBuffer(context, key) {\n const freshness = this.#freshness;\n const flags = this.allFlags();\n if (Utils.isNull(this.#worldTransform) || flags.includes(StalePropertyFlag.Position) || flags.includes(StalePropertyFlag.Transform)) {\n this.#worldTransformBufferBag.clear();\n // world transform bind group buffer\n freshness.transform = true;\n this._rebuildWorldMatrices(context);\n }\n if (Utils.isNull(this.#geometryBuffer) || flags.includes(StalePropertyFlag.Geometry)) {\n // vertex buffers\n freshness.geometry = true;\n this._ensureGeometryBuffer();\n }\n if (Utils.isNull(this.#materialBuffer) || flags.includes(StalePropertyFlag.Material)) {\n freshness.material = true;\n this._ensureMaterialBuffer();\n }\n RenderableBuffers.clearFlags(this);\n const geom = this.#geometryBuffer;\n const mater = this.#materialBuffer;\n switch (key) {\n case 'geometryPositions':\n case 'geometryNormals':\n case 'geometryTexCoords':\n case 'geometry':\n return geom.buffer(context, key);\n case 'material':\n case 'line':\n return mater.buffer(context, key);\n case 'objectWorldTransform':\n const mat = this.#worldTransform, wFresh = freshness.transform;\n freshness.transform = false;\n const bag = this.#worldTransformBufferBag, { pipeline } = context;\n const newInPipeline = !bag.has(pipeline);\n if (newInPipeline) {\n bag.set(pipeline, mat);\n }\n return Utils.extend(mat, { fresh: wFresh || newInPipeline });\n default:\n throwBufferRequestError(key, RenderableMeshBuffer);\n }\n }\n _ensureGeometryBuffer() {\n const current = this.#geometryBuffer;\n const cache = this.#geometryBuffers;\n const mesh = this.item;\n const geom = mesh.geometry;\n // no cache provided? destroy and rebuild\n if (Utils.isNull(cache)) {\n current?.destroy();\n this.#geometryBuffer = new GeometryBuffer(geom);\n }\n else {\n let buffer = cache?.get(geom);\n if (buffer?.disposed !== false) {\n buffer = new GeometryBuffer(geom);\n cache.set(geom, buffer);\n }\n this.#geometryBuffer = buffer;\n }\n }\n _ensureMaterialBuffer() {\n const current = this.#materialBuffer;\n const cache = this.#materialBuffers;\n const mesh = this.item;\n const material = mesh.material ?? DefaultMaterial;\n // no cache provided? destroy and rebuild\n if (Utils.isNull(cache)) {\n current?.destroy();\n this.#materialBuffer = new MaterialBuffer(material);\n }\n else {\n let buffer = cache?.get(material);\n if (buffer?.disposed !== false) {\n buffer = new MaterialBuffer(material);\n cache.set(material, buffer);\n }\n this.#materialBuffer = buffer;\n }\n }\n _rebuildWorldMatrices({ device }) {\n //this.destroySafely(this.#worldTransform);\n const item = this.item;\n const matrix = this.buildWorldTransform();\n const normal = Matrix3D.transpose(Matrix3D.invert(matrix));\n const value = new Float32Array(28);\n value.set(Matrix3D.toArray(matrix), 0);\n value.set([normal.m11, normal.m12, normal.m13, 0, normal.m21, normal.m22, normal.m23, 0, normal.m31, normal.m32, normal.m33, 0], 16);\n //const current = this.#worldTransform;\n // reuse GPUBuffer (always same size)\n if (Utils.isNull(this.#worldTransform)) {\n const buffer = Buffers.createUniform(device, value, LABEL_PREFIX + 'mesh-' + item.key + '-worldmatrix-buffer');\n this.#worldTransform = { buffer, value, version: performance.now().roundoff() };\n }\n else {\n this.#worldTransform.value = value;\n this.#worldTransform.version = performance.now().roundoff();\n }\n //if (!Utils.isNull(current)) {\n // this.destroySafely(current);\n //}\n }\n dispose() {\n // memoizer\n this.#worldTransformBufferBag.clear();\n const world = this.#worldTransform;\n this.#worldTransform = null;\n this.destroySafely(world);\n const material = this.#materialBuffer;\n this.#materialBuffer = null;\n material?.destroy();\n const geometry = this.#geometryBuffer;\n this.#geometryBuffer = null;\n geometry?.destroy();\n }\n}\n// #endregion\n// #region LIGHTS\nclass RenderableLightBuffer extends RenderableBufferBase {\n #buffer;\n #bufferBag = new Map();\n constructor(light) {\n super(light);\n light.flags.push(StalePropertyFlag.Light);\n }\n /**\n * Ambient light buffer building\n * @param param0\n */\n _rebuildAmbientLightBuffer({ device }) {\n const light = this.item;\n // sizes/offsets\n const szColor = 4, szIntensity = 1, offsetColor = 0, offsetIntensity = 4;\n const szTotal = 24; // offsetIntensity + szIntensity;\n const values = new Float32Array(szTotal);\n // color\n const { r, g, b, a } = Colors.parse(light.color ?? '#fff');\n values.set([r, g, b, a], offsetColor);\n // intensity\n values.set([light.intensity], offsetIntensity);\n this.#buffer = { value: values, buffer: Buffers.createUniform(device, values, LABEL_PREFIX + 'ambient-light-buffer'), version: performance.now() };\n }\n /**\n * Directional light buffer building\n * @param param0\n */\n _rebuildDirectionalLightBuffer({ device }) {\n const light = this.item;\n // sizes/offsets\n const szIntensity = 1, szColor = 4, szDirection = 3, offsetColor = 0, offsetDirection = 4, // see: https://www.w3.org/TR/WGSL/#memory-layouts\n offsetIntensity = 7;\n const szTotal = offsetIntensity + szIntensity;\n const values = new Float32Array(szTotal);\n // color\n const { r, g, b, a } = Colors.parse(light.color ?? '#fff');\n values.set([r, g, b, a], offsetColor);\n // intensity\n values.set([light.intensity], offsetIntensity);\n // direction\n const direction = Vector3D.subtract(light.position, light.target);\n values.set([direction.x, direction.y, direction.z], offsetDirection);\n this.#buffer = { value: values, buffer: Buffers.createUniform(device, values, LABEL_PREFIX + 'directional-light-buffer'), version: performance.now() };\n }\n /**\n * Omni light buffer building\n * @param param0\n */\n _rebuildOmniLightBuffer({ device }) {\n const light = this.item;\n // sizes/offsets\n const szIntensity = 1, szColor = 4, szPosition = 3, offsetColor = 0, offsetPosition = 4, // see: https://www.w3.org/TR/WGSL/#memory-layouts\n offsetIntensity = 7;\n const szTotal = offsetIntensity + szIntensity;\n const values = new Float32Array(szTotal);\n // color\n const { r, g, b, a } = Colors.parse(light.color ?? '#fff');\n values.set([r, g, b, a], offsetColor);\n // intensity\n values.set([light.intensity], offsetIntensity);\n // position\n values.set([light.position.x, light.position.y, light.position.z], offsetPosition);\n this.#buffer = { value: values, buffer: Buffers.createUniform(device, values, LABEL_PREFIX + 'omni-light-buffer'), version: performance.now() };\n }\n _rebuildLight(context) {\n this.destroySafely(this.#buffer);\n const light = this.item;\n switch (light.type) {\n case 'direction':\n this._rebuildDirectionalLightBuffer(context);\n break;\n case 'omni':\n this._rebuildOmniLightBuffer(context);\n break;\n case 'ambient':\n this._rebuildAmbientLightBuffer(context);\n break;\n default:\n throw new Error(`Light '${light.type}' is not supported.`);\n }\n }\n texture(_) {\n throw new Error(\"Method not implemented.\");\n }\n specificBuffer(context, key) {\n const bag = this.#bufferBag;\n let fresh = Utils.isNull(this.#buffer) || this.allFlags().length > 0;\n if (fresh) {\n bag.clear();\n this._rebuildLight(context);\n }\n RenderableBuffers.clearFlags(this);\n const { pipeline } = context;\n if (!bag.has(pipeline)) {\n fresh = true;\n bag.set(pipeline, this.#buffer);\n }\n if (key === 'light') {\n return Utils.extend(this.#buffer, { fresh });\n }\n throwBufferRequestError(key, RenderableLightBuffer);\n }\n dispose() {\n this.#bufferBag.clear();\n const buffer = this.#buffer;\n this.#buffer = null;\n this.destroySafely(buffer);\n }\n}\n// #endregion\n","import { Utils } from '@pacem/pacem-core';\nimport { isMesh, isCamera, isLight, isMeshGeometry } from '../../types';\nimport { KnownShader, isLineMaterial } from '../../materials/material';\nimport { WGSLBindingType } from './abstractions';\nimport { LABEL_PREFIX, MATERIAL_GROUP_INDEX, UNIFORM_GROUP_INDEX_LIGHTING, UNIFORM_GROUP_INDEX_CAMERA, UNIFORM_BINDING_INDEX_CAMERA, UNIFORM_GROUP_INDEX_TRANSFORM, UNIFORM_BINDING_INDEX_TRANSFORM, UNIFORM_GROUP_INDEX_INTERACTION, UNIFORM_BINDING_INDEX_INTERACTION, STORAGE_MATERIAL_INDEX, STORAGE_GROUP_INDEX_LINE, SAMPLER_BINDING_INDEX, TEXTURE_BINDING_INDEX, VERTEX_BUFFER_INDEX_MESH_POSITION, VERTEX_BUFFER_INDEX_MESH_NORMAL, VERTEX_BUFFER_INDEX_MESH_UV, VERTEX_COLOR_REFERENCE, LIGHTING_COLOR_REFERENCE, AMBIENT_COLOR_REFERENCE, UNIFORM_GROUP_INDEX_COLORPICKING, GPUShaderStage } from './constants';\nimport { BufferLayouts } from './buffers';\nimport { BasicMaterial, LineMaterial } from './materials';\nimport { getMeshVertexWgsl } from './wgsl/mesh-vertex';\nimport { getDefaultLineVertexWgsl, getFatLineVertexWgsl } from './wgsl/line-vertex';\nimport { getColorPickingFragmentWgsl } from './wgsl/object-picking-fragment';\nimport { textureMap } from './wgsl/texture-fragment';\nimport { directionalLight } from './wgsl/directional-light-fragment';\nimport { omniLight } from './wgsl/omni-light-fragment';\nimport { ambientLight } from './wgsl/ambient-light-fragment';\nimport { RenderableBuffers } from './renderablebuffer';\n//namespace Pacem.Drawing3D.WebGPU {\n// #region constants\nconst labelPrefix = LABEL_PREFIX;\nconst DefaultPipelineOptions = {\n multisample: true,\n packedVertices: true,\n primitive: {\n topology: 'triangle-list',\n frontFace: 'ccw',\n cullMode: 'back'\n }\n};\nconst EMPTY_BIND_DELEGATE = (_) => { };\n/**\n * Factory for {@link RenderPipeline}s: given a {@link Context} and a set of {@link RenderableBuffer}s (a mesh/line plus its\n * camera and lights), builds the WGSL shaders, {@link GPUBindGroupLayout}s, {@link GPUPipelineLayout} and the underlying\n * {@link GPURenderPipeline}(s) needed to draw (and, separately, color-pick/raycast) that combination. Built pipelines are\n * memoized per {@link Context} and reused as long as the shader \"recipe\" (mesh material/shader, light count/types, WGSL\n * modifier version) doesn't change. This is the machinery {@link Pacem3DWebgpuAdapterElement}'s {@link Renderer} implementation\n * (`renderer.ts`) drives every frame.\n */\nexport class RenderPipelines {\n static { this._memoizer = new WeakMap(); }\n /** Clears the {@link RenderPipeline} cache associated with the given {@link Context} (e.g. on device loss/adapter teardown). Does not explicitly destroy the underlying GPU objects — they're released with the {@link GPUDevice}. */\n static dispose(ctx) {\n const memoizer = this._memoizer;\n const cache = memoizer.get(ctx);\n if (!Utils.isNull(cache)) {\n cache.clear();\n memoizer.delete(ctx);\n }\n }\n /**\n * Builds (or reuses, via {@link create}'s cache) the render pipeline for `items` and wraps it as a color-picking-only\n * {@link RenderPipeline}, whose `frame` delegate draws object ids into an `r32uint` target instead of the normal color target.\n * Returns `null` if the resolved pipeline isn't a mesh or line pipeline (i.e. doesn't support raycasting).\n * @param items The mesh/line, camera and lights to raycast, in the same shape expected by {@link create}.\n */\n static createColorPicking(ctx, items) {\n const renderPipeline = RenderPipelines.create(ctx, items);\n if (renderPipeline instanceof MeshRenderPipelineClass\n || renderPipeline instanceof LineRenderPipelineClass) {\n return {\n frame: renderPipeline.raycast\n };\n }\n return null;\n }\n /**\n * Builds (or returns the memoized) {@link RenderPipeline} for the given renderables: the first buffer must wrap a\n * {@link Mesh} (with either a {@link MeshGeometry} or a {@link LineMaterial}), followed by its {@link Camera} buffer\n * and zero or more {@link Light} buffers. Generates the mesh/line's WGSL vertex and fragment shaders (via\n * {@link MeshWGSLBuilder}/{@link LineWGSLBuilder}), compiles them into {@link GPUShaderModule}s, creates the\n * {@link GPUBindGroupLayout}s/{@link GPUPipelineLayout} and the resulting {@link GPURenderPipeline} (plus a matching\n * color-picking pipeline). The pipeline is cached per {@link Context} keyed by shader \"recipe\" + WGSL modifiers version,\n * so repeated calls with an equivalent recipe skip rebuilding.\n * @param ctx WebGPU context (device/canvas/format) to build the pipeline against.\n * @param items `[mesh, camera, ...lights]` renderable buffers.\n * @param pipelineOptions Optional overrides for primitive topology, multisampling, vertex packing and WGSL modifiers.\n * @returns The built (or cached) {@link RenderPipeline}.\n * @throws {Error} If no mesh is provided, the mesh's geometry/material combination isn't supported, or the first argument isn't a mesh.\n */\n static create(ctx, [mesh, camera, ...lights], pipelineOptions) {\n const memoizer = RenderPipelines._memoizer;\n let cache = memoizer.get(ctx);\n if (Utils.isNull(cache)) {\n memoizer.set(ctx, cache = new Map());\n }\n //const camera = items.find(i => isCamera(i.item));\n //const lights = items.filter(i => isLight(i.item));\n //// find main object\n //const mesh = items.find(i => isMesh(i.item));\n if (!Utils.isNull(mesh)) {\n if (isMesh(mesh.item)) {\n const isMesh = isMeshGeometry(mesh.item.geometry);\n const isLine = !isMesh && isLineMaterial(mesh.item.material);\n if (!isMesh && !isLine) {\n throw new Error('Pipeline not implemented, given the provided mesh argument.');\n }\n const builder = isMesh ? new MeshWGSLBuilder(mesh, camera, ...lights)\n : new LineWGSLBuilder(mesh, camera);\n // cache peek for sudden return\n const key = builder.key + (pipelineOptions?.modifiers?.version ?? '');\n const found = cache.get(key);\n if (found) {\n return found;\n }\n const pipeline = isMesh ? new MeshRenderPipelineClass(ctx, builder)\n : new LineRenderPipelineClass(ctx, builder);\n // no cache -> build it\n pipeline.build(pipelineOptions);\n const retval = pipeline;\n Utils.extend(retval, {\n id: key + '-' + ctx.canvas.width + 'x' + ctx.canvas.height + '-' + Utils.Dates.now().toISOString()\n });\n cache.set(key, retval);\n return retval;\n }\n else {\n throw new ReferenceError('Pipeline not implemented, given thst the first argument is not a mesh.');\n }\n }\n else {\n throw new Error('Pipeline not implemented, given the provided arguments.');\n }\n }\n}\nclass RenderPipelineCache {\n constructor() {\n this.#cache = new Map();\n }\n #cache;\n ensureBindGroup({ device }, item, buffers, refresh, layout, label, callback = () => { }) {\n const cache = this.#cache;\n const key = typeof item === 'string' ? item : item.key;\n let set = cache.get(key);\n if (Utils.isNull(set)) {\n cache.set(key, set = new Map());\n }\n if (refresh || !set.has(label)) {\n const entries = buffers.map((item, index) => {\n const entry = {\n binding: index,\n resource: {\n buffer: item\n }\n };\n return entry;\n });\n const descriptor = {\n label,\n layout,\n entries\n };\n // custom config happens here\n callback(descriptor);\n const retval = device.createBindGroup(descriptor);\n set.set(label, retval);\n return retval;\n }\n else {\n return set.get(label);\n }\n }\n}\nclass MeshWGSLBuilder {\n #lights = [];\n #mesh;\n #camera;\n #bindgroups = new Map();\n #key = { shader: 'basic', lights: '' };\n constructor(...objects) {\n this.add(...objects);\n }\n reset() {\n this.#lights.splice(0);\n this.#mesh = null;\n this.#bindgroups.clear();\n this.#key = { shader: 'basic', lights: '' };\n }\n add(...objects) {\n for (let obj of objects ?? []) {\n if (isMesh(obj.item)) {\n if (Utils.isNull(this.#mesh)) {\n this.#mesh = obj;\n const material = obj.item.material ?? { shader: KnownShader.Basic };\n this.#key.shader = material.shader + '-' + (material.map ? 'map' : 'nomap');\n }\n else {\n throw new Error('Mesh already added.');\n }\n }\n else if (isLight(obj.item)) {\n const lights = this.#lights;\n lights.push(obj);\n this.#key.lights += ('-' + obj.item.type);\n }\n else if (isCamera(obj.item)) {\n this.#camera ??= obj;\n }\n else {\n throw new Error('Unknown object type.');\n }\n }\n // add interaction\n }\n build(modifiers) {\n const data = this._computeBasicData();\n const key = this.key, vertex = this.vertex({ inputModifier: modifiers?.vertexInput, outputModifier: modifiers?.vertexOutput }), fragment = this.fragment(data, { modifier: modifiers?.fragment }), bindings = (...args) => MeshWGSLBuilder.prototype.bindgroup.apply(this, args);\n const metadata = {\n lightCount: this.#lights.length,\n mapCount: this.#mesh.item.material?.map ? 1 : 0\n };\n return {\n vertex,\n fragment,\n key,\n bindings,\n metadata\n };\n }\n get key() {\n const { shader, lights } = this.#key;\n // TODO: consider backMap\n return `mesh-` + shader + lights;\n //return `mesh-${shader}${(hasTexture ? '-map' : '-nomap')}`;\n }\n bindgroup(type, key, index) {\n const set = this.#bindgroups;\n const arr = set.get(type);\n if (Utils.isNull(arr)) {\n return null;\n }\n if (Utils.isNullOrEmpty(key)) {\n return arr;\n }\n const filteredArr = arr.filter(i => i.key === key);\n if (isNaN(index)) {\n return filteredArr;\n }\n if (index >= 0 && index < arr.length) {\n return filteredArr[index];\n }\n return filteredArr;\n }\n vertex(options) {\n return getMeshVertexWgsl(options);\n }\n _computeBasicData() {\n const mesh = this.#mesh.item, lights = this.#lights, material = mesh.material, hasTexture = !Utils.isNull(material?.texture), hasLighting = !Utils.isNullOrEmpty(lights);\n const shader = Utils.isNull(mesh) ? KnownShader.Basic : (mesh.material?.shader ?? KnownShader.Basic);\n const materialBindGroupIndex = MATERIAL_GROUP_INDEX, lightingBindGroupIndex = UNIFORM_GROUP_INDEX_LIGHTING;\n return {\n hasTexture, hasLighting, shader,\n materialBindGroupIndex,\n lightingBindGroupIndex,\n };\n }\n _computeBindGroupsAndReferences(data = this._computeBasicData()) {\n const { hasTexture, materialBindGroupIndex, lightingBindGroupIndex } = data;\n const bindgroups = this.#bindgroups, lights = this.#lights;\n // build bindings\n // mesh + material\n const worldTransform = { key: 'objectWorldTransform', group: UNIFORM_GROUP_INDEX_TRANSFORM, binding: UNIFORM_BINDING_INDEX_TRANSFORM, type: 'buffer' };\n const material = { key: 'material', group: materialBindGroupIndex, binding: STORAGE_MATERIAL_INDEX, type: 'buffer' };\n if (hasTexture) {\n bindgroups.set(WGSLBindingType.Mesh, [worldTransform, material, { key: 'texture', group: materialBindGroupIndex, type: 'texture' }]);\n }\n else {\n bindgroups.set(WGSLBindingType.Mesh, [worldTransform, material]);\n }\n // camera\n bindgroups.set(WGSLBindingType.Camera, [\n { key: 'cameraViewTransform', group: UNIFORM_GROUP_INDEX_CAMERA, binding: UNIFORM_BINDING_INDEX_CAMERA, type: 'buffer' }\n ]);\n // lights\n const lArr = lights.map((_, ndx) => {\n return { key: 'light', group: lightingBindGroupIndex, binding: ndx, type: 'buffer' };\n });\n lArr.push(...lArr);\n // interaction\n bindgroups.set(WGSLBindingType.Interaction, [{ key: 'interaction', group: UNIFORM_GROUP_INDEX_INTERACTION, type: 'buffer', binding: UNIFORM_BINDING_INDEX_INTERACTION }]);\n }\n fragment(data = this._computeBasicData(), options) {\n this._computeBindGroupsAndReferences(data);\n const extra = {\n definitions: [], bindings: [], modifiers: []\n };\n const merge = (x) => {\n for (let definition of x.definitions ?? []) {\n if (extra.definitions.indexOf(definition) === -1) {\n extra.definitions.push(definition);\n }\n }\n if (!Utils.isNullOrEmpty(x.bindings)) {\n extra.bindings.push(...x.bindings);\n }\n if (!Utils.isNullOrEmpty(x.modifiers)) {\n extra.modifiers.push(...x.modifiers);\n }\n };\n /* TODO: consider injecting customizations (options.modifier) into `WGSLFragmentExtra`*/\n switch (data.shader) {\n case KnownShader.Basic:\n // texture\n if (data.hasTexture) {\n const materialGroupIndex = data.materialBindGroupIndex;\n const wgslTex = textureMap({ inputColor: VERTEX_COLOR_REFERENCE, outputColors: [VERTEX_COLOR_REFERENCE], uv: 'uv' }, materialGroupIndex);\n merge(wgslTex);\n }\n // lights\n let lightIndex = 0;\n const lights = this.#lights;\n for (let lightBuffer of lights) {\n const light = lightBuffer.item; // TODO: consider implementing Pacem.Drawing3D.WebGPU.Light interface (as of Materials)\n switch (light.type) {\n case 'direction':\n const dirLightExtra = directionalLight({ outputColor: LIGHTING_COLOR_REFERENCE, normal: 'normal' }, data.lightingBindGroupIndex, lightIndex);\n merge(dirLightExtra);\n break;\n case 'omni':\n const omniLightExtra = omniLight({ outputColor: LIGHTING_COLOR_REFERENCE, normal: 'normal', position: 'vertex', /*specularColor: MATERIAL_REFERENCE + '.specularColor', shininess: MATERIAL_REFERENCE + '.shininess'*/ }, data.lightingBindGroupIndex, lightIndex);\n merge(omniLightExtra);\n break;\n case 'ambient':\n const ambLightExtra = ambientLight({ inputColor: VERTEX_COLOR_REFERENCE, outputColor: AMBIENT_COLOR_REFERENCE }, data.lightingBindGroupIndex, lightIndex);\n merge(ambLightExtra);\n break;\n }\n lightIndex++;\n }\n return BasicMaterial.fragment(extra, options);\n }\n }\n}\nconst PipelineUtils = {\n writeBufferConditionally: (device, buffer) => {\n if (!buffer.fresh) {\n return;\n }\n device.queue.writeBuffer(buffer.buffer, 0, buffer.value);\n }\n};\nclass MeshRenderPipelineClass {\n constructor(_context, _builder, _cache = new RenderPipelineCache()) {\n this._context = _context;\n this._builder = _builder;\n this._cache = _cache;\n // #region fields and utils\n this._ensureU32idBindGroup = (item, buffer, refresh) => {\n return this._cache.ensureBindGroup(this._context, item, [buffer], refresh, this._pickBindGroupLayout, labelPrefix + 'mesh-colorpick-bind-group');\n };\n this._ensureMaterialBindGroup = (item, buffer, texture, refresh, layoutIndex = MATERIAL_GROUP_INDEX) => {\n const layout = this._bindGroupLayouts[layoutIndex], label = labelPrefix + 'material-bind-group';\n if (layout.label !== (labelPrefix + 'material-bind-group-layout')) {\n throw new Error('BindGroupLayout mismatch!');\n }\n return this._cache.ensureBindGroup(this._context, item, [buffer], refresh, layout, label, (descriptor) => {\n const { device } = this.context;\n const entries = descriptor.entries /* entries are build as array in the method */;\n if (texture) {\n entries.push({\n binding: SAMPLER_BINDING_INDEX, resource: device.createSampler({\n addressModeU: 'repeat',\n addressModeV: 'repeat',\n magFilter: 'linear',\n minFilter: 'linear',\n })\n }, {\n binding: TEXTURE_BINDING_INDEX, resource: texture.createView()\n });\n }\n });\n };\n this._ensureWorldTransformBindGroup = (item, buffer, refresh, layoutIndex = UNIFORM_GROUP_INDEX_TRANSFORM, raycasting = false) => {\n const layout = this._bindGroupLayouts[layoutIndex];\n if (layout.label !== (labelPrefix + 'mesh-transforms-bind-group-layout')) {\n throw new Error('BindGroupLayout mismatch!');\n }\n const key = item.key + '-' + (raycasting ? 1 : 0);\n const label = `${labelPrefix}${raycasting ? 'colorpick' : 'mesh'}-transforms-bind-group`;\n return this._cache.ensureBindGroup(this._context, key, [buffer], refresh, layout, label);\n };\n this._ensureCameraProjectionAndInteractionDataBindGroup = (item, viewBuffer, interactionBuffer, refresh, layoutIndex = UNIFORM_GROUP_INDEX_CAMERA, raycasting = false) => {\n const layout = this._bindGroupLayouts[layoutIndex];\n const key = item.key + '-' + (raycasting ? 1 : 0);\n const label = `${labelPrefix}${raycasting ? 'colorpick' : 'mesh'}-view-bind-group`;\n return this._cache.ensureBindGroup(this._context, key, [viewBuffer, interactionBuffer], refresh, layout, label);\n };\n this._ensureLightingBindGroup = (lights, refresh, layoutIndex = UNIFORM_GROUP_INDEX_LIGHTING) => {\n const layout = this._bindGroupLayouts[layoutIndex];\n const key = lights.map(l => l.id).join(':');\n const buffers = lights.map(l => l.buffer.buffer);\n return this._cache.ensureBindGroup(this._context, key, buffers, refresh, layout, labelPrefix + 'mesh-lighting-bind-group');\n };\n this._bindGroupLayouts = [];\n this._bindVertex = EMPTY_BIND_DELEGATE;\n this._bindPicker = EMPTY_BIND_DELEGATE;\n this._bindWorldTransform = EMPTY_BIND_DELEGATE;\n this._bindRaycastWorldTransform = EMPTY_BIND_DELEGATE;\n this._bindCameraProjectionAndInteractionData = EMPTY_BIND_DELEGATE;\n this._bindRaycastCameraProjectionAndInteractionData = EMPTY_BIND_DELEGATE;\n this._bindLighting = EMPTY_BIND_DELEGATE;\n this._bindMaterial = EMPTY_BIND_DELEGATE;\n // #endregion\n // #region implementation\n this.set = (pass) => {\n throw new Error('Deprecated.');\n };\n this.bind = (pass, ...buffers) => {\n throw new Error('Deprecated.');\n };\n this.draw = (pass, ...buffers) => {\n throw new Error('Deprecated.');\n };\n this.frame = (pass, interactionBuffer, meshBuffer, cameraBuffer, ...lightBuffers) => {\n // set\n pass.setPipeline(this._pipeline);\n try {\n // bind\n this._bindVertex(pass, meshBuffer);\n this._bindWorldTransform(pass, meshBuffer);\n this._bindMaterial(pass, meshBuffer);\n this._bindCameraProjectionAndInteractionData(pass, cameraBuffer, interactionBuffer);\n this._bindLighting(pass, ...lightBuffers);\n // draw\n const mesh = meshBuffer.item, geometry = mesh.geometry;\n pass.draw(geometry.triangleIndices?.length || geometry.positions.length);\n }\n catch (e) {\n console.error('Pacem.Drawing3D.FrameException', e);\n }\n };\n this.raycast = (pass, interactionBuffer, meshBuffer, cameraBuffer) => {\n // set\n pass.setPipeline(this._pickPipeline);\n try {\n // bind\n this._bindVertex(pass, meshBuffer);\n this._bindRaycastWorldTransform(pass, meshBuffer);\n this._bindRaycastCameraProjectionAndInteractionData(pass, cameraBuffer, interactionBuffer);\n this._bindPicker(pass, meshBuffer);\n // draw\n const mesh = meshBuffer.item, geometry = mesh.geometry;\n pass.draw(geometry.triangleIndices.length);\n }\n catch (e) { }\n };\n this._key = _builder.key;\n }\n get context() {\n return this._context;\n }\n get key() {\n return this._key;\n }\n build(pipelineOptions) {\n const options = Utils.extend({}, DefaultPipelineOptions, pipelineOptions ?? {});\n const builder = this._builder, wgsl = builder.build(options.modifiers);\n const ctx = Utils.extend({ pipeline: this }, this._context);\n const device = ctx.device;\n // #region VERTEX\n // build vertex state\n const vertex = {\n module: device.createShaderModule({ code: wgsl.vertex }),\n buffers: options.packedVertices ?\n [\n // packed\n BufferLayouts.createVertex(VERTEX_BUFFER_INDEX_MESH_POSITION, 3, 3, 2),\n ]\n : [\n // position\n BufferLayouts.createVertex(VERTEX_BUFFER_INDEX_MESH_POSITION, 3),\n // normal\n BufferLayouts.createVertex(VERTEX_BUFFER_INDEX_MESH_NORMAL, 3),\n // uv\n BufferLayouts.createVertex(VERTEX_BUFFER_INDEX_MESH_UV, 2)\n ]\n };\n // bind group layouts\n const viewBindGroupLayout = device.createBindGroupLayout({\n entries: [\n // camera matrices\n {\n binding: UNIFORM_BINDING_INDEX_CAMERA,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform'\n }\n },\n // interaction\n {\n binding: UNIFORM_BINDING_INDEX_INTERACTION,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform'\n }\n }\n ], label: labelPrefix + 'mesh-view-bind-group-layout'\n });\n const worldBindGroupLayout = device.createBindGroupLayout({\n entries: [\n {\n // world- and normalMatrix entry\n binding: UNIFORM_BINDING_INDEX_TRANSFORM,\n visibility: GPUShaderStage.VERTEX,\n buffer: {\n type: 'uniform'\n }\n }\n ], label: labelPrefix + 'mesh-transforms-bind-group-layout'\n });\n const bindGroupLayouts = [viewBindGroupLayout, worldBindGroupLayout];\n // #endregion\n // #region FRAGMENT\n // TODO: https://stackoverflow.com/questions/50720534/implementing-depth-testing-for-semi-transparent-objects\n // Weighted Blended Order-Independent Transparency https://jcgt.org/published/0002/02/09/\n // a-buffer: https://webgpu.github.io/webgpu-samples/?sample=a-buffer#composite.wgsl\n const fragment = {\n module: device.createShaderModule({\n code: wgsl.fragment\n }), targets: [\n {\n format: ctx.format,\n blend: {\n color: {\n srcFactor: 'src-alpha',\n dstFactor: 'one-minus-src-alpha'\n },\n alpha: {},\n }\n }\n ]\n };\n // material\n // material / material\n const materialGroupIndex = bindGroupLayouts.length;\n const materialBindGroupLayoutDescriptorEntries = [{\n // vertex colors entry\n binding: STORAGE_MATERIAL_INDEX,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'read-only-storage'\n }\n }];\n // material / texture\n const { mapCount } = wgsl.metadata, hasTex = mapCount > 0;\n if (hasTex) {\n materialBindGroupLayoutDescriptorEntries.push({ visibility: GPUShaderStage.FRAGMENT, binding: SAMPLER_BINDING_INDEX, sampler: {} }, ...Array(mapCount).keys().map(index => { return { visibility: GPUShaderStage.FRAGMENT, binding: SAMPLER_BINDING_INDEX + 1 + index, texture: {} }; }));\n }\n else {\n }\n const materialBindGroupLayoutDescriptor = {\n label: labelPrefix + 'material-bind-group-layout',\n entries: materialBindGroupLayoutDescriptorEntries\n };\n const materialBindGroupLayout = device.createBindGroupLayout(materialBindGroupLayoutDescriptor);\n bindGroupLayouts.push(materialBindGroupLayout);\n // lighting\n const lightingGroupIndex = bindGroupLayouts.length;\n const { lightCount } = wgsl.metadata, hasLighting = lightCount > 0;\n if (hasLighting) {\n const lightingBindGroupLayout = device.createBindGroupLayout({\n entries: [...Array(lightCount).keys()].map((_, index) => {\n return {\n visibility: GPUShaderStage.FRAGMENT, binding: index, buffer: {\n type: 'uniform'\n }\n };\n }),\n label: labelPrefix + 'lighting-bind-group-layout'\n });\n bindGroupLayouts.push(lightingBindGroupLayout);\n }\n // #endregion\n // #region PIPELINE\n // full pipeline descriptor\n const descriptor = {\n label: labelPrefix + 'mesh-render-pipeline',\n vertex,\n fragment,\n // pipeline-layout\n layout: device.createPipelineLayout({\n label: labelPrefix + 'mesh-render-pipeline-layout',\n bindGroupLayouts: (this._bindGroupLayouts = bindGroupLayouts)\n }),\n primitive: options.primitive\n };\n if (options.multisample) {\n descriptor.multisample = { count: 4 };\n descriptor.depthStencil = {\n depthCompare: 'less',\n format: 'depth24plus',\n depthWriteEnabled: true\n };\n }\n this._pipeline = device.createRenderPipeline(descriptor);\n // raycast pipeline descriptor\n const pickFragGroupLayout = this._pickBindGroupLayout = device.createBindGroupLayout({\n label: labelPrefix + 'mesh-colorpick-bind-group-layout',\n entries: [\n {\n visibility: GPUShaderStage.FRAGMENT,\n binding: 0,\n buffer: { type: 'uniform' }\n }\n ]\n });\n const pickDescriptor = {\n label: labelPrefix + 'mesh-colorpick-pipeline',\n vertex,\n fragment: {\n module: device.createShaderModule({\n code: getColorPickingFragmentWgsl(UNIFORM_GROUP_INDEX_COLORPICKING)\n }), targets: [\n { format: 'r32uint' }\n ]\n },\n layout: device.createPipelineLayout({\n label: labelPrefix + 'mesh-colorpick-pipeline-layout',\n bindGroupLayouts: [viewBindGroupLayout, worldBindGroupLayout, pickFragGroupLayout]\n }),\n primitive: options.primitive,\n depthStencil: {\n depthWriteEnabled: true,\n depthCompare: 'less',\n format: 'depth24plus',\n },\n };\n this._pickPipeline = device.createRenderPipeline(pickDescriptor);\n // #endregion\n // vertex buffers\n const bindVertexSplit = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing vertex buffers was provided.`);\n }\n const { buffer: positions } = meshBuffer.buffer(ctx, 'geometryPositions');\n const { buffer: normals } = meshBuffer.buffer(ctx, 'geometryNormals');\n const { buffer: uv } = meshBuffer.buffer(ctx, 'geometryTexCoords');\n pass.setVertexBuffer(VERTEX_BUFFER_INDEX_MESH_POSITION, positions);\n pass.setVertexBuffer(VERTEX_BUFFER_INDEX_MESH_NORMAL, normals);\n pass.setVertexBuffer(VERTEX_BUFFER_INDEX_MESH_UV, uv);\n };\n const bindVertexPacked = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing vertex buffers was provided.`);\n }\n const { buffer } = meshBuffer.buffer(ctx, 'geometry');\n pass.setVertexBuffer(VERTEX_BUFFER_INDEX_MESH_POSITION, buffer);\n };\n this._bindVertex = options.packedVertices ? bindVertexPacked : bindVertexSplit;\n // world transform\n const bindWorldTransform = (pass, meshBuffer, raycasting) => {\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing world transform buffer was provided.`);\n }\n const worldTransform = meshBuffer.buffer(ctx, 'objectWorldTransform'), worldTransformBuffer = worldTransform.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, worldTransform);\n const { group } = wgsl.bindings(WGSLBindingType.Mesh, 'objectWorldTransform', 0);\n const bindGroup = this._ensureWorldTransformBindGroup(meshBuffer.item, worldTransformBuffer, worldTransform.fresh /*false*/ /* persist the same bindGroup, given the constant size */, group, raycasting);\n pass.setBindGroup(group, bindGroup);\n };\n this._bindWorldTransform = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n bindWorldTransform(pass, meshBuffer, false);\n };\n this._bindRaycastWorldTransform = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n bindWorldTransform(pass, meshBuffer, true);\n };\n // camera matrices and interaction data\n const bindCameraProjectionAndInteractionData = (pass, cameraBuffer, interactionBuffer, raycasting) => {\n if (Utils.isNull(cameraBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing view projection buffers was provided.`);\n }\n // camera view\n const viewTransformBuffer = cameraBuffer.buffer(ctx, 'cameraViewTransform'), viewTransformBufferBuffer = viewTransformBuffer.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, viewTransformBuffer);\n // interaction\n if (Utils.isNull(interactionBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing interaction buffers was provided.`);\n }\n const interactionDataBuffer = interactionBuffer.buffer(ctx, 'interaction'), interactionDataBufferBuffer = interactionDataBuffer.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, interactionDataBuffer);\n const { group } = wgsl.bindings(WGSLBindingType.Camera, 'cameraViewTransform', 0);\n const { group: interactionGroup } = wgsl.bindings(WGSLBindingType.Interaction, 'interaction', 0);\n if (group !== interactionGroup) {\n throw new ReferenceError(`Layout bind group mismatch: ${group} vs ${interactionGroup}.`);\n }\n const bindGroup = this._ensureCameraProjectionAndInteractionDataBindGroup(cameraBuffer.item, viewTransformBufferBuffer, interactionDataBufferBuffer, \n // since fresh could mean also \"camera switched\" (e.g. from ortho to perspective and then back to ortho) there's risk\n // to target destroyed buffers, this refresh the bind group if either buffer is fresh.\n // Possibilities for fine-tuning in future.\n viewTransformBuffer.fresh || interactionDataBuffer.fresh, group, raycasting);\n pass.setBindGroup(group, bindGroup);\n };\n this._bindCameraProjectionAndInteractionData = (pass, ...buffers) => {\n const cameraBuffer = buffers.at(0);\n const interactionBuffer = buffers.at(1);\n bindCameraProjectionAndInteractionData(pass, cameraBuffer, interactionBuffer, false);\n };\n this._bindRaycastCameraProjectionAndInteractionData = (pass, ...buffers) => {\n const cameraBuffer = buffers.at(0);\n const interactionBuffer = buffers.at(1);\n bindCameraProjectionAndInteractionData(pass, cameraBuffer, interactionBuffer, true);\n };\n // vertexColors and textures\n this._bindMaterial = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing vertex colors was provided.`);\n }\n const vertexColorsBuffer = meshBuffer.buffer(ctx, 'material'), vertexColorsBufferBuffer = vertexColorsBuffer.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, vertexColorsBuffer);\n let tex = meshBuffer.texture(ctx);\n const texBmp = tex?.texture;\n const bindGroup = this._ensureMaterialBindGroup(meshBuffer.item, vertexColorsBufferBuffer, texBmp, vertexColorsBuffer.fresh, materialGroupIndex);\n pass.setBindGroup(materialGroupIndex, bindGroup);\n if (hasTex) {\n device.queue.copyExternalImageToTexture({ source: tex.source, flipY: true }, { texture: texBmp }, { width: texBmp.width, height: texBmp.height });\n }\n };\n // lights\n this._bindLighting = (pass, ...buffers) => {\n if (hasLighting) {\n const lightArray = Array.from(buffers);\n const lightBuffers = lightArray.map(l => { return { buffer: l.buffer(ctx, 'light'), id: l.item.key }; });\n const refresh = lightBuffers.some(b => b.buffer.fresh);\n const bindGroup = this._ensureLightingBindGroup(lightBuffers, refresh, lightingGroupIndex);\n for (let lightBuffer of lightBuffers) {\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, lightBuffer.buffer);\n }\n pass.setBindGroup(lightingGroupIndex, bindGroup);\n }\n };\n // picker\n this._bindPicker = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing world transform buffer was provided.`);\n }\n const u32id = meshBuffer.buffer(ctx, 'u32id'), u32idBuffer = u32id.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, u32id);\n const group = UNIFORM_GROUP_INDEX_COLORPICKING;\n const refresh = u32id.fresh;\n const bindGroup = this._ensureU32idBindGroup(meshBuffer.item, u32idBuffer, refresh /* reuse u32id.fresh*/);\n pass.setBindGroup(group, bindGroup);\n };\n }\n}\nclass LineWGSLBuilder {\n #line;\n #camera;\n #bindgroups = new Map();\n constructor(...objects) {\n this.add(...objects);\n }\n reset() {\n this.#line = null;\n this.#bindgroups.clear();\n }\n add(...objects) {\n for (let obj of objects ?? []) {\n if (isMesh(obj.item)) {\n if (Utils.isNull(this.#line)) {\n this.#line = obj;\n }\n else {\n throw new Error('Line already added.');\n }\n }\n else if (isCamera(obj.item)) {\n this.#camera ??= obj;\n }\n else if (isLight(obj.item)) {\n // ignore\n }\n else {\n throw new Error('Unknown object type.');\n }\n }\n }\n build() {\n const data = this._computeBasicData();\n const key = this.key, vertex = this.vertex(data), fragment = this.fragment(data), bindings = (...args) => LineWGSLBuilder.prototype.bindgroup.apply(this, args);\n return {\n vertex,\n fragment,\n key,\n bindings,\n metadata: { thickness: data.thickness, dashPattern: data.dashPattern }\n };\n }\n get key() {\n const fat = (this.#line?.item).material?.lineWidth > 1;\n return KnownShader.Line + (fat ? '-fat' : '');\n }\n bindgroup(type, key, index) {\n const set = this.#bindgroups;\n const arr = set.get(type);\n if (Utils.isNull(arr)) {\n return null;\n }\n if (Utils.isNullOrEmpty(key)) {\n return arr;\n }\n const filteredArr = arr.filter(i => i.key === key);\n if (isNaN(index)) {\n return filteredArr;\n }\n if (index >= 0 && index < arr.length) {\n return filteredArr[index];\n }\n return filteredArr;\n }\n vertex(data = this._computeBasicData()) {\n return data.thickness > 1 ? getFatLineVertexWgsl() : getDefaultLineVertexWgsl();\n }\n _computeBasicData() {\n const mesh = this.#line.item;\n const shader = Utils.isNull(mesh) ? KnownShader.Line : (mesh.material?.shader ?? KnownShader.Line);\n const material = mesh.material;\n const thickness = material?.lineWidth ?? 1;\n const dashPattern = material?.dashArray;\n return {\n shader,\n thickness, dashPattern,\n };\n }\n _computeBindGroupsAndReferences(data = this._computeBasicData()) {\n const bindgroups = this.#bindgroups;\n // build bindings\n // mesh + material\n const worldTransform = { key: 'objectWorldTransform', group: UNIFORM_GROUP_INDEX_TRANSFORM, binding: UNIFORM_BINDING_INDEX_TRANSFORM, type: 'buffer' };\n const material = { key: 'material', group: STORAGE_GROUP_INDEX_LINE + 1, binding: STORAGE_MATERIAL_INDEX, type: 'buffer' };\n const geometryPositions = { key: 'geometryPositions', group: STORAGE_GROUP_INDEX_LINE, binding: 0, type: 'buffer' };\n const line = { key: 'line', group: STORAGE_GROUP_INDEX_LINE, binding: 1, type: 'buffer' };\n bindgroups.set(WGSLBindingType.Mesh, [worldTransform, material, geometryPositions, line]);\n // camera\n bindgroups.set(WGSLBindingType.Camera, [\n { key: 'cameraViewTransform', group: UNIFORM_GROUP_INDEX_CAMERA, binding: UNIFORM_BINDING_INDEX_CAMERA, type: 'buffer' }\n ]);\n }\n fragment(data = this._computeBasicData()) {\n this._computeBindGroupsAndReferences(data);\n const extra = {\n definitions: [], bindings: [], modifiers: []\n };\n switch (data.shader) {\n case KnownShader.Line:\n return LineMaterial.fragment(extra);\n }\n }\n}\nclass LineRenderPipelineClass {\n #context;\n constructor(context, _lineBuilder, _cache = new RenderPipelineCache()) {\n this._lineBuilder = _lineBuilder;\n this._cache = _cache;\n // #region fields and utils\n this._ensureLineU32idBindGroup = (item, buffer, refresh) => {\n const ctx = this.context;\n return this._cache.ensureBindGroup(ctx, item, [buffer], refresh, this._pickLineBindGroupLayout, labelPrefix + 'line-colorpick-bind-group');\n };\n this._ensureLineMaterialBindGroup = (item, buffer, refresh, layoutIndex = MATERIAL_GROUP_INDEX) => {\n const layout = this._bindLineGroupLayouts[layoutIndex];\n if (layout.label !== (labelPrefix + 'line-material-bind-group-layout')) {\n throw new Error('BindGroupLayout mismatch!');\n }\n const ctx = this.context;\n return this._cache.ensureBindGroup(ctx, item, [buffer], refresh, layout, labelPrefix + 'line-material-bind-group');\n };\n this._ensureLinePositionsBindGroup = (item, buffers, refresh, layoutIndex) => {\n const layout = this._bindLineGroupLayouts[layoutIndex];\n if (layout.label !== (labelPrefix + 'line-positions-bind-group-layout')) {\n throw new Error('BindGroupLayout mismatch!');\n }\n const ctx = this.context;\n return this._cache.ensureBindGroup(ctx, item, buffers, refresh, layout, labelPrefix + 'line-positions-bind-group');\n };\n this._ensureLineWorldTransformBindGroup = (item, buffer, refresh, layoutIndex = UNIFORM_GROUP_INDEX_TRANSFORM, raycasting = false) => {\n const layout = this._bindLineGroupLayouts[layoutIndex];\n if (layout.label !== (labelPrefix + 'line-transforms-bind-group-layout')) {\n throw new Error('BindGroupLayout mismatch!');\n }\n const key = item.key + '-line-' + (raycasting ? 1 : 0);\n const label = `${labelPrefix}${raycasting ? 'colorpick' : ''}-line-transforms-bind-group`;\n const ctx = this.context;\n return this._cache.ensureBindGroup(ctx, key, [buffer], refresh, layout, label);\n };\n this._ensureLineCameraProjectionBindGroup = (item, viewBuffer, refresh, layoutIndex = UNIFORM_GROUP_INDEX_CAMERA, raycasting = false) => {\n const layout = this._bindLineGroupLayouts[layoutIndex];\n const key = item.key + '-line-' + (raycasting ? 1 : 0);\n const label = `${labelPrefix}${raycasting ? 'colorpick' : ''}-line-view-bind-group`;\n const ctx = this.context;\n return this._cache.ensureBindGroup(ctx, key, [viewBuffer], refresh, layout, label);\n };\n this._bindLineGroupLayouts = [];\n this._bindLinePositions = EMPTY_BIND_DELEGATE;\n this._bindLinePicker = EMPTY_BIND_DELEGATE;\n this._bindLineWorldTransform = EMPTY_BIND_DELEGATE;\n this._bindLineRaycastWorldTransform = EMPTY_BIND_DELEGATE;\n this._bindLineCameraProjection = EMPTY_BIND_DELEGATE;\n this._bindLineRaycastCameraProjection = EMPTY_BIND_DELEGATE;\n this._bindLineMaterial = EMPTY_BIND_DELEGATE;\n this._drawLine = EMPTY_BIND_DELEGATE;\n // #endregion\n // #region implementation\n this.set = (pass) => {\n throw new Error('Deprecated.');\n };\n this.bind = (pass, ...buffers) => {\n throw new Error('Deprecated.');\n };\n this.draw = (pass, ...buffers) => {\n throw new Error('Deprecated.');\n };\n this.frame = (pass, /* unused yet */ interactionBuffer, meshBuffer, cameraBuffer) => {\n // set\n pass.setPipeline(this._linePipeline);\n try {\n // bind\n this._bindLineWorldTransform(pass, meshBuffer);\n this._bindLineCameraProjection(pass, cameraBuffer);\n this._bindLinePositions(pass, meshBuffer);\n this._bindLineMaterial(pass, meshBuffer);\n // draw\n this._drawLine(pass, meshBuffer);\n }\n catch (e) {\n console.error('Pacem.Drawing3D.FrameException', e);\n }\n };\n this.raycast = (pass, /* unused yet */ interactionBuffer, meshBuffer, cameraBuffer) => {\n // set\n pass.setPipeline(this._pickLinePipeline);\n try {\n // bind\n this._bindLineRaycastWorldTransform(pass, meshBuffer);\n this._bindLineRaycastCameraProjection(pass, cameraBuffer);\n this._bindLinePositions(pass, meshBuffer);\n this._bindLinePicker(pass, meshBuffer);\n // draw\n this._drawLine(pass, meshBuffer);\n }\n catch (e) { }\n };\n this.#context = context;\n this._lineKey = _lineBuilder.key;\n }\n get context() {\n return this.#context;\n }\n get key() {\n return this._lineKey;\n }\n build(pipelineOptions) {\n const options = Utils.extend({}, DefaultPipelineOptions, pipelineOptions ?? {});\n const builder = this._lineBuilder, wgsl = builder.build();\n const ctx = Utils.extend({ pipeline: this }, this.#context);\n const device = ctx.device;\n // TODO: switch topology based on this flag\n const fatLines = wgsl.metadata.thickness > 1;\n // #region VERTEX\n // build vertex state\n const vertex = {\n module: device.createShaderModule({ code: wgsl.vertex }),\n buffers: []\n };\n // bind group layouts\n const worldBindGroupLayout = device.createBindGroupLayout({\n entries: [\n {\n // world- and normalMatrix entry\n binding: UNIFORM_BINDING_INDEX_TRANSFORM,\n visibility: GPUShaderStage.VERTEX,\n buffer: {\n type: 'uniform'\n }\n }\n ], label: labelPrefix + 'line-transforms-bind-group-layout'\n });\n const viewBindGroupLayout = device.createBindGroupLayout({\n entries: [\n // camera matrices\n {\n binding: UNIFORM_BINDING_INDEX_CAMERA,\n visibility: GPUShaderStage.VERTEX,\n buffer: {\n type: 'uniform'\n }\n },\n // interaction\n /*{\n binding: UNIFORM_BINDING_INDEX_INTERACTION,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform'\n }\n }*/\n ], label: labelPrefix + 'line-view-bind-group-layout'\n });\n const lineEntries = [\n // positions array\n {\n binding: 0,\n visibility: GPUShaderStage.VERTEX,\n buffer: {\n type: 'read-only-storage'\n }\n }\n ];\n if (fatLines) {\n lineEntries.push(\n // line properties (width, dash-array, lineCap, ...)\n {\n binding: 1,\n visibility: GPUShaderStage.VERTEX,\n buffer: {\n type: 'uniform'\n }\n });\n }\n const lineBindGroupLayout = device.createBindGroupLayout({\n entries: lineEntries, label: labelPrefix + 'line-positions-bind-group-layout'\n });\n const vertexBindGroupLayouts = [viewBindGroupLayout, worldBindGroupLayout, lineBindGroupLayout];\n const raycastLayoutIndex = vertexBindGroupLayouts.length;\n const bindGroupLayouts = vertexBindGroupLayouts.slice();\n // #endregion\n // #region FRAGMENT\n const fragment = {\n module: device.createShaderModule({\n code: wgsl.fragment\n }), targets: [\n {\n format: ctx.format,\n blend: {\n color: {\n srcFactor: 'src-alpha',\n dstFactor: 'one-minus-src-alpha'\n },\n alpha: {},\n }\n }\n ]\n };\n // material\n // material / material\n const materialGroupIndex = bindGroupLayouts.length;\n const materialBindGroupLayoutDescriptorEntries = [{\n // vertex colors entry\n binding: STORAGE_MATERIAL_INDEX,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'read-only-storage'\n }\n }];\n const materialBindGroupLayoutDescriptor = {\n label: labelPrefix + 'line-material-bind-group-layout',\n entries: materialBindGroupLayoutDescriptorEntries\n };\n const materialBindGroupLayout = device.createBindGroupLayout(materialBindGroupLayoutDescriptor);\n bindGroupLayouts.push(materialBindGroupLayout);\n // #endregion\n // #region PIPELINE\n const topology = fatLines ? options.primitive.topology : 'line-list';\n // full pipeline descriptor\n const descriptor = {\n label: labelPrefix + 'line-render-pipeline',\n vertex,\n fragment,\n // pipeline-layout\n layout: device.createPipelineLayout({\n label: labelPrefix + 'line-render-pipeline-layout',\n bindGroupLayouts: (this._bindLineGroupLayouts = bindGroupLayouts)\n }),\n primitive: Utils.extend({}, options.primitive, { topology }),\n };\n if (options.multisample) {\n descriptor.multisample = { count: 4 };\n descriptor.depthStencil = {\n depthCompare: 'less',\n format: 'depth24plus',\n depthWriteEnabled: true\n };\n }\n this._linePipeline = device.createRenderPipeline(descriptor);\n // raycast pipeline descriptor\n const pickFragGroupLayout = this._pickLineBindGroupLayout = device.createBindGroupLayout({\n label: labelPrefix + 'line-colorpick-bind-group-layout',\n entries: [\n {\n visibility: GPUShaderStage.FRAGMENT,\n binding: 0,\n buffer: { type: 'uniform' }\n }\n ]\n });\n const pickDescriptor = {\n label: labelPrefix + 'line-colorpick-pipeline',\n vertex,\n fragment: {\n module: device.createShaderModule({\n code: getColorPickingFragmentWgsl(raycastLayoutIndex)\n }), targets: [\n { format: 'r32uint' }\n ]\n },\n layout: device.createPipelineLayout({\n label: labelPrefix + 'line-colorpick-pipeline-layout',\n bindGroupLayouts: vertexBindGroupLayouts.concat(pickFragGroupLayout)\n }),\n primitive: Utils.extend({}, options.primitive, { topology }),\n depthStencil: {\n depthWriteEnabled: true,\n depthCompare: 'less',\n format: 'depth24plus',\n },\n };\n this._pickLinePipeline = device.createRenderPipeline(pickDescriptor);\n // #endregion\n // world transform\n const bindLineWorldTransform = (pass, meshBuffer, raycasting) => {\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing world transform buffer was provided.`);\n }\n const worldTransform = meshBuffer.buffer(ctx, 'objectWorldTransform'), worldTransformBuffer = worldTransform.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, worldTransform);\n const { group } = wgsl.bindings(WGSLBindingType.Mesh, 'objectWorldTransform', 0);\n const bindGroup = this._ensureLineWorldTransformBindGroup(meshBuffer.item, worldTransformBuffer, \n /*worldTransform.fresh*/ false /* persist the same bindGroup, given the constant size */, group, raycasting);\n pass.setBindGroup(group, bindGroup);\n };\n this._bindLineWorldTransform = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n bindLineWorldTransform(pass, meshBuffer, false);\n };\n this._bindLineRaycastWorldTransform = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n bindLineWorldTransform(pass, meshBuffer, true);\n };\n // camera matrices\n const bindLineCameraProjection = (pass, cameraBuffer, raycasting) => {\n if (Utils.isNull(cameraBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing view projection buffers was provided.`);\n }\n const viewTransformBuffer = cameraBuffer.buffer(ctx, 'cameraViewTransform'), viewTransformBufferBuffer = viewTransformBuffer.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, viewTransformBuffer);\n const { group } = wgsl.bindings(WGSLBindingType.Camera, 'cameraViewTransform', 0);\n const bindGroup = this._ensureLineCameraProjectionBindGroup(cameraBuffer.item, viewTransformBufferBuffer, \n /*viewTransformBuffer.fresh*/ false, group, raycasting);\n pass.setBindGroup(group, bindGroup);\n };\n this._bindLineCameraProjection = (pass, ...buffers) => {\n const cameraBuffer = buffers.at(0);\n bindLineCameraProjection(pass, cameraBuffer, false);\n };\n this._bindLineRaycastCameraProjection = (pass, ...buffers) => {\n const cameraBuffer = buffers.at(0);\n bindLineCameraProjection(pass, cameraBuffer, true);\n };\n // positions storage\n this._bindLinePositions = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing vertex buffers was provided as index 0.`);\n }\n // storage buffer\n const positionsBuffer = /* should have a storage buffer here */ meshBuffer.buffer(ctx, 'geometryPositions'), positionsBufferBuffer = positionsBuffer.buffer;\n let refresh = positionsBuffer.fresh;\n const buffersInput = [positionsBufferBuffer];\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, positionsBuffer);\n if (fatLines) {\n const lineBuffer = meshBuffer.buffer(ctx, 'line'), lineBufferBuffer = lineBuffer.buffer;\n refresh ||= lineBuffer.fresh;\n buffersInput.push(lineBufferBuffer);\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, lineBuffer);\n }\n const { group: groupIndex } = wgsl.bindings(WGSLBindingType.Mesh, 'line' /* or 'geometryPositions' */, 0);\n const bindGroup = this._ensureLinePositionsBindGroup(meshBuffer.item, buffersInput, refresh, groupIndex);\n pass.setBindGroup(groupIndex, bindGroup);\n };\n // vertexColors\n this._bindLineMaterial = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing vertex colors was provided.`);\n }\n const vertexColorsBuffer = meshBuffer.buffer(ctx, 'material'), vertexColorsBufferBuffer = vertexColorsBuffer.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, vertexColorsBuffer);\n const bindGroup = this._ensureLineMaterialBindGroup(meshBuffer.item, vertexColorsBufferBuffer, vertexColorsBuffer.fresh, materialGroupIndex);\n pass.setBindGroup(materialGroupIndex, bindGroup);\n };\n // picker\n this._bindLinePicker = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing world transform buffer was provided.`);\n }\n const u32id = meshBuffer.buffer(ctx, 'u32id'), u32idBuffer = u32id.buffer, u32idArray = u32id.value;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, u32id);\n const bindGroup = this._ensureLineU32idBindGroup(meshBuffer.item, u32idBuffer, /* reuse */ false /*u32id.fresh*/);\n pass.setBindGroup(raycastLayoutIndex, bindGroup);\n };\n this._drawLine = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n const mesh = meshBuffer.item, geometry = mesh.geometry /* as NodeGeometry*/;\n if (fatLines) {\n pass.draw(6, geometry.positions.length - 1, 0, 0);\n }\n else {\n pass.draw(geometry.positions.length);\n }\n };\n }\n}\n// #endregion\n","import { Utils } from '@pacem/pacem-core';\nimport { LABEL_PREFIX, GPUTextureUsage, GPUBufferUsage, GPUMapMode } from './constants';\nimport { RenderPipelines } from './pipelinefactory';\n//namespace Pacem.Drawing3D.WebGPU {\n/**\n * Factory/registry for {@link Raycaster}s: builds (or returns the memoized) color-picking {@link Raycaster} for a\n * given {@link Context}, used by the {@link Renderer}'s `raycast` implementation (`renderer.ts`) to hit-test pointer\n * clicks/hovers against rendered items. Raycasters are memoized per {@link Context} so their off-screen render\n * target/readback buffer are reused across calls instead of being reallocated every raycast.\n */\nexport class Raycasters {\n // learn from:\n // https://webglfundamentals.org/webgl/lessons/webgl-qna-how-to-get-the-3d-coordinates-of-a-mouse-click.html\n // https://github.com/mrdoob/three.js/blob/master/src/core/Raycaster.js\n // https://shi-yan.github.io/webgpuunleashed/Control/object_picking.html\n // https://gist.github.com/greggman/57c3c0d3cf1db14f1baad2d9b0094397 (color picking)\n static { this._memoizer = new WeakMap(); }\n /** Destroys and clears all {@link Raycaster}s memoized for `ctx` (e.g. on device loss/adapter teardown). */\n static dispose(ctx) {\n const memoizer = this._memoizer;\n if (memoizer.has(ctx)) {\n const cache = memoizer.get(ctx);\n for (let raycaster of cache.values()) {\n raycaster.destroy();\n }\n cache.clear();\n memoizer.delete(ctx);\n }\n }\n /** Creates a raycaster that uses color picking as a strategy to hit-test objects. */\n static createColorPicking(ctx) {\n const memoizer = this._memoizer;\n if (!memoizer.has(ctx)) {\n memoizer.set(ctx, new Map());\n }\n const cache = memoizer.get(ctx);\n const key = 'colorpick';\n if (cache.has(key)) {\n return cache.get(key);\n }\n const retval = new ColorPickingRaycaster(ctx);\n cache.set(key, retval);\n return retval;\n }\n}\nconst NUM_PIXELS = 1;\nclass ColorPickingRaycaster {\n constructor(_context) {\n this._context = _context;\n this._objects = new Map();\n this.frame = (interaction, ...buffers) => {\n if (Utils.isNull(this._encoder)) {\n throw new Error('Null encoder. Maybe you missed to call the \\'begin\\' method first.');\n }\n const objects = Array.from(buffers);\n const pipeline = RenderPipelines.createColorPicking(this._context, objects);\n pipeline?.frame(this._pass, interaction, ...buffers);\n for (let buffer of objects) {\n const item = buffer.item;\n if (item.inert) {\n continue;\n }\n //buffer.lock();\n this._objects.set(buffer.id, buffer);\n }\n };\n this.end = (pixel) => {\n if (!Utils.isNull(this._handle)) {\n return this._handle;\n }\n const pass = this._pass;\n const commandEncoder = this._encoder;\n const { device } = this._context;\n const { render } = this._textures;\n const pickTexture = render.texture;\n const pickBuffer = this._ensureBuffer();\n pass.end();\n commandEncoder.copyTextureToBuffer({\n texture: pickTexture,\n // mipLevel: 0,\n origin: {\n x: pixel.x,\n y: pixel.y,\n }\n }, {\n buffer: pickBuffer,\n bytesPerRow: ((NUM_PIXELS * 4 + 255) | 0) * 256,\n rowsPerImage: 1,\n }, {\n width: NUM_PIXELS,\n // height: 1,\n // depth: 1,\n });\n device.queue.submit([commandEncoder.finish()]);\n // remove\n this._encoder = null;\n const _this = this;\n const objects = _this._objects;\n const resetHandle = () => {\n _this._handle = null;\n };\n return this._handle = new Promise((resolve, _) => {\n pickBuffer.mapAsync(GPUMapMode.READ, 0, 4 * NUM_PIXELS).then(_ => {\n const ids = new Uint32Array(pickBuffer.getMappedRange(0, 4 * NUM_PIXELS));\n const id = ids[0];\n pickBuffer.unmap();\n // remove promise reference\n resetHandle();\n const buffer = objects.get(id);\n if (!buffer) {\n resolve([]);\n }\n else {\n resolve([buffer.item]);\n }\n // cleanup\n //pickBuffer.destroy();\n //pickTexture.destroy();\n //objects.values().forEach(b => b.unlock());\n });\n });\n };\n }\n _createTexture(format) {\n const { device, canvas } = this._context;\n const width = Math.min(device.limits.maxTextureDimension2D, canvas.clientWidth), height = Math.min(device.limits.maxTextureDimension2D, canvas.clientHeight);\n return device.createTexture({\n size: [width, height, 1],\n format,\n usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT\n });\n }\n _ensureBuffer() {\n const buffer = this._buffer;\n if (!Utils.isNull(buffer)) {\n return buffer;\n }\n const { device } = this._context;\n return this._buffer = device.createBuffer({\n label: LABEL_PREFIX + 'colorpick-output-buffer',\n size: NUM_PIXELS * 4,\n usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n });\n }\n _ensureTextures() {\n const textures = this._textures;\n if (!Utils.isNull(textures)) {\n return textures;\n }\n const renderTex = this._createTexture('r32uint'), depthTex = this._createTexture('depth24plus');\n const render = { texture: renderTex, view: renderTex.createView() };\n const depth = { texture: depthTex, view: depthTex.createView() };\n return this._textures = { render, depth };\n }\n ;\n _destroyTexture(texture) {\n if (Utils.isNull(texture)) {\n return;\n }\n texture.texture?.destroy();\n }\n destroy() {\n const textures = this._textures, buffer = this._buffer;\n if (!Utils.isNullOrEmpty(textures)) {\n const { render, depth } = textures;\n this._destroyTexture(render);\n this._destroyTexture(depth);\n this._textures = null;\n }\n if (!Utils.isNull(buffer)) {\n buffer.destroy();\n this._buffer = null;\n }\n }\n begin() {\n const { device } = this._context;\n this._encoder = device.createCommandEncoder({ label: LABEL_PREFIX + 'colorpick-raycaster' });\n const { render, depth } = this._ensureTextures();\n const passDescriptor = {\n label: LABEL_PREFIX + 'colorpick-raycaster-pass',\n colorAttachments: [\n {\n view: render.view,\n clearValue: { r: 0, g: 0, b: 0, a: 0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n depthStencilAttachment: {\n view: depth.view, // Assigned later\n depthClearValue: 1,\n depthLoadOp: 'clear',\n depthStoreOp: 'store',\n },\n };\n this._pass = this._encoder.beginRenderPass(passDescriptor);\n this._objects.clear();\n }\n}\n","import { Utils, P, Logging } from '@pacem/pacem-core';\nimport { Colors } from '@pacem/pacem-foundation';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { StalePropertyFlag, isMesh, isCamera, isLight, isGroup } from '../../types';\nimport { AdapterUtils } from '../shared';\nimport { LABEL_PREFIX, GPUTextureUsage } from './constants';\nimport { RenderPipelines } from './pipelinefactory';\nimport { Raycasters } from './raycaster';\nimport { RenderableBuffers, RenderLooper, ManagedBuffers } from './renderablebuffer';\n//namespace Pacem.Drawing3D.WebGPU {\nconst Vector3D = Geometry.LinearAlgebra.Vector3D;\n/** Reason a WebGPU {@link Renderer} failed to initialize, as reported via a rejected {@link Renderers.create} promise (see {@link WebGPUIssue}). */\nexport var WebGPUIssueCause;\n(function (WebGPUIssueCause) {\n /** `navigator.gpu` is unavailable — the browser/OS doesn't support WebGPU at all. */\n WebGPUIssueCause[WebGPUIssueCause[\"NotSupported\"] = 0] = \"NotSupported\";\n /** WebGPU is supported, but no {@link GPUAdapter}/{@link GPUDevice} could be obtained (e.g. disabled via flags, denied, or hardware unsupported). */\n WebGPUIssueCause[WebGPUIssueCause[\"Disabled\"] = 1] = \"Disabled\";\n})(WebGPUIssueCause || (WebGPUIssueCause = {}));\n/**\n * Factory for the WebGPU {@link Renderer} consumed by {@link Pacem3DWebgpuAdapterElement}. Requests a\n * {@link GPUAdapter}/{@link GPUDevice}, configures the stage canvas's {@link GPUCanvasContext}, and wraps everything\n * in a {@link Renderer} implementation that owns: the per-frame render/raycast loop (via {@link RenderLooper}), the\n * mesh/geometry/material buffer caches ({@link RenderableBuffers}/{@link ManagedBuffers}), the multisample/depth\n * render targets, and pointer hit-testing ({@link Raycasters}).\n */\nexport class Renderers {\n /**\n * Creates and asynchronously initializes a WebGPU {@link Renderer} for `stage`'s canvas.\n * @param stage The owning `<pacem-3d>` element whose wrapper hosts the render canvas.\n * @param config Whether to enable per-frame WebGPU validation error scopes (a perf hog — debug builds only) and optional WGSL shader modifiers.\n * @returns A promise resolving to the ready {@link Renderer}, or rejecting with a {@link WebGPUIssue} if WebGPU isn't supported or no adapter/device could be obtained.\n */\n static create(stage, config) {\n return new Promise((resolve, reject) => {\n if (!navigator.gpu) {\n const message = \"WebGPU not supported.\";\n const issue = { message, cause: WebGPUIssueCause.NotSupported };\n reject(issue);\n }\n else {\n const retval = new RendererClass(stage);\n retval.init(config).then(_ => resolve(retval), error => {\n const message = typeof error === 'string' ? error : error.message;\n const issue = { message, cause: WebGPUIssueCause.Disabled };\n reject(issue);\n });\n }\n });\n }\n}\nfunction getDefaultCamera(stage) {\n return {\n bottom: -1, top: 1, left: -1, right: 1, near: .1, far: 200, lookAt: Vector3D.from(0, 0, 0), up: Vector3D.j(), position: Vector3D.from(0, 0, 1), type: \"orthographic\",\n flags: [], stage\n };\n}\nfunction destroyTextures(...textures) {\n for (let tex of textures || []) {\n tex?.destroy();\n }\n}\nclass RendererClass {\n #stage;\n #canvas;\n #context;\n #renderables;\n #geometries;\n #materials;\n #looper;\n #textures;\n #config;\n #disabled;\n // interaction buffer\n #interactionBuffer;\n // interaction buffer underlying data\n #interaction;\n constructor(stage) {\n this.#renderables = new WeakMap();\n this.#geometries = new WeakMap();\n this.#materials = new WeakMap();\n this.#config = { enableValidation: false };\n this.#disabled = false;\n this._logError = (evt) => {\n const stage = this.#stage, logger = stage.logger;\n if (!Utils.isNull(logger)) {\n const error = 'error' in evt ? evt.error : evt;\n logger.log(Logging.LogLevel.Error, error.message, 'WebGPU');\n }\n };\n this.#rebuildingContext = true;\n /** Whether the renderer is affected by vertex or fragment modifiers.\n * When true, the renderer must provide updated time, cursor position and canvas size to the pipeline's bind groups.\n */\n this.#hasModifiers = false;\n const wrapper = (this.#stage = stage).stage;\n const canvas = document.createElement('canvas');\n canvas.id = P + '_3d_stage_' + Utils.uniqueCode();\n // cleanup\n wrapper.innerHTML = '';\n wrapper.appendChild(this.#canvas = canvas);\n // interaction stuff\n this.#interactionBuffer = ManagedBuffers.create(this.#interaction = {\n time: performance.now(), cursor: { x: 0, y: 0 }, resolution: { width: 0, height: 0 }\n });\n }\n _buildPassDescriptor({ multisample, format }) {\n const { context, device } = this.#context;\n const canvasTexture = context.getCurrentTexture();\n let textures = this.#textures;\n if (Utils.isNull(textures)) {\n textures = {};\n if (multisample) {\n const renderTex = device.createTexture({\n label: LABEL_PREFIX + 'render-texture',\n format: format ?? canvasTexture.format,\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n size: [canvasTexture.width, canvasTexture.height],\n sampleCount: 4,\n });\n textures.render = {\n texture: renderTex, view: renderTex.createView({ label: LABEL_PREFIX + 'render-texture-view' })\n };\n const depthTex = device.createTexture({\n label: LABEL_PREFIX + 'depth-texture',\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n size: [canvasTexture.width, canvasTexture.height],\n sampleCount: 4,\n });\n textures.depth = {\n texture: depthTex, view: depthTex.createView({ label: LABEL_PREFIX + 'depth-texture-view' })\n };\n }\n this.#textures = textures;\n }\n const { transparent, background } = this.#stage;\n const backColor = transparent ? { r: 0, g: 0, b: 0, a: 0 } : background ? (typeof background === 'string' ? Colors.parse(background) : background) : { r: 0, g: 0, b: 0, a: 1 };\n const bgColor = AdapterUtils.flattenVectorArray([backColor]);\n const canvasTexView = canvasTexture.createView({ label: LABEL_PREFIX + 'canvas-texture-view' });\n const colorAttachment = {\n view: canvasTexView,\n clearValue: bgColor,\n loadOp: 'clear',\n storeOp: 'store',\n };\n const passDescriptor = {\n colorAttachments: [colorAttachment]\n };\n if (multisample) {\n const renderTexView = textures.render.view;\n const depthTexView = textures.depth.view;\n passDescriptor.depthStencilAttachment = {\n view: depthTexView,\n depthClearValue: 1,\n depthLoadOp: 'clear',\n depthStoreOp: 'store',\n stencilClearValue: 0,\n stencilReadOnly: true,\n };\n // override\n colorAttachment.view = renderTexView;\n colorAttachment.resolveTarget = canvasTexView;\n }\n return passDescriptor;\n }\n ;\n _buildContext(canvas = this.#canvas, size = this.#stage.size) {\n size ??= canvas;\n let w = size.width;\n let h = size.height;\n const devicePixelRatio = 1; // window.devicePixelRatio;\n canvas.width = w * devicePixelRatio;\n canvas.height = h * devicePixelRatio;\n const context = canvas.getContext('webgpu');\n const textureFormat = navigator.gpu.getPreferredCanvasFormat();\n return { context, textureFormat };\n }\n _buildUpContext(device, adapter, context, format) {\n const { transparent } = this.#stage;\n context.configure({\n alphaMode: transparent ? 'premultiplied' : 'opaque',\n device,\n format,\n });\n this.#context = { device, adapter, canvas: this.#canvas, context, format };\n this.#rebuildingContext = false;\n }\n async init(config) {\n this.#config = config;\n const adapter = await navigator.gpu.requestAdapter();\n if (Utils.isNull(adapter)) {\n throw new Error('WebGPU adapter unavalable or disabled.');\n }\n const device = await adapter.requestDevice();\n if (Utils.isNull(adapter)) {\n throw new Error('WebGPU device unavalable or disabled.');\n }\n device.addEventListener('uncapturederror', this._logError);\n // set flag for shader modifiers presence, this will be used to determine whether to update the interaction buffer on each render call\n this.#hasModifiers = !Utils.isNull(config.modifiers?.version) && !Utils.isNull(config.modifiers)\n && (!Utils.isNull(config.modifiers.vertexInput) || !Utils.isNull(config.modifiers.vertexOutput) || !Utils.isNull(config.modifiers.fragment));\n const { context, textureFormat: format } = this._buildContext();\n this._buildUpContext(device, adapter, context, format);\n }\n #rebuildingContext;\n /** Whether the renderer is affected by vertex or fragment modifiers.\n * When true, the renderer must provide updated time, cursor position and canvas size to the pipeline's bind groups.\n */\n #hasModifiers;\n /**\n * Render procedure.\n */\n render(interaction) {\n if (this.#rebuildingContext || Utils.isNull(this.#looper) || !(this.#canvas.width > 0) || !(this.#canvas.height > 0)) {\n return;\n }\n const context = this.#context, device = context.device, \n // looper\n looper = this.#looper;\n // enable validation scope? (perf hog)\n const validationScope = this.#config?.enableValidation ?? false;\n if (this.#hasModifiers) {\n // update underlying interaction data, this will trigger buffer update\n Utils.extend(this.#interaction, interaction);\n }\n const multisample = true;\n const passDescriptor = this._buildPassDescriptor({ multisample });\n // rendering zone\n const commandEncoder = device.createCommandEncoder({ label: LABEL_PREFIX + 'renderer' });\n const pass = commandEncoder.beginRenderPass(passDescriptor);\n // loop\n looper.loop((mesh, camera, lights) => {\n if (mesh.item.hide) {\n // this code branching is NOT NEEDED ANYMORE,\n // remove it safely\n return false;\n }\n if (validationScope) {\n device.pushErrorScope('validation');\n }\n const renderables = [mesh, camera, ...lights];\n // inject here (pipeline options) any global rendering data (time, cursor, etc.) that may be needed by the shader modifiers\n const pipeline = RenderPipelines.create(context, renderables, { multisample: true, modifiers: this.#config.modifiers });\n // render\n pipeline.frame(pass, this.#interactionBuffer, ...renderables);\n if (validationScope) {\n device.popErrorScope().then(error => {\n if (error) {\n this._logError(error);\n }\n });\n }\n return true;\n });\n pass.end();\n device.queue.submit([commandEncoder.finish()]);\n }\n set disabled(v) {\n this.#disabled = v;\n }\n get disabled() {\n return this.#disabled;\n }\n raycast(pixel) {\n if (this.#rebuildingContext || Utils.isNull(this.#looper)) {\n return Promise.resolve([]);\n }\n const context = this.#context, device = context.device, looper = this.#looper;\n // enable validation scope? (perf hog)\n const validationScope = this.#config?.enableValidation ?? false;\n // rendering zone\n const raycaster = Raycasters.createColorPicking(context);\n raycaster.begin();\n // loop\n looper.loop((mesh, camera) => {\n if (mesh.item.hide) {\n // TODO: remove unwraps and move to nested loops\n // in order to centralize hidden renderable skip logic\n return false;\n }\n if (validationScope) {\n device.pushErrorScope('validation');\n }\n raycaster.frame(this.#interactionBuffer, mesh, camera);\n if (validationScope) {\n device.popErrorScope().then(error => {\n if (error) {\n this._logError(error);\n }\n });\n }\n return true;\n });\n return raycaster.end(pixel);\n }\n _disposeRenderableJustInCase(item) {\n const store = this.#renderables;\n if (store.has(item)) {\n store.get(item)?.destroy();\n store.delete(item);\n }\n }\n _createOrYieldRenderable(item, geometries = this.#geometries, materials = this.#materials) {\n item.stage ??= this.#stage;\n const store = this.#renderables;\n let found = store.get(item);\n if (Utils.isNull(found)) {\n store.set(item, found = RenderableBuffers.create(item, geometries));\n }\n return found;\n }\n _createOrYieldGeometry(item) {\n const store = this.#geometries;\n let found = store.get(item);\n if (Utils.isNull(found)) {\n store.set(item, found = ManagedBuffers.create(item));\n }\n return found;\n }\n _createOrYieldMaterial(item) {\n const store = this.#materials;\n let found = store.get(item);\n if (Utils.isNull(found)) {\n store.set(item, found = ManagedBuffers.create(item));\n }\n return found;\n }\n _unwrapBuffers(grp, accumulator) {\n accumulator ??= { meshes: [], lights: [], cameras: [], groups: [] };\n for (let itemBuffer of grp.children) {\n itemBuffer.item.stage ??= this.#stage;\n if (isMesh(itemBuffer.item)) {\n accumulator.meshes.push(itemBuffer);\n }\n if (isCamera(itemBuffer.item)) {\n accumulator.cameras.push(itemBuffer);\n }\n if (isLight(itemBuffer.item)) {\n accumulator.lights.push(itemBuffer);\n }\n if (isGroup(itemBuffer.item)) {\n accumulator.groups.push(itemBuffer);\n this._unwrapBuffers(itemBuffer, accumulator);\n }\n }\n return accumulator;\n }\n ;\n _update(array) {\n const groupBuffers = [];\n const meshBuffers = [];\n const lightBuffers = [];\n const factory = i => this._createOrYieldRenderable(i);\n let camera;\n for (let item of array) {\n if (item.hide) {\n // remove stored renderable just in case\n this._disposeRenderableJustInCase(item);\n continue;\n }\n // ensure stage\n item.stage ??= this.#stage;\n // groups\n if (isGroup(item)) {\n const g = item;\n if (g.flags.includes(StalePropertyFlag.Children)) {\n this.#renderables.delete(g);\n }\n groupBuffers.push(factory(g));\n }\n // meshes\n if (isMesh(item) && item.geometry) {\n // build pipelines based on provided element wrappers (cached buffers)\n this._createOrYieldGeometry(item.geometry);\n if (!Utils.isNull(item.material)) {\n this._createOrYieldMaterial(item.material);\n }\n meshBuffers.push(factory(item));\n }\n // lights\n if (isLight(item)) {\n lightBuffers.push(factory(item));\n }\n if (isCamera(item)) {\n // pick the first only\n camera ??= item;\n }\n }\n // find first active camera\n camera ??= getDefaultCamera(this.#stage);\n const cameraBuffer = factory(camera);\n let accumulator = {\n meshes: meshBuffers, lights: lightBuffers, cameras: [cameraBuffer], groups: groupBuffers\n };\n for (let groupBuffer of groupBuffers) {\n accumulator = this._unwrapBuffers(groupBuffer, accumulator);\n }\n // destroy leftovers\n this.#looper?.items.meshes.forEach(buffer => {\n if (!meshBuffers.includes(buffer)) {\n buffer.destroy();\n }\n });\n this.#looper = new RenderLooper(accumulator);\n }\n update(...items) {\n this._update(Array.from(items));\n }\n dispose() {\n this.#looper = null;\n if (this._disposeContext()) {\n const { device } = this.#context;\n device.removeEventListener('uncapturederror', this._logError);\n device.destroy;\n }\n }\n _disposeContext() {\n const ctx = this.#context;\n if (Utils.isNull(ctx)) {\n return false;\n }\n // dispose associated raycasters, if any\n Raycasters.dispose(ctx);\n // dispose associated pipelines, if any\n RenderPipelines.dispose(ctx);\n // dispose textures\n const textures = this.#textures;\n this.#textures = null;\n if (!Utils.isNull(textures)) {\n const { render, depth } = textures;\n destroyTextures(render?.texture, depth?.texture);\n }\n // dispose context\n ctx.context.unconfigure();\n return true;\n }\n resize(size) {\n this.#rebuildingContext = true;\n if (this._disposeContext()) {\n const { device, adapter } = this.#context;\n const { context, textureFormat: format } = this._buildContext(this.canvas, size);\n this._buildUpContext(device, adapter, context, format);\n // interaction\n if (this.#hasModifiers) {\n Utils.extend(this.#interaction, { resolution: size });\n }\n }\n }\n get canvas() {\n return this.#canvas;\n }\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElementUtils, CustomElement, P, Watch, PropertyConverters, PropertyChangeEvent, PropertyChangeEventName, Debounce, Utils, Logging, Components } from '@pacem/pacem-core';\nimport { Strings } from '@pacem/pacem-foundation';\nimport { Pacem3DAdapterElement, StalePropertyFlag } from '../../types';\nimport { Renderers, WebGPUIssueCause } from './renderer';\n//namespace Pacem.Components.Drawing3D {\nconst WEBGPU_RAYCAST_CALLBACK_PROP = 'WebGPURaycastCallback';\nconst WEBGPU_RAYCAST_PIXEL_PROP = 'WebGPURaycastPixel';\nconst GETVAL = CustomElementUtils.getAttachedPropertyValue, SETVAL = CustomElementUtils.setAttachedPropertyValue, DELVAL = CustomElementUtils.deleteAttachedPropertyValue;\n/** `<pacem-3d-wgsl-script>`: declares a WGSL snippet (vertex input/output or fragment stage) that a parent {@link Pacem3DWebgpuAdapterElement} splices into its render pipeline shaders, tracked via a content {@link version} hash. */\nlet Pacem3DWgslScriptElement = class Pacem3DWgslScriptElement extends Components.PacemItemElement {\n findContainer() {\n return CustomElementUtils.findAncestor(this, n => n instanceof Pacem3DWebgpuAdapterElement);\n }\n #version = '';\n /** @readonly Gets a hash of the current {@link wgsl} content, changing whenever it does. */\n get version() {\n return this.#version;\n }\n #observer = new MutationObserver(() => {\n this.wgsl = this.textContent;\n });\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.wgsl = this.textContent;\n this.#observer.observe(this, { characterData: true });\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'wgsl') {\n this._computeVersion(val);\n }\n }\n _computeVersion(wgsl = this.wgsl) {\n Strings.hash(wgsl).then(v => {\n if (v !== this.#version) {\n const old = this.#version;\n const val = v;\n this.#version = val;\n const evt = new PropertyChangeEvent({ propertyName: 'version', oldValue: old, currentValue: val, firstChange: Utils.isNullOrEmpty(old) });\n this.dispatchEvent(evt);\n }\n });\n }\n disconnectedCallback() {\n this.#observer.disconnect();\n super.disconnectedCallback();\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DWgslScriptElement.prototype, \"type\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DWgslScriptElement.prototype, \"wgsl\", void 0);\nPacem3DWgslScriptElement = __decorate([\n CustomElement({ tagName: P + '-3d-wgsl-script' })\n], Pacem3DWgslScriptElement);\nexport { Pacem3DWgslScriptElement };\n/**\n * `<pacem-3d-webgpu-adapter>`: {@link Pacem3DAdapterElement} rendering backend built directly on the browser's\n * WebGPU API. Manages one {@link Renderer} per stage it is assigned to, hosts child {@link Pacem3DWgslScriptElement}\n * shader customizations (via {@link modifiers}), and falls back gracefully (see {@link supported}/{@link active})\n * when WebGPU isn't available.\n */\nlet Pacem3DWebgpuAdapterElement = class Pacem3DWebgpuAdapterElement extends Pacem3DAdapterElement {\n constructor() {\n super(...arguments);\n this.#items = [];\n this._scriptVersionChangeHandler = (evt) => {\n const { propertyName: name } = evt.detail;\n if (name === 'version') {\n this._parseWgslModifiers(evt.detail.currentValue);\n }\n };\n this.#scenes = new Set();\n this.#renderers = new Map();\n this.#supported = true;\n this.#active = true;\n this.#sceneToUpdate = new WeakMap();\n }\n invalidateSize(stage, size = stage.size) {\n const renderer = this._ensureRenderer(stage);\n renderer?.resize(size);\n }\n #items;\n /** @readonly Gets the child {@link Pacem3DWgslScriptElement} shader-customization items currently registered. */\n get items() {\n return this.#items;\n }\n /** Registers a child {@link Pacem3DWgslScriptElement}, re-parsing the WGSL {@link modifiers} it contributes. */\n register(item) {\n const items = this.#items;\n if (item instanceof Pacem3DWgslScriptElement && !items.includes(item)) {\n item.addEventListener(PropertyChangeEventName, this._scriptVersionChangeHandler, false);\n items.push(item);\n this._parseWgslModifiers(this.modifiers?.version);\n return true;\n }\n return false;\n }\n /** Unregisters a previously-registered {@link Pacem3DWgslScriptElement}, re-parsing the WGSL {@link modifiers} accordingly. */\n unregister(item) {\n const items = this.#items;\n const ndx = items.indexOf(item);\n if (ndx >= 0) {\n item.removeEventListener(PropertyChangeEventName, this._scriptVersionChangeHandler, false);\n items.splice(ndx, 1);\n this._parseWgslModifiers(this.modifiers?.version);\n return true;\n }\n return false;\n }\n #scenes;\n #renderers;\n #supported;\n #active;\n /** @readonly Gets whether WebGPU is supported by the current browser/device. */\n get supported() {\n return this.#supported;\n }\n /** @readonly Gets whether the adapter is currently able to render (false once a {@link WebGPUIssue} disables it). */\n get active() {\n return this.#active;\n }\n _webGPUNotSupported(issue) {\n if (this.#supported && issue.cause === WebGPUIssueCause.NotSupported) {\n this.#supported = false;\n this.dispatchEvent(new PropertyChangeEvent({ propertyName: 'supported', oldValue: null, currentValue: false }));\n }\n if (this.#active) {\n this.#active = false;\n this.dispatchEvent(new PropertyChangeEvent({ propertyName: 'active', oldValue: null, currentValue: false }));\n }\n }\n initialize(scene) {\n const set = this.#renderers;\n const scenes = this.#scenes;\n if (!scenes.has(scene)) {\n scenes.add(scene);\n }\n return Renderers.create(scene, { enableValidation: this.enableValidation ?? false, modifiers: this.modifiers })\n .then(renderer => {\n set.get(scene)?.update( /* empty */);\n // update dictionary with the actual renderer\n set.set(scene, renderer);\n // assign datasource immediately\n this._updatePipeline(scene);\n return renderer.canvas;\n }, (issue) => {\n this.log(Logging.LogLevel.Error, issue.message);\n this._webGPUNotSupported(issue);\n return null;\n });\n }\n _parseWgslModifiers(val) {\n const scripts = this.#items, vertexGeometryScript = scripts.find(a => a.type == 'vertex-input'), vertexOutputScript = scripts.find(a => a.type == 'vertex-output'), fragmentScript = scripts.find(a => a.type == 'fragment');\n const vertexInput = vertexGeometryScript?.wgsl, vertexOutput = vertexOutputScript?.wgsl, fragment = fragmentScript?.wgsl;\n this.modifiers = { vertexInput, vertexOutput, fragment, version: val };\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (first) {\n return;\n }\n switch (name) {\n case 'modifiers':\n case 'enableValidation':\n // reinitialize\n this._reinitialize();\n break;\n }\n }\n disconnectedCallback() {\n const set = this.#renderers;\n for (let [_, renderer] of set) {\n renderer?.dispose();\n }\n set.clear();\n this.#scenes.clear();\n super.disconnectedCallback();\n }\n dispose(scene) {\n const renderers = this.#renderers, scenes = this.#scenes;\n ;\n if (renderers.has(scene)) {\n renderers.get(scene)?.dispose();\n renderers.delete(scene);\n }\n if (scenes.has(scene)) {\n scenes.delete(scene);\n }\n }\n _reinitialize() {\n for (let scene of this.#scenes.values()) {\n // rebuild renderer with new config in association to scene\n this.initialize(scene);\n }\n }\n _ensureRenderer(scene) {\n const set = this.#renderers;\n return set.get(scene);\n }\n _updatePipeline(scene) {\n const renderer = this._ensureRenderer(scene);\n renderer?.update(...scene.datasource);\n }\n #sceneToUpdate;\n /**\n * Called when scene datasource changes.\n * @param scene\n */\n render(scene) {\n // do not render hidden stages\n const width = scene.size?.width, height = scene.size?.height;\n if (!(width > 0) || !(height > 0)) {\n return;\n }\n // retrieve stage renderer\n const renderer = this._ensureRenderer(scene);\n if (Utils.isNull(renderer)) {\n return;\n }\n if (this.#sceneToUpdate.has(scene)) {\n this.#sceneToUpdate.delete(scene);\n this._itemsChangedExec(scene);\n }\n // draw\n const pixel = GETVAL(scene, WEBGPU_RAYCAST_PIXEL_PROP);\n renderer.render({ cursor: pixel, time: performance.now(), resolution: { width, height } });\n // raycast, just in case\n if (!scene.interactive) {\n return;\n }\n const callback = GETVAL(scene, WEBGPU_RAYCAST_CALLBACK_PROP);\n if (Utils.isNullOrEmpty(callback)) {\n return;\n }\n if (Utils.isNullOrEmpty(pixel)) {\n callback(null);\n return;\n }\n // draw again\n renderer.raycast(pixel).then(array => {\n if (Utils.isNullOrEmpty(array)) {\n callback(null);\n }\n else {\n const retval = {\n object: array[0], point: null\n };\n callback(retval);\n }\n });\n }\n snapshot(scene, background, type, quality) {\n const renderers = this.#renderers;\n if (!renderers.has(scene)) {\n return Promise.resolve(null);\n }\n const { canvas } = renderers.get(scene);\n const jpeg = !Utils.isNullOrEmpty(background), mime = type ?? (jpeg ? 'image/jpeg' : null), compression = quality ?? (jpeg ? .9 : null);\n return new Promise((resolve, _) => {\n this.render(scene);\n Utils.snapshotElement(canvas, background, mime, compression).then(resolve);\n });\n }\n raycast(stage, point, size, callback) {\n SETVAL(stage, WEBGPU_RAYCAST_CALLBACK_PROP, callback);\n if (point.x < 0 || point.y < 0 || point.x >= size.width || point.y >= size.height) {\n DELVAL(stage, WEBGPU_RAYCAST_PIXEL_PROP);\n }\n else {\n SETVAL(stage, WEBGPU_RAYCAST_PIXEL_PROP, point);\n }\n }\n _itemsChangedExec(stage) {\n this._updatePipeline(stage);\n }\n _itemsChanged(stage, _) {\n this.#sceneToUpdate.set(stage, true);\n }\n addItem(stage, item) {\n this._itemsChanged(stage, item);\n }\n removeItem(stage, item) {\n this._itemsChanged(stage, item);\n }\n updateItem(stage, item) {\n // if 'hide' property has changed or 'children' property (for groups)\n // then there's need to regenerate the tree view (camera switch, more/less meshes, ...)\n if (Utils.isNull(item)\n || item.flags.indexOf(StalePropertyFlag.Visibility) >= 0\n || item.flags.indexOf(StalePropertyFlag.Children) >= 0) {\n this._itemsChanged(stage, item);\n }\n }\n zoomFit(stage, ...items) {\n // TODO: implement on the renderer side\n return Promise.resolve();\n }\n project(stage, point3D) {\n // TODO: implement on the renderer side\n return { x: 0, y: 0 };\n }\n getScene(stage) {\n // no 3rd-party/proprietary scene objects to provide.\n return stage;\n }\n};\n__decorate([\n Debounce(100)\n], Pacem3DWebgpuAdapterElement.prototype, \"_parseWgslModifiers\", null);\n__decorate([\n Watch({ emit: false })\n], Pacem3DWebgpuAdapterElement.prototype, \"modifiers\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], Pacem3DWebgpuAdapterElement.prototype, \"enableValidation\", void 0);\nPacem3DWebgpuAdapterElement = __decorate([\n CustomElement({ tagName: P + '-3d-webgpu-adapter' })\n], Pacem3DWebgpuAdapterElement);\nexport { Pacem3DWebgpuAdapterElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils, CustomEventUtils, avoidHandler, Behaviors, PropertyChangeEventName } from '@pacem/pacem-core';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { isCamera, StalePropertyFlag } from '../../../types';\nimport { TAG_MIDDLE_NAME } from '../../../constants';\nimport { BooleanOrNumberConverter } from '../../../converters';\n//namespace Pacem.Components.Drawing3D {\nconst Vector3D = Geometry.LinearAlgebra.Vector3D;\nconst Matrix3D = Geometry.LinearAlgebra.Matrix3D;\nconst Quaternion = Geometry.LinearAlgebra.Quaternion;\nconst Spherical = Geometry.LinearAlgebra.Spherical;\nfunction findCameraStage(element) {\n if (isCamera(element)) {\n return element.stage;\n }\n return null;\n}\nconst ROTATION_FACTOR = 1, ZOOM_FACTOR = 1, FRICTION_FACTOR = .05, EPSILON = 0.001;\nconst DEFAULT_CONFIGURATION = {\n maxAzimuth: 180, minAzimuth: -180, inertia: false, maxPolar: Infinity, minPolar: -Infinity,\n zoom: { enabled: true }, pan: { enabled: true, button: 2 }, rotation: { enabled: true, button: 0 }\n};\nexport class OrbitCameraBehavior {\n constructor(item, _config) {\n this._config = _config;\n /** State of the current configuration, obtained from the interaction inputs. */\n this._input = {\n /** Zoom/scale */\n rho: 0,\n /** Azimuth (rotation around x axis in webgpu) */\n theta: 0,\n /** Polar (rotation around y axis in webgpu) */\n phi: 0,\n /** pan/offset x*/\n x: 0,\n /** pan/offset y*/\n y: 0,\n };\n /** Sibling state of {@link _input} that comes helpful when inertia is involved. */\n this._progress = {\n rho: 0,\n theta: 0,\n phi: 0,\n x: 0,\n y: 0,\n };\n this._startHandler = (evt) => {\n const { rotation, pan } = this._config;\n const isMouse = evt.pointerType === 'mouse';\n const rotating = rotation.enabled && isMouse && evt.button === rotation.button && CustomEventUtils.matchModifiers(evt, rotation.modifiers);\n const panning = pan.enabled && isMouse && evt.button === pan.button && CustomEventUtils.matchModifiers(evt, pan.modifiers);\n if (!rotating && !panning) {\n return;\n }\n this.#rotating = rotating;\n if (this.#panning = panning) {\n // build current state from the current camera configuration\n this._currentState = OrbitCameraBehavior._buildState(this._camera);\n // reset pan offsets\n Utils.extend(this._input, Vector3D.zero());\n this._progress.x = this._progress.y = 0;\n }\n avoidHandler(evt);\n window.clearTimeout(this.#handle);\n window.addEventListener('pointerup', this._endHandler, false);\n window.addEventListener('pointermove', this._moveHandler, false);\n window.addEventListener('contextmenu', this._avoidHandler, false);\n };\n this._avoidHandler = (evt) => avoidHandler(evt);\n this._endHandler = (evt) => {\n avoidHandler(evt);\n // delay the listener removals a bit (~frame)\n this.#handle = window.setTimeout(() => {\n window.removeEventListener('pointerup', this._endHandler);\n window.removeEventListener('pointermove', this._moveHandler);\n window.removeEventListener('contextmenu', this._avoidHandler);\n }, 20);\n };\n this._zoomHandler = (evt) => {\n const { zoom } = this._config;\n const zooming = zoom.enabled && CustomEventUtils.matchModifiers(evt, zoom.modifiers);\n if (!zooming) {\n return;\n }\n avoidHandler(evt);\n const coords = this._input;\n coords.rho -= Math.sign(evt.deltaY);\n };\n this._moveHandler = (evt) => {\n avoidHandler(evt);\n const { height, width } = this._scene.size;\n const coords = this._input;\n const size = Math.min(height, width);\n if (this.#rotating) {\n // rotation\n const f0 = -ROTATION_FACTOR * 360 / size;\n const { phi, theta } = coords;\n const { maxPolar, minPolar, maxAzimuth, minAzimuth } = this._config;\n coords.phi = (phi + evt.movementX * f0).clamp(minPolar, maxPolar);\n coords.theta = (theta + evt.movementY * f0).clamp(minAzimuth, maxAzimuth);\n }\n else if (this.#panning) {\n // pan\n const f0 = this._currentState.radius / size;\n coords.x += -evt.movementX * f0;\n coords.y += evt.movementY * f0;\n }\n };\n this._renderHandler = (_) => {\n this._update();\n };\n const scene = this._scene = (this._camera = item).stage;\n this._initialState = this._currentState = OrbitCameraBehavior._buildState(item);\n const canvas = this._canvas = scene.stage;\n canvas.addEventListener('pointerdown', this._startHandler, false);\n canvas.addEventListener('wheel', this._zoomHandler, { passive: false });\n scene.addEventListener('render', this._renderHandler, false);\n }\n static _buildState(camera) {\n const vector = Vector3D.subtract(camera.position, camera.lookAt);\n const radius = Vector3D.mag(vector);\n return { target: camera.lookAt, versor: Vector3D.unit(vector), up: camera.up, radius, position: camera.position };\n }\n /**\n * Tries to attach a new {@link OrbitCameraBehavior} to the provided element, if the element is a proper renderable and it is ready.\n * @param element\n * @returns\n */\n static tryAttach(element, config) {\n config ??= DEFAULT_CONFIGURATION;\n const canvas = findCameraStage(element)?.stage;\n if (!Utils.isNull(canvas)) {\n const { position, lookAt } = element;\n if (Utils.isNull(position) || Utils.isNull(lookAt) || Vector3D.areClose(position, lookAt)) {\n return null;\n }\n return new OrbitCameraBehavior(element, config);\n }\n else {\n return null;\n }\n }\n get configuration() {\n return this._config;\n }\n set configuration(v) {\n this._config = v;\n }\n #panning;\n #rotating;\n #handle;\n _getSafeAzimuth({ theta }) {\n return OrbitCameraBehavior._modAngle(theta);\n }\n _getSafePolar({ phi }) {\n return OrbitCameraBehavior._modAngle(phi);\n }\n static _modAngle(deg) {\n while (deg < 0) {\n deg += 360;\n }\n return deg % 360;\n }\n static _getViewXYZ(state) {\n const { versor, up: initUp } = state;\n const right = Vector3D.cross(versor, initUp);\n const up = Vector3D.cross(right, versor);\n Vector3D.normalize(right);\n Vector3D.normalize(up);\n return { right, up, versor };\n }\n #updating;\n _update() {\n if (this.#updating) {\n return;\n }\n this.#updating = true;\n const camera = this._camera;\n const { radius, versor, target: initTarget, up: initUp } = this._initialState;\n const { target: trackedLookAt } = this._currentState;\n const { theta, phi, rho, x, y } = this._input;\n const progress = this._progress;\n const { theta: theta_, phi: phi_, rho: rho_, x: x_, y: y_ } = progress;\n const rotated = Math.abs(phi_ - phi) > EPSILON || Math.abs(theta_ - theta) > EPSILON, zoomed = Math.abs(rho_ - rho) > EPSILON, panned = Math.abs(x - x_) > EPSILON || Math.abs(y - y_) > EPSILON;\n if (zoomed || rotated || panned) {\n const inertia = typeof this._config.inertia === 'boolean' ? (this._config.inertia ? FRICTION_FACTOR : 0) : this._config.inertia;\n const inertiaSpecified = inertia > 0 && inertia < 1;\n const { right, up } = OrbitCameraBehavior._getViewXYZ(this._initialState);\n // setup position\n let newPosition = initTarget;\n let newUp = initUp;\n let newLookAt = trackedLookAt;\n //if (zoomed) { 2\n let rho0 = rho_;\n if (inertiaSpecified) {\n rho0 += (rho - rho_) * inertia;\n }\n else {\n rho0 = rho;\n }\n progress.rho = rho0;\n const scale = Math.pow(.95, rho0 * ZOOM_FACTOR);\n const zoom = Vector3D.scale(versor, -scale * radius);\n newPosition = Vector3D.add(newPosition, zoom);\n //}\n //if (rotated) { 3\n let phi0 = phi_;\n let theta0 = theta_;\n if (inertiaSpecified) {\n phi0 += (phi - phi_) * inertia;\n theta0 += (theta - theta_) * inertia;\n }\n else {\n phi0 = phi;\n theta0 = theta;\n }\n const PHI = this._getSafePolar({ phi: progress.phi = phi0 });\n const THETA = this._getSafeAzimuth({ theta: progress.theta = theta0 });\n // pivot of the rotation matrix should be the center of the bounding sphere\n const pivot = Vector3D.negate(initTarget);\n let m = Matrix3D.translate(Matrix3D.identity(), pivot);\n const qy = Quaternion.fromAxisAngle(up, PHI);\n const qx = Quaternion.fromAxisAngle(right, THETA);\n const rot = Matrix3D.multiply(Quaternion.toRotationMatrix(qx), Quaternion.toRotationMatrix(qy));\n m = Matrix3D.multiply(m, rot);\n m = Matrix3D.translate(m, Vector3D.negate(pivot));\n newPosition = Matrix3D.transform(newPosition, m);\n newUp = Matrix3D.transform(newUp, Matrix3D.clone(m, m0 => { m0.offsetX = m0.offsetY = m0.offsetZ = 0; }));\n //}\n //if (panned){ 1\n const x1 = x_, y1 = y_;\n let x0 = x1, y0 = y1;\n if (inertiaSpecified) {\n x0 += (x - x1) * inertia;\n y0 += (y - y1) * inertia;\n }\n else {\n x0 = x;\n y0 = y;\n }\n progress.x = x0;\n progress.y = y0;\n const { right: currentRight, up: currentUp } = OrbitCameraBehavior._getViewXYZ(this._currentState);\n const r = Vector3D.scale(currentRight, x0), u = Vector3D.scale(currentUp, y0);\n const offset = Vector3D.add(r, u);\n newLookAt = Vector3D.add(trackedLookAt, offset);\n camera.lookAt = newLookAt;\n camera.position = newPosition; // Vector3D.add(newPosition, Vector3D.subtract(initTarget, newLookAt));\n camera.up = newUp;\n // notify something has changed about the target renderable\n camera.flags.push(StalePropertyFlag.Camera);\n }\n this.#updating = false;\n }\n /** Detaches and removes handlers and resources. */\n dispose() {\n const canvas = this._canvas, scene = this._scene;\n if (!Utils.isNull(canvas)) {\n canvas.removeEventListener('pointerdown', this._startHandler);\n canvas.removeEventListener('wheel', this._zoomHandler);\n }\n scene.removeEventListener('render', this._renderHandler, false);\n }\n}\n/**\n * `<pacem-3d-orbit-camera>`: a behavior element that, applied to a {@link Pacem3DCameraElement}, attaches pointer/wheel\n * driven orbit (rotate/pan/zoom around a target) interaction by instantiating and configuring an\n * {@link OrbitCameraBehavior} for each decorated element.\n */\nlet PacemOrbitCameraBehaviorElement = class PacemOrbitCameraBehaviorElement extends Behaviors.PacemBehavior {\n constructor() {\n super(...arguments);\n this.#map = new Map();\n this._readyHandler = (evt) => {\n if (evt.detail.propertyName === 'isReady' && evt.detail.currentValue === true) {\n const element = evt.currentTarget;\n element.removeEventListener(PropertyChangeEventName, this._readyHandler);\n this._decorateCore(element);\n }\n };\n }\n #map;\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'maxAzimuth':\n case 'minAzimuth':\n case 'inertia':\n case 'zoomControl':\n case 'panControl':\n case 'rotationControl':\n const config = this._buildConfig();\n const items = this.#map;\n for (let tr of items.values()) {\n tr.configuration = config;\n }\n break;\n }\n }\n disconnectedCallback() {\n const items = this.#map;\n for (let tr of items.values()) {\n tr.dispose();\n }\n items.clear();\n super.disconnectedCallback();\n }\n _buildConfig() {\n return Utils.extend({}, DEFAULT_CONFIGURATION, {\n maxAzimuth: this.maxAzimuth ?? Infinity,\n minAzimuth: this.minAzimuth ?? -Infinity,\n minPolar: this.minPolar ?? -Infinity,\n maxPolar: this.maxPolar ?? Infinity,\n inertia: this.inertia ?? false,\n zoom: this.zoomControl ?? DEFAULT_CONFIGURATION.zoom,\n pan: this.panControl ?? DEFAULT_CONFIGURATION.pan,\n rotation: this.rotationControl ?? DEFAULT_CONFIGURATION.rotation,\n });\n }\n _decorateCore(element) {\n const behavior = OrbitCameraBehavior.tryAttach(element, this._buildConfig());\n if (!Utils.isNull(behavior)) {\n this.#map.set(element, behavior);\n }\n }\n decorate(element) {\n if (element.isConnected) {\n this._decorateCore(element);\n }\n else {\n element.addEventListener(PropertyChangeEventName, this._readyHandler, false);\n }\n }\n undecorate(element) {\n const map = this.#map;\n if (map.has(element)) {\n map.get(element).dispose();\n map.delete(element);\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"maxAzimuth\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"maxPolar\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"minAzimuth\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"minPolar\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"zoomControl\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"rotationControl\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"panControl\", void 0);\n__decorate([\n Watch({ emit: false, converter: BooleanOrNumberConverter })\n], PacemOrbitCameraBehaviorElement.prototype, \"inertia\", void 0);\nPacemOrbitCameraBehaviorElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-orbit-camera' })\n], PacemOrbitCameraBehaviorElement);\nexport { PacemOrbitCameraBehaviorElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Transformer } from '@pacem/pacem-core';\nimport { Point } from '@pacem/pacem-foundation';\nimport { MeshGeometry } from '../geometry';\nimport { Point3DConverter } from '../converters';\n//namespace Pacem.Drawing3D {\n/** Parses the text content of a Wavefront `.obj` file into a {@link MeshGeometry} (vertices, triangle indices, UVs and normals). */\nclass OBJParser {\n /**\n * Parses `v` (vertex), `vt` (texture coordinate), `vn` (normal) and `f` (face) records out of `content`,\n * triangulating any face with more than 3 vertices (fan triangulation).\n */\n static parse(content) {\n // vertices\n const vertices = [];\n const vParser = /^v((\\s+-?[\\d\\.]+){3})/gm;\n let arr = vParser.exec(content);\n while (arr && arr.length) {\n vertices.push(Point3DConverter.convert(arr[1]));\n arr = vParser.exec(content);\n }\n // uvmap\n const vt = [];\n const tParser = /^vt((\\s+-?[\\d\\.]+){2})/gm;\n arr = tParser.exec(content);\n while (arr && arr.length) {\n vt.push(Point.parse(arr[1]));\n arr = tParser.exec(content);\n }\n // normals\n const vn = [];\n const nParser = /^vn((\\s+-?[\\d\\.]+){3})/gm;\n arr = nParser.exec(content);\n while (arr && arr.length) {\n vn.push(Point3DConverter.convert(arr[1]));\n arr = nParser.exec(content);\n }\n const normals = [];\n const uv = [];\n const positions = [];\n const fParser = /^f((\\s+([\\d]+\\/[\\d]+\\/[\\d]+)){3,})/gm;\n arr = fParser.exec(content);\n while (arr && arr.length) {\n const fjParser = /([\\d]+)\\/([\\d]+)\\/([\\d]+)/g;\n const face = arr[1];\n let jArr = fjParser.exec(face);\n let jIndex = 0;\n var vIndex0, tIndex0, nIndex0;\n var vIndex, tIndex, nIndex;\n while (jArr && jArr.length) {\n if (jIndex > 2) {\n // 4+ vertex-face\n // but mesh only allows triangluar faces\n // re-add(0)\n positions.push(vIndex0);\n uv.push(vt[tIndex0]);\n normals.push(vn[nIndex0]);\n // re-add(last)\n positions.push(vIndex);\n uv.push(vt[tIndex]);\n normals.push(vn[nIndex]);\n }\n // OBJ indexes are 1-based\n vIndex = parseInt(jArr[1]) - 1;\n tIndex = parseInt(jArr[2]) - 1;\n nIndex = parseInt(jArr[3]) - 1;\n positions.push(vIndex);\n uv.push(vt[tIndex]);\n normals.push(vn[nIndex]);\n if (jIndex === 0) {\n vIndex0 = vIndex;\n tIndex0 = tIndex;\n nIndex0 = nIndex;\n }\n jIndex++;\n jArr = fjParser.exec(face);\n }\n // loop\n arr = fParser.exec(content);\n }\n // faces\n return new MeshGeometry(vertices, positions, uv, normals);\n }\n}\n/** Model-file parsing entry point, registered as the `parse3D` markup transformer for converting raw asset text into a {@link NodeGeometry} or {@link Material}. */\nclass Parser3D {\n /**\n * Parses `content` according to `type` into a {@link NodeGeometry} (currently only the `'obj'` Wavefront format,\n * via {@link OBJParser}) or a {@link Material}. Throws for any other/unsupported `type` (e.g. `'mtl'`, not yet implemented).\n */\n static parseGeometry(content, type) {\n switch (type.toLowerCase()) {\n case 'obj':\n return OBJParser.parse(content);\n default:\n throw new Error(`Type '${type}' is not supported.`);\n }\n }\n}\n__decorate([\n Transformer('parse3D')\n], Parser3D, \"parseGeometry\", null);\n","import { DeepMerger } from '@pacem/pacem-foundation';\nimport * as Output from './index';\nDeepMerger.merge(Output);\n"],"names":["Geometry","parseAsNumericalArray","Utils","__decorate","this","Components","PropertyChangeEventName","Logging","UI","Animations","ViewChild","PCSS","P","Watch","PropertyConverters","CustomElement","Defaults","CustomUIEvent","CustomElementUtils","PropertyChangeEvent","PacemEventTarget","Imaging","Point","CustomEventUtils","Colors","adaptWGSLStringArray","adaptWGSLModifierStringArray","Vector3D","Matrix3D","Strings","Debounce","avoidHandler","Behaviors","Transformer","DeepMerger"],"mappings":"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,EAAE,6BAA6B,CAAC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE,6BAA6B,CAAC;AAC3C;AACA;AACA;AACA;AACA,CAAC,CAAC;IACF;;IC5MA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,2BAA2B,CAAC,UAAU,GAAG,gCAAgC,EAAE;IAC3F,IAAI,OAAO,CAAC;AACZ;AACA;AACA;AACA,SAAS,EAAE,UAAU,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;IACH;;ICzBA;IACA,MAAM,2BAA2B,GAAG;IACpC,IAAI,EAAE,EAAE,IAAI;IACZ,CAAC;IACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,UAAU,GAAG,2BAA2B,EAAE,KAAK,EAAE,OAAO,GAAG,qBAAqB,EAAE;IAC7G,IAAI,MAAM,GAAG,GAAGA,eAAK,CAAC,UAAU,EAAE;IAClC,IAAI,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7C,IAAI,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,MAAM,GAAG,GAAGA,eAAK,CAAC,MAAM,CAAC,EAAE,EAAE,2BAA2B,EAAE,UAAU,CAAC;IACzE,IAAI,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,YAAY,GAAG,GAAG,CAAC,YAAY;IACtE,IAAI,IAAIA,eAAK,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;I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"}
|
|
1
|
+
{"version":3,"file":"pacem-3d.js","sources":["../esm/converters.js","../esm/constants.js","../esm/stage.js","../esm/types.js","../esm/decorators.js","../esm/geometry.js","../esm/materials/material.js","../esm/parsers/parser.js","../esm/detector.js","../esm/materials/basic.js","../esm/materials/lambert.js","../esm/materials/line.js","../esm/materials/phong.js","../esm/materials/standard.js","../esm/primitives/primitive.js","../esm/primitives/box.js","../esm/primitives/cone.js","../esm/primitives/cylinder.js","../esm/primitives/line.js","../esm/primitives/plane.js","../esm/primitives/polyhedra.js","../esm/primitives/sphere.js","../esm/primitives/torus.js","../esm/adapters/shared.js","../esm/adapters/threejsadapter.js","../esm/adapters/webgpu/constants.js","../esm/adapters/webgpu/abstractions.js","../esm/adapters/webgpu/buffers.js","../esm/adapters/webgpu/wgsl/basic-material-fragment.js","../esm/adapters/webgpu/wgsl/line-material-fragment.js","../esm/adapters/webgpu/materials.js","../esm/adapters/webgpu/wgsl/shared.js","../esm/adapters/webgpu/wgsl/mesh-vertex.js","../esm/adapters/webgpu/wgsl/line-vertex.js","../esm/adapters/webgpu/wgsl/object-picking-fragment.js","../esm/adapters/webgpu/wgsl/texture-fragment.js","../esm/adapters/webgpu/wgsl/directional-light-fragment.js","../esm/adapters/webgpu/wgsl/omni-light-fragment.js","../esm/adapters/webgpu/wgsl/ambient-light-fragment.js","../esm/adapters/webgpu/cameras.js","../esm/adapters/webgpu/renderablebuffer.js","../esm/adapters/webgpu/pipelinefactory.js","../esm/adapters/webgpu/raycaster.js","../esm/adapters/webgpu/renderer.js","../esm/adapters/webgpu/webgpuadapter.js","../esm/adapters/webgpu/behaviors/orbit-camera.js","../esm/index-iife.js"],"sourcesContent":["import { Utils } from '@pacem/pacem-core';\nimport { parseAsNumericalArray } from '@pacem/pacem-foundation';\nimport { Geometry } from '@pacem/pacem-numerical';\n//namespace Pacem.Drawing3D {\n/** Converts a `\"x y z\"` attribute string to/from a {@link Vector3D}. */\nexport const Point3DConverter = {\n convert: (attr) => Geometry.LinearAlgebra.Vector3D.parse(attr),\n convertBack: (prop) => `${prop.x || 0} ${prop.y || 0} ${prop.z || 0}`\n};\n/** Converts a `\"x y z\"` (3 components) or `\"n\"` (single uniform component, broadcast to all 3 axes) attribute string to/from a {@link Vector3D}. Used e.g. for `scale`/`offset`. */\nexport const Point3DOrNumberConverter = {\n convert: (attr) => {\n const arr = parseAsNumericalArray(attr);\n const throwErr = () => { throw new Error(`Cannot parse \"${attr}\" as a valid Vector3D.`); };\n if (Utils.isNullOrEmpty(arr)) {\n throwErr();\n }\n if (arr.length === 3) {\n return Geometry.LinearAlgebra.Vector3D.from(...arr);\n }\n if (arr.length === 1) {\n const v = arr[0];\n return Geometry.LinearAlgebra.Vector3D.from(v, v, v);\n }\n throwErr();\n },\n convertBack: (prop) => `${prop.x || 0} ${prop.y || 0} ${prop.z || 0}`\n};\n/** Converts a `\"x y z w\"` attribute string to/from a {@link Quaternion}. Used e.g. for `rotate`. */\nexport const QuaternionConverter = {\n convert: (attr) => Geometry.LinearAlgebra.Quaternion.parse(attr),\n convertBack: (prop) => `${prop.x || 0} ${prop.y || 0} ${prop.z || 0} ${prop.w || 0}`\n};\n/** Converts an attribute string to/from either a `boolean` (`\"true\"`/`\"false\"`) or a `number`. */\nexport const BooleanOrNumberConverter = {\n convert: (attr) => {\n if (attr === 'true')\n return true;\n if (attr === 'false')\n return false;\n return parseAsNumericalArray(attr)[0];\n },\n convertBack: (prop) => prop.toString()\n};\n","/** Middle segment shared by every custom element tag name in this package (e.g. `pacem-3d`, `pacem-3d-mesh`). */\nexport const TAG_MIDDLE_NAME = \"3d\";\n/** Conversion factor from degrees to radians. */\nexport const DEG2RAD = Math.PI / 180;\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, PCSS, Defaults, ViewChild, Watch, PropertyConverters, Utils, Components, PropertyChangeEventName, Logging, Animations, UI } from '@pacem/pacem-core';\nimport { RenderableEvent, DragEvent, RenderableElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing3D {\n/**\n * `<pacem-3d>`: the root 3d stage element. Hosts the {@link RenderableElement} scene graph (groups, meshes, lights,\n * cameras) declared as children or provided via {@link datasource}, delegates all actual scene-building/rendering/\n * hit-testing to the pluggable {@link adapter} ({@link Pacem3DAdapterElement}), and dispatches pointer interaction\n * events ({@link RenderableEvent}/{@link DragEvent}) for the items under the cursor.\n */\nlet Pacem3DElement = class Pacem3DElement extends Components.PacemItemsContainerElement {\n constructor() {\n super(...arguments);\n this._itemPropertyChangeHandler = (evt) => {\n const renderable = evt.target;\n // clear flags\n // TODO: be more precise\n this.adapter &&\n this.adapter.updateItem(this, renderable);\n renderable.flags.splice(0);\n };\n this._clickHandler = (evt) => {\n let me = this;\n if (!me.interactive || Utils.isNull(me._lastHitResult)) {\n return;\n }\n const type = evt.type.replace(/^mouse/, '');\n const hit = me._lastHitResult, object = hit.object, point = hit.point;\n this._itemDispatch(object, point, type, evt);\n };\n this._hitTestCallback = (result, evt) => {\n const me = this;\n // TODO: handle dragging\n if (result != me._lastHitResult) {\n if (result?.object != me._lastHitResult?.object) {\n const obj = result?.object, last = me._lastHitResult?.object, pt = result?.point;\n if (!Utils.isNull(last)) {\n this._itemDispatch(last, pt, 'out', evt);\n }\n if (!Utils.isNull(obj)) {\n this._itemDispatch(obj, pt, 'over', evt);\n }\n }\n me._lastHitResult = result;\n }\n };\n this._moveHandler = (evt) => {\n let me = this;\n if (!me.adapter || !me.interactive) {\n return;\n }\n const rect = me._resizer.currentSize;\n const callback = (r) => me._hitTestCallback(r, evt);\n const pixel = evt.type === 'mousemove' ? { x: evt.pageX - rect.left, y: evt.pageY - rect.top } : { x: -1, y: -1 };\n me.adapter.raycast(this, pixel, rect, callback);\n };\n this._resizeHandler = (evt) => {\n const oldSize = this.#size;\n const size = evt.detail;\n if (!Utils.isNull(oldSize) && oldSize.height === size.height && oldSize.width === size.width) {\n return;\n }\n this.#size = size;\n const adapter = this.adapter;\n if (!Utils.isNull(adapter)) {\n this.adapter.invalidateSize(this, size);\n this.dispatchEvent(new Components.ResizeEvent(size));\n }\n };\n //#endregion\n }\n validate(item) {\n return item instanceof RenderableElement;\n }\n /** @readonly Gets the DOM element the scene is mounted into. */\n get stage() {\n return this._container;\n }\n /** @readonly Gets the technology-dependent native scene instance, as reported by the active {@link adapter}. */\n get scene() {\n return this.adapter && this.adapter.getScene(this);\n }\n register(item) {\n const retval = super.register(item);\n if (retval) {\n this._add(item);\n item.addEventListener(PropertyChangeEventName, this._itemPropertyChangeHandler, false);\n }\n return retval;\n }\n unregister(item) {\n const retval = super.unregister(item);\n if (retval) {\n item.removeEventListener(PropertyChangeEventName, this._itemPropertyChangeHandler, false);\n this._erase(item);\n }\n return retval;\n }\n _refreshDatasource(val = this.datasource) {\n this.adapter?.updateItem(this, undefined);\n }\n _buildUpDatasourceFromDOM(val = this.items) {\n if (!Utils.isNullOrEmpty(val)) {\n this.datasource = val.slice();\n }\n }\n _add(item) {\n this.adapter &&\n this.adapter.addItem(this, item);\n }\n _erase(item) {\n this.adapter &&\n this.adapter.removeItem(this, item);\n }\n _initializeAdapter(old, val) {\n return new Promise((resolve, reject) => {\n const items = this.datasource || [];\n if (!Utils.isNull(old)) {\n items.forEach(i => old.removeItem(this, i));\n }\n if (!Utils.isNull(this._container) && !Utils.isNull(val)) {\n val.initialize(this).then(_ => {\n (items || []).forEach(i => this._add(i));\n resolve();\n }, e => {\n this.log(Logging.LogLevel.Error, e?.toString());\n reject(e);\n });\n }\n else {\n resolve();\n }\n });\n }\n //#region lifecycle\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (first) {\n return;\n }\n switch (name) {\n case 'adapter':\n this._initializeAdapter(old, val);\n break;\n case 'items':\n this._buildUpDatasourceFromDOM(val);\n break;\n case 'transparent':\n this.adapter?.invalidateSize(this, this.size);\n break;\n case 'datasource':\n this._refreshDatasource(val);\n case 'disabled':\n case 'background':\n this.render();\n break;\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n // stage\n const container = this._container;\n // resizer\n const resizer = this._resizer;\n resizer.addEventListener('resize', this._resizeHandler, false);\n resizer.target = container;\n // adapter\n this._initializeAdapter(null, this.adapter).then(_ => {\n container.addEventListener('mousemove', this._moveHandler, false);\n container.addEventListener('click', this._clickHandler, false);\n container.addEventListener('mouseup', this._clickHandler, false);\n container.addEventListener('mousedown', this._clickHandler, false);\n container.addEventListener('mouseout', this._moveHandler, false);\n this._buildUpDatasourceFromDOM();\n this.render();\n });\n }\n _itemDispatch(target, point, type, offset) {\n if (!Utils.isNull(target)) {\n var dragArgs, originalEvent, evtType;\n if (offset instanceof Event) {\n originalEvent = offset;\n }\n else {\n dragArgs = { item: target, offset: offset };\n }\n if (typeof type === 'string') {\n evtType = type;\n }\n else {\n evtType = type.type;\n originalEvent = type.originalEvent;\n }\n const m = point;\n const evt = () => offset instanceof Event ? new RenderableEvent(evtType, target, originalEvent, m) : new DragEvent(evtType, { detail: dragArgs, cancelable: evtType === UI.DragDropEventType.Init || evtType === UI.DragDropEventType.Drag }, originalEvent, m), itemevt = offset instanceof Event ? new RenderableEvent('item' + evtType, target, originalEvent, m) : new DragEvent('item' + evtType, { detail: dragArgs, cancelable: evtType === UI.DragDropEventType.Init || evtType === UI.DragDropEventType.Drag }, originalEvent, m);\n var prevent = false;\n if (target instanceof EventTarget) {\n const evnt = evt();\n target.dispatchEvent(evnt);\n prevent = evnt.defaultPrevented;\n }\n target.stage.dispatchEvent(itemevt);\n // was the event (in one of its forms) rejected?\n return prevent || itemevt.defaultPrevented;\n }\n return false;\n }\n disconnectedCallback() {\n this.#handle?.stop();\n const resizer = this._resizer, container = this._container;\n if (!Utils.isNull(container)) {\n container.removeEventListener('click', this._clickHandler, false);\n container.removeEventListener('mouseup', this._clickHandler, false);\n container.removeEventListener('mousedown', this._clickHandler, false);\n container.removeEventListener('mousemove', this._moveHandler, false);\n container.removeEventListener('mouseout', this._moveHandler, false);\n }\n if (!Utils.isNull(resizer)) {\n resizer.removeEventListener('resize', this._resizeHandler, false);\n }\n super.disconnectedCallback();\n }\n #size;\n /** @readonly Gets the current viewport size, as last reported by the internal resize observer. */\n get size() {\n return this.#size;\n }\n /** Renders the whole scene through the active {@link adapter}, or just updates the given `item` if provided. */\n render(item, deepUpdate, now = performance.now()) {\n if (!Utils.isNull(item)) {\n const adapter = this.adapter;\n if (!Utils.isNull(adapter)) {\n adapter.updateItem(this, item);\n }\n }\n else {\n this.#handle?.stop();\n this.#handle = Animations.Timer.run(_ => this._doRender());\n //this._doRender();\n }\n }\n #handle;\n _doRender() {\n if (!this.disabled && !Utils.isNull(this.adapter)) {\n const scene = this.adapter.getScene(this);\n let cancelable = new CustomEvent('prerender', { detail: { scene }, cancelable: true });\n this.dispatchEvent(cancelable);\n if (!cancelable.defaultPrevented) {\n this.adapter.render(this);\n this.dispatchEvent(new CustomEvent('render', { detail: { scene } }));\n }\n }\n }\n};\n__decorate([\n ViewChild(`.${PCSS}-3d`)\n], Pacem3DElement.prototype, \"_container\", void 0);\n__decorate([\n ViewChild(P + '-resize')\n], Pacem3DElement.prototype, \"_resizer\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], Pacem3DElement.prototype, \"interactive\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], Pacem3DElement.prototype, \"transparent\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DElement.prototype, \"background\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Element })\n], Pacem3DElement.prototype, \"adapter\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem3DElement.prototype, \"datasource\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], Pacem3DElement.prototype, \"orbit\", void 0);\nPacem3DElement = __decorate([\n CustomElement({\n tagName: P + '-' + TAG_MIDDLE_NAME, shadow: Defaults.USE_SHADOW_ROOT, template: `<${P}-resize watch-position=\"true\"></${P}-resize><div class=\"${PCSS}-3d\"></div><${P}-content></${P}-content>`\n })\n], Pacem3DElement);\nexport { Pacem3DElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Watch, PropertyConverters, CustomElement, PacemEventTarget, PropertyChangeEvent, CustomElementUtils, CustomUIEvent, P, Utils, Components } from '@pacem/pacem-core';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { Point3DConverter, Point3DOrNumberConverter, QuaternionConverter } from './converters';\nimport { Pacem3DElement } from './stage';\nimport { TAG_MIDDLE_NAME } from './constants';\n/** Type guard checking whether `object` implements the {@link Stage} contract. */\nexport function isStage(object) {\n return !Utils.isNull(object) && 'render' in object && typeof object['render'] === 'function';\n}\n/** Type guard checking whether `object` implements the {@link Renderable} contract (i.e. it is attached to a valid {@link Stage}). */\nexport function isRenderable(object) {\n return isStage(object?.stage);\n}\n/** Type guard checking whether `object` implements the {@link Ui3DObject} contract (i.e. it exposes a {@link Ui3DObject.transformMatrix}). */\nexport function isUi3DObject(object) {\n return 'transformMatrix' in object && isRenderable(object);\n}\n/** Type guard checking whether `object` implements the {@link Camera} contract. */\nexport function isCamera(object) {\n return 'type' in object && 'up' in object && 'lookAt' in object && isRenderable(object);\n}\n/** Type guard checking whether `object` is a {@link PerspectiveCamera}. */\nexport function isPerspectiveCamera(object) {\n return isCamera(object) && 'type' in object && object.type === 'perspective';\n}\n/** Type guard checking whether `object` is an {@link OrthographicCamera}. */\nexport function isOrthographicCamera(object) {\n return isCamera(object) && 'type' in object && object.type === 'orthographic';\n}\n/** Type guard checking whether `object` implements the {@link Light} contract. */\nexport function isLight(object) {\n return 'type' in object && (object.type === 'ambient' || object.type === 'omni' || object.type === 'direction' || object.type == 'spot') && isRenderable(object);\n}\n/** Type guard checking whether `object` implements the {@link Mesh} contract. */\nexport function isMesh(object) {\n return 'geometry' in object && isUi3DObject(object);\n}\n/** Type guard checking whether `object` implements the {@link NodeGeometry} contract. */\nexport function isGeometry(object) {\n return 'positions' in object && Utils.isArray(object.positions);\n}\n/** Type guard checking whether `object` implements the {@link MeshGeometry} contract (a {@link NodeGeometry} with triangle indices/normals/UVs). */\nexport function isMeshGeometry(object) {\n return ('triangleIndices' in object && Utils.isArray(object.triangleIndices)\n || 'normals' in object && Utils.isArray(object.normals)\n || 'textureCoordinates' in object && Utils.isArray(object.textureCoordinates)) && isGeometry(object);\n}\n/** Type guard checking whether `object` implements the {@link Group} contract. */\nexport function isGroup(object) {\n return 'childRenderables' in object && Utils.isArray(object['childRenderables']) && isUi3DObject(object);\n}\n/**\n * Sets the normals to a mesh geometry by computing each face's unit orthogonal vector.\n * @param geometry\n */\nexport function computeSharpVertexNormals(geometry) {\n const normals = [];\n if (!Utils.isNullOrEmpty(geometry)) {\n const indices = geometry.triangleIndices;\n if (indices.length % 3 !== 0) {\n throw new RangeError(`Invalid mesh geometry: ${indices.length} is not multiple of 3.`);\n }\n for (let j = 2; j < indices.length; j += 3) {\n const u = indices[j - 2], v = indices[j - 1], w = indices[j];\n const a = geometry.positions[u], b = geometry.positions[v], c = geometry.positions[w];\n const normal = computePlaneNormal(a, b, c);\n normals.push(normal, normal, normal);\n }\n }\n geometry.normals = normals;\n}\n/**\n * Computes the unit vector orthogonal to the plane identified by 3 points.\n * @param a\n * @param b\n * @param c\n */\nexport function computePlaneNormal(a, b, c) {\n // TODO: check input correctness (distinct points)\n const vAB = Geometry.LinearAlgebra.Vector3D.subtract(a, b), vAC = Geometry.LinearAlgebra.Vector3D.subtract(a, c);\n const orthogonal = Geometry.LinearAlgebra.Vector3D.cross(vAB, vAC);\n return Geometry.LinearAlgebra.Vector3D.unit(orthogonal);\n}\n/** Base class for the custom UI events dispatched by 3d elements/the stage, carrying the source pointer's projected {@link point} in 3d world space alongside the original DOM event. */\nexport class UI3DEvent extends CustomUIEvent {\n constructor(type, eventInit, originalEvent, point) {\n super(type, eventInit, originalEvent);\n this.#point = point;\n }\n #point;\n /** Gets the event's source position in 3d coordinates. */\n get point() {\n return this.#point;\n }\n}\n/** Event dispatched while a {@link Renderable} item is being dragged (`itemdragstart`/`itemdrag`/`itemdragend`-like events), carrying a {@link DragEventArgs} payload. */\nexport class DragEvent extends UI3DEvent {\n}\n/** Event dispatched for pointer interactions (click/over/out/down/up) with a {@link Renderable} item, carrying the item itself as its `detail`. */\nexport class RenderableEvent extends UI3DEvent {\n constructor(type, args, originalEvent, p) {\n super(type, { detail: args, bubbles: true, cancelable: true }, originalEvent, p);\n }\n}\n/** Identifies which aspect of a {@link Renderable} changed since the last render, so the adapter can update only the stale part of the underlying native object. */\nexport var StalePropertyFlag;\n(function (StalePropertyFlag) {\n /** The object's {@link Renderable.position} changed. */\n StalePropertyFlag[\"Position\"] = \"position\";\n /** The object's {@link Ui3DObject.transformMatrix} (rotate/scale/offset) changed. */\n StalePropertyFlag[\"Transform\"] = \"transform\";\n /** The mesh/line {@link NodeGeometry} changed. */\n StalePropertyFlag[\"Geometry\"] = \"geometry\";\n /** The group's child collection changed. */\n StalePropertyFlag[\"Children\"] = \"children\";\n /** The mesh's {@link Material}/{@link Mesh.backMaterial} changed. */\n StalePropertyFlag[\"Material\"] = \"material\";\n /** A {@link Light}-specific property (color, intensity, target, ...) changed. */\n StalePropertyFlag[\"Light\"] = \"light\";\n /** A {@link Camera}-specific property (near, far, fov, frustum, ...) changed. */\n StalePropertyFlag[\"Camera\"] = \"camera\";\n /** The object's {@link Renderable.hide} visibility changed. */\n StalePropertyFlag[\"Visibility\"] = \"visibility\";\n})(StalePropertyFlag || (StalePropertyFlag = {}));\n/** Type guard checking whether `object` implements the {@link Interaction} contract. */\nexport function isInteraction(object) {\n return typeof object === 'object' && 'time' in object && typeof object['time'] === 'number';\n}\n//namespace Pacem.Components.Drawing3D {\nconst Constants = {\n OBJECT_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-object',\n LIGHT_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-light',\n PERSPECTIVE_CAMERA_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-perspective-camera',\n ORTHO_CAMERA_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-orthographic-camera',\n LINE_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-line',\n MESH_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-mesh',\n GROUP_SELECTOR: P + '-' + TAG_MIDDLE_NAME + '-group',\n DEFAULT_COORDS: { x: 0, y: 0, z: 0 }\n};\n/**\n * Abstract base of every scene-graph custom element usable inside a {@link Pacem3DElement} stage (groups, meshes,\n * native objects, lights, cameras). Implements {@link Renderable}, wires the element into the ancestor stage/parent\n * chain, and tracks which aspects of the object are stale (via {@link StalePropertyFlag}) so the active\n * {@link Pacem3DAdapterElement} can update only what changed on the next render.\n */\nexport class RenderableElement extends Components.PacemCrossItemsContainerElement {\n constructor() {\n super(...arguments);\n /** Gets or sets the element's position, in 3d world (or parent-local) space. */\n this.position = Constants.DEFAULT_COORDS;\n this.#staleFlags = [];\n }\n /** When implemented in a derived class (e.g. {@link Pacem3DGroupElement}), determines whether `_` may be nested under this element. Denies any child by default. */\n validate(_) {\n // by default no children allowed (Group will except)\n return false;\n }\n findContainer() {\n // override\n return this.parent || this.stage;\n }\n /** @readonly Gets the ancestor {@link Pacem3DElement} stage this element belongs to. */\n get stage() {\n return this['_scene'] = this['_scene'] || CustomElementUtils.findAncestorOfType(this, Pacem3DElement);\n }\n /** @readonly Gets the closest ancestor {@link RenderableElement} (e.g. the containing group), if any. */\n get parent() {\n return this['_drawableParent'] = this['_drawableParent'] || CustomElementUtils.findAncestor(this, i => i instanceof RenderableElement);\n }\n disconnectedCallback() {\n delete this['_scene'];\n delete this['_drawableParent'];\n super.disconnectedCallback();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'hide':\n this.setAsDirty(StalePropertyFlag.Visibility);\n break;\n case 'items':\n this.setAsDirty(StalePropertyFlag.Children);\n break;\n case 'position':\n this.setAsDirty(StalePropertyFlag.Position);\n break;\n }\n }\n #staleFlags;\n /** @readonly Gets the list of {@link StalePropertyFlag}s accumulated since the element was last rendered/updated by the adapter. */\n get flags() {\n return this.#staleFlags;\n }\n /** Calls for a redraw of the current element in the next rendering process. */\n setAsDirty(...flags) {\n // set the flags that identify the stale part of the object to be updated.\n for (let flag of flags) {\n if (!this.flags.includes(flag)) {\n this.flags.push(flag);\n }\n }\n this.stage?.render(this);\n }\n}\n__decorate([\n Watch({ emit: false, converter: Point3DConverter })\n], RenderableElement.prototype, \"position\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], RenderableElement.prototype, \"tag\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], RenderableElement.prototype, \"inert\", void 0);\n/**\n * Abstract base of every {@link RenderableElement} that also carries an affine 3d transform (rotate/scale/offset,\n * combined into {@link transformMatrix}). Extended by {@link Pacem3DGroupElement}, {@link Pacem3DMeshElement} and\n * {@link Pacem3DObjectElement}.\n */\nexport class Ui3DElement extends RenderableElement {\n // #endregion\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'transformMatrix':\n this.setAsDirty(StalePropertyFlag.Transform);\n break;\n case 'translateZ':\n case 'translateX':\n case 'translateY':\n this.offset = { x: this.translateX, y: this.translateY, z: this.translateZ };\n break;\n case 'scaleX':\n case 'scaleY':\n case 'scaleZ':\n this.scale = { x: this.scaleX, y: this.scaleY, z: this.scaleZ };\n break;\n case 'scale':\n case 'offset':\n case 'rotate':\n this._computeTransformMatrix();\n break;\n }\n }\n _computeTransformMatrix() {\n const MAT3D = Geometry.LinearAlgebra.Matrix3D, VEC3D = Geometry.LinearAlgebra.Vector3D, QUAT = Geometry.LinearAlgebra.Quaternion;\n // scale\n const scale = this.scale ?? VEC3D.from(1, 1, 1);\n let m = MAT3D.scale(MAT3D.identity(), scale);\n // rotate\n if (!Utils.isNull(this.rotate)) {\n const rot = QUAT.toRotationMatrix(this.rotate);\n m = MAT3D.multiply(m, rot);\n }\n // translate\n const offset = this.offset ?? VEC3D.from(0, 0, 0);\n m = MAT3D.translate(m, offset);\n this.transformMatrix = m;\n }\n}\n__decorate([\n Watch({ emit: false, converter: QuaternionConverter })\n], Ui3DElement.prototype, \"rotate\", void 0);\n__decorate([\n Watch({ emit: false, converter: Point3DOrNumberConverter })\n], Ui3DElement.prototype, \"scale\", void 0);\n__decorate([\n Watch({ emit: false, converter: Point3DOrNumberConverter })\n], Ui3DElement.prototype, \"offset\", void 0);\n__decorate([\n Watch({ emit: false })\n], Ui3DElement.prototype, \"transformMatrix\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"scaleX\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"scaleY\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"scaleZ\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"translateX\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"translateY\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Ui3DElement.prototype, \"translateZ\", void 0);\n/** `<pacem-3d-group>`: a {@link Ui3DElement} container that groups child {@link RenderableElement}s (declarative or from {@link datasource}) so its own transform applies to all of them. */\nlet Pacem3DGroupElement = class Pacem3DGroupElement extends Ui3DElement {\n validate(child) {\n // overrides default denial\n return child instanceof RenderableElement;\n }\n #children = [];\n /** @readonly Gets the renderable children currently belonging to the group. */\n get childRenderables() {\n return this.#children;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'items':\n case 'datasource':\n this.#children = (val || []);\n this.setAsDirty(StalePropertyFlag.Children);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false })\n], Pacem3DGroupElement.prototype, \"datasource\", void 0);\nPacem3DGroupElement = __decorate([\n CustomElement({ tagName: Constants.GROUP_SELECTOR })\n], Pacem3DGroupElement);\nexport { Pacem3DGroupElement };\n/** `<pacem-3d-mesh>`: a {@link Ui3DElement} that renders a {@link NodeGeometry} (mesh or line) with a front/back {@link Material}. */\nlet Pacem3DMeshElement = class Pacem3DMeshElement extends Ui3DElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'geometry':\n this.setAsDirty(StalePropertyFlag.Geometry);\n break;\n case 'material':\n case 'backMaterial':\n this.setAsDirty(StalePropertyFlag.Material);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem3DMeshElement.prototype, \"geometry\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem3DMeshElement.prototype, \"material\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem3DMeshElement.prototype, \"backMaterial\", void 0);\nPacem3DMeshElement = __decorate([\n CustomElement({ tagName: Constants.MESH_SELECTOR })\n], Pacem3DMeshElement);\nexport { Pacem3DMeshElement };\n/** `<pacem-3d-object>`: a {@link Ui3DElement} that loads/embeds a pre-built 3d asset (`obj`, `fbx`, or a native scene-graph object) instead of an explicit {@link Pacem3DMeshElement} geometry. */\nlet Pacem3DObjectElement = class Pacem3DObjectElement extends Ui3DElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'content' || name === 'type') {\n this.setAsDirty(StalePropertyFlag.Geometry, StalePropertyFlag.Material);\n }\n }\n};\n__decorate([\n Watch({ emit: false })\n], Pacem3DObjectElement.prototype, \"content\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DObjectElement.prototype, \"type\", void 0);\nPacem3DObjectElement = __decorate([\n CustomElement({ tagName: Constants.OBJECT_SELECTOR })\n], Pacem3DObjectElement);\nexport { Pacem3DObjectElement };\n/** `<pacem-3d-light>`: a {@link RenderableElement} light source (point/omni, spot or directional) illuminating the scene. */\nlet Pacem3DLightElement = class Pacem3DLightElement extends RenderableElement {\n constructor() {\n super(...arguments);\n /** Gets or sets the light intensity/brightness. */\n this.intensity = .85;\n /** Gets or sets the point the light is aimed at (spotlight-specific). */\n this.target = Constants.DEFAULT_COORDS;\n /** Gets or sets the light color. */\n this.color = '#fff';\n /** Gets or sets the kind of light source. */\n this.type = 'omni';\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'type':\n case 'color':\n case 'intensity':\n case 'target':\n this.setAsDirty(StalePropertyFlag.Light);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DLightElement.prototype, \"intensity\", void 0);\n__decorate([\n Watch({ emit: false, converter: Point3DConverter })\n], Pacem3DLightElement.prototype, \"target\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DLightElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DLightElement.prototype, \"type\", void 0);\nPacem3DLightElement = __decorate([\n CustomElement({ tagName: Constants.LIGHT_SELECTOR })\n], Pacem3DLightElement);\nexport { Pacem3DLightElement };\n/**\n * Abstract base of the camera custom elements ({@link Pacem3DPerspectiveCameraElement}, {@link Pacem3DOrthographicCameraElement})\n * that can be added to a {@link Pacem3DElement} stage. Implements {@link Camera}, tracking the eye-to-target\n * {@link boundingSphere} used e.g. by {@link Pacem3DAdapterElement.zoomFit}.\n */\nexport class Pacem3DCameraElement extends RenderableElement {\n constructor() {\n super(...arguments);\n /** Gets or sets the near clipping plane distance. */\n this.near = 0.1;\n /** Gets or sets the far clipping plane distance. */\n this.far = 1000.0;\n /** Gets or sets the up vector, in world coordinates. */\n this.up = Geometry.LinearAlgebra.Vector3D.j();\n /** Gets or sets the target the camera looks at, in world coordinates. */\n this.lookAt = Constants.DEFAULT_COORDS;\n }\n #sphere;\n _resetBoundingSphere() {\n const oldValue = this.#sphere;\n const eye = this.position, center = this.lookAt;\n const radius = Utils.isNullOrEmpty(eye) || Utils.isNullOrEmpty(center) ? 0\n : Geometry.LinearAlgebra.Vector3D.mag(Geometry.LinearAlgebra.Vector3D.subtract(eye, center));\n const currentValue = this.#sphere = { center, radius };\n this.dispatchEvent(new PropertyChangeEvent({ currentValue, propertyName: 'boundingSphere', oldValue }));\n }\n /** @readonly Gets the sphere centered on {@link lookAt} with radius equal to the eye-to-target distance. */\n get boundingSphere() {\n return this.#sphere;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'lookAt':\n case 'position':\n this._resetBoundingSphere();\n case 'near':\n case 'far':\n case 'up':\n this.setAsDirty(StalePropertyFlag.Camera);\n break;\n }\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DCameraElement.prototype, \"near\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DCameraElement.prototype, \"far\", void 0);\n__decorate([\n Watch({ emit: false, converter: Point3DConverter })\n], Pacem3DCameraElement.prototype, \"up\", void 0);\n__decorate([\n Watch({ emit: false, converter: Point3DConverter })\n], Pacem3DCameraElement.prototype, \"lookAt\", void 0);\n/** `<pacem-3d-perspective-camera>`: a {@link Pacem3DCameraElement} that projects the scene through a perspective frustum (vanishing point), defined by {@link fov} and {@link aspect}. */\nlet Pacem3DPerspectiveCameraElement = class Pacem3DPerspectiveCameraElement extends Pacem3DCameraElement {\n constructor() {\n super(...arguments);\n /** Gets or sets the vertical field of view, in degrees. */\n this.fov = 45;\n /** Gets or sets the viewport width/height ratio. */\n this.aspect = 1;\n }\n /** @readonly Gets the camera discriminator: always `\"perspective\"`. */\n get type() {\n return \"perspective\";\n }\n /** @readonly Gets the viewport width/height ratio (alias of {@link aspect}). */\n get aspectRatio() {\n return this.aspect;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'fov':\n case 'aspect':\n this.setAsDirty(StalePropertyFlag.Camera);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DPerspectiveCameraElement.prototype, \"fov\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DPerspectiveCameraElement.prototype, \"aspect\", void 0);\nPacem3DPerspectiveCameraElement = __decorate([\n CustomElement({ tagName: Constants.PERSPECTIVE_CAMERA_SELECTOR })\n], Pacem3DPerspectiveCameraElement);\nexport { Pacem3DPerspectiveCameraElement };\n/** `<pacem-3d-orthographic-camera>`: a {@link Pacem3DCameraElement} that projects the scene through a fixed, non-diminishing (parallel) frustum, defined by the {@link top}/{@link left}/{@link bottom}/{@link right} coordinates. */\nlet Pacem3DOrthographicCameraElement = class Pacem3DOrthographicCameraElement extends Pacem3DCameraElement {\n constructor() {\n super(...arguments);\n /** Gets or sets the top frustum coordinate (e.g. 1). */\n this.top = 1;\n /** Gets or sets the left frustum coordinate (e.g. -1). */\n this.left = -1;\n /** Gets or sets the bottom frustum coordinate (e.g. -1). */\n this.bottom = -1;\n /** Gets or sets the right frustum coordinate (e.g. 1). */\n this.right = 1;\n }\n /** @readonly Gets the camera discriminator: always `\"orthographic\"`. */\n get type() {\n return \"orthographic\";\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'top':\n case 'left':\n case 'bottom':\n case 'right':\n this.setAsDirty(StalePropertyFlag.Camera);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DOrthographicCameraElement.prototype, \"top\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DOrthographicCameraElement.prototype, \"left\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DOrthographicCameraElement.prototype, \"bottom\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], Pacem3DOrthographicCameraElement.prototype, \"right\", void 0);\nPacem3DOrthographicCameraElement = __decorate([\n CustomElement({ tagName: Constants.ORTHO_CAMERA_SELECTOR })\n], Pacem3DOrthographicCameraElement);\nexport { Pacem3DOrthographicCameraElement };\n/**\n * Pluggable rendering-backend contract assignable to a {@link Pacem3DElement}'s `adapter` property. Concrete adapters\n * ({@link Pacem3DThreeAdapterElement} for Three.js/WebGL, {@link Pacem3DWebgpuAdapterElement} for WebGPU) are\n * responsible for initializing/disposing the underlying native scene and DOM surface, sizing it, translating the\n * {@link RenderableElement} scene graph into native objects, hit-testing (raycasting) and producing snapshot images.\n */\nexport class Pacem3DAdapterElement extends PacemEventTarget {\n}\n","import { Utils } from '@pacem/pacem-core';\n//namespace Pacem.Drawing3D {\n/**\n * Property decorator factory that turns the decorated field into an accessor backed by a private field, invoking\n * `callback` with the property name and old/new values whenever it is set to a different value. Used by\n * {@link NodeGeometry}/{@link LineGeometry}/{@link MeshGeometry} to flag themselves as dirty ({@link StalePropertyFlag.Geometry})\n * whenever their vertex data changes.\n * @param callback Invoked (with `this` bound to the decorated instance) on every effective change of the property.\n */\nexport function NotifyChange(callback) {\n return (target, prop, descriptor) => {\n const backingField = `_${prop}_${Utils.uniqueCode()}_backingField`;\n function getter() {\n return this[backingField];\n }\n function setter(val) {\n if (val !== this[backingField]) {\n const old = this[backingField];\n this[backingField] = val;\n callback.call(this, prop, old, val);\n }\n }\n //if (delete target[prop]) {\n Object.defineProperty(target, prop, {\n get: function () {\n return getter.call(this);\n },\n set: function (val) {\n setter.call(this, val);\n },\n enumerable: true,\n configurable: false\n });\n //}\n };\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Utils } from '@pacem/pacem-core';\nimport { StalePropertyFlag } from './types';\nimport { NotifyChange } from './decorators';\n/**\n * Abstract base for the concrete geometry classes ({@link LineGeometry}, {@link MeshGeometry}) that back a\n * {@link Pacem3DMeshElement}'s `geometry` property, providing shared bounding-volume computation helpers.\n */\nexport class NodeGeometry {\n constructor(positions = []) {\n this.positions = positions;\n }\n /** Computes the centroid (average) of the given positions. */\n static barycenter(positions) {\n var bary = { x: 0, y: 0, z: 0 };\n if (!Utils.isNullOrEmpty(positions)) {\n var count = positions.length;\n for (var i = 0; i < positions.length; i++) {\n var pt = positions[i];\n bary.x += pt.x;\n bary.y += pt.y;\n bary.z += pt.z;\n }\n var countDbl = 1.0 * count;\n bary.x /= countDbl;\n bary.y /= countDbl;\n bary.z /= countDbl;\n }\n return bary;\n }\n /** Computes the axis-aligned {@link Box3D} enclosing the given positions. */\n static boundingBox(positions) {\n const output = {\n minX: +Infinity, minY: +Infinity, minZ: +Infinity,\n maxX: -Infinity, maxY: -Infinity, maxZ: -Infinity\n };\n if (!Utils.isNullOrEmpty(positions)) {\n for (var i = 0; i < positions.length; i++) {\n var pt = positions[i];\n output.minX = Math.min(output.minX, pt.x);\n output.minY = Math.min(output.minY, pt.y);\n output.minZ = Math.min(output.minZ, pt.z);\n output.maxX = Math.max(output.maxX, pt.x);\n output.maxY = Math.max(output.maxY, pt.y);\n output.maxZ = Math.max(output.maxZ, pt.z);\n }\n }\n return output;\n }\n /** Marks the geometry as stale, flagging it with {@link StalePropertyFlag.Geometry} for the next render. */\n setAsDirty() {\n setSelfAsDirty.call(this);\n }\n}\nfunction setSelfAsDirty() {\n const me = this;\n me.flags = [/* no further specifications, other than 'geometry' */ StalePropertyFlag.Geometry];\n}\n/** A {@link NodeGeometry} rendered as a polyline through its {@link positions} (no faces/triangles). */\nexport class LineGeometry extends NodeGeometry {\n}\n__decorate([\n NotifyChange(setSelfAsDirty)\n], LineGeometry.prototype, \"positions\", void 0);\n/** A {@link MeshGeometry} implementation with lazily-computed {@link barycenter}/{@link boundingBox} and settable {@link boundingSphere}, used as the `geometry` of a {@link Pacem3DMeshElement}. */\nexport class MeshGeometry extends NodeGeometry {\n #boundingBox;\n #boundingSphere;\n #barycenter;\n /** Gets or sets the centroid of {@link positions}; computed on first access if not explicitly set. */\n get barycenter() {\n return this.#barycenter ??= NodeGeometry.barycenter(this.positions);\n }\n set barycenter(point) {\n this.#barycenter = point;\n }\n /** Gets or sets the axis-aligned bounding box; computed from {@link positions} on first access if not explicitly set. */\n get boundingBox() {\n return this.#boundingBox ??= NodeGeometry.boundingBox(this.positions);\n }\n set boundingBox(bbox) {\n this.#boundingBox = bbox;\n }\n /** Gets or sets the bounding sphere. */\n get boundingSphere() {\n return this.#boundingSphere;\n }\n set boundingSphere(sphere) {\n this.#boundingSphere = sphere;\n }\n constructor(positions, triangleIndices, textureCoordinates = [], normals = []) {\n super(positions);\n this.triangleIndices = triangleIndices;\n this.textureCoordinates = textureCoordinates;\n this.normals = normals;\n }\n}\n__decorate([\n NotifyChange(setSelfAsDirty)\n], MeshGeometry.prototype, \"positions\", void 0);\n__decorate([\n NotifyChange(setSelfAsDirty)\n], MeshGeometry.prototype, \"triangleIndices\", void 0);\n__decorate([\n NotifyChange(setSelfAsDirty)\n], MeshGeometry.prototype, \"textureCoordinates\", void 0);\n__decorate([\n NotifyChange(setSelfAsDirty)\n], MeshGeometry.prototype, \"normals\", void 0);\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { PacemEventTarget, Utils, Watch, PropertyConverters, PCSS } from '@pacem/pacem-core';\nimport { Imaging } from '@pacem/pacem-foundation';\nimport { StalePropertyFlag } from '../types';\n//namespace Pacem.Drawing3D {\n/** Identifies the shading model (and, correspondingly, the concrete `Material` shape) applied to a mesh's faces. */\nexport var KnownShader;\n(function (KnownShader) {\n KnownShader[\"Basic\"] = \"basic\";\n KnownShader[\"Lambert\"] = \"lambert\";\n KnownShader[\"Phong\"] = \"phong\";\n KnownShader[\"Standard\"] = \"standard\";\n KnownShader[\"Line\"] = \"line\";\n KnownShader[\"Custom\"] = \"custom\";\n})(KnownShader || (KnownShader = {}));\n/** Type guard checking whether `obj` implements the {@link Material} contract. */\nexport function isMaterial(obj) {\n return /*'color' in obj &&*/ 'shader' in obj;\n}\n/** Type guard checking whether `obj` implements the {@link BasicMaterial} contract. */\nexport function isBasicMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Basic;\n}\n/** Type guard checking whether `obj` implements the {@link LineMaterial} contract. */\nexport function isLineMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Line;\n}\n/** Type guard checking whether `obj` implements the {@link LambertMaterial} contract. */\nexport function isLambertMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Lambert;\n}\n/** Type guard checking whether `obj` implements the {@link PhongMaterial} contract. */\nexport function isPhongMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Phong;\n}\n/** Type guard checking whether `obj` implements the {@link StandardMaterial} contract. */\nexport function isStandardMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Standard;\n}\n/** Type guard checking whether `obj` implements the {@link ShaderMaterial} contract. */\nexport function isShaderMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Custom;\n}\n//namespace Pacem.Components.Drawing3D {\n/**\n * Abstract base of the declarative material custom elements — {@link BasicMaterialElement}, {@link LambertMaterialElement},\n * {@link LineMaterialElement}, {@link PhongMaterialElement} and {@link StandardMaterialElement} — that assemble a\n * {@link Material} (with its `shader`-specific extra properties) out of shared and shader-specific watched attributes,\n * ready to be assigned to a `Pacem3DMeshElement`'s `material`/`backMaterial` property.\n */\nexport class MaterialElement extends PacemEventTarget {\n /** @param shader The {@link KnownShader} this element's {@link createMaterial} produces. */\n constructor(shader) {\n super();\n this.#shader = shader;\n }\n #shader;\n /** Gets the shading model this element produces materials for. */\n get shader() {\n return this.#shader;\n }\n async _loadMap(url, old = this.material?.texture) {\n if (!Utils.isNull(old)) {\n old.close();\n }\n if (Utils.isNullOrEmpty(url)) {\n return null;\n }\n const blob = await Imaging.loadImage(url);\n if (Utils.isNull(blob)) {\n return null;\n }\n return await createImageBitmap(blob);\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'map':\n case 'opacity':\n case 'wireframe':\n case 'color':\n case 'hide':\n this.updateMaterial();\n break;\n }\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.updateMaterial();\n }\n /** Recomputes {@link material} via {@link createMaterial}, flagging it as {@link StalePropertyFlag.Material}. */\n updateMaterial() {\n this.createMaterial().then(m => {\n this.material = Utils.extend(m, { flags: [StalePropertyFlag.Material] });\n });\n }\n /** Builds the base {@link Material} out of the shared watched attributes (`opacity`, `wireframe`, `color`, `hide`, `map`); overridden by subclasses to add their shader-specific properties. */\n async createMaterial() {\n return {\n opacity: this.opacity ?? 1.0,\n wireframe: this.wireframe ?? false,\n color: this.color || Utils.Css.getVariableValue(`--${PCSS}-color-primary`),\n visible: !(this.hide ?? false),\n map: this.map,\n texture: await this._loadMap(this.map),\n shader: this.shader,\n flags: [],\n };\n }\n}\n__decorate([\n Watch()\n], MaterialElement.prototype, \"material\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], MaterialElement.prototype, \"opacity\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], MaterialElement.prototype, \"wireframe\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], MaterialElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], MaterialElement.prototype, \"hide\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], MaterialElement.prototype, \"map\", void 0);\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Transformer } from '@pacem/pacem-core';\nimport { Point } from '@pacem/pacem-foundation';\nimport { MeshGeometry } from '../geometry';\nimport { Point3DConverter } from '../converters';\n//namespace Pacem.Drawing3D {\n/** Parses the text content of a Wavefront `.obj` file into a {@link MeshGeometry} (vertices, triangle indices, UVs and normals). */\nclass OBJParser {\n /**\n * Parses `v` (vertex), `vt` (texture coordinate), `vn` (normal) and `f` (face) records out of `content`,\n * triangulating any face with more than 3 vertices (fan triangulation).\n */\n static parse(content) {\n // vertices\n const vertices = [];\n const vParser = /^v((\\s+-?[\\d\\.]+){3})/gm;\n let arr = vParser.exec(content);\n while (arr && arr.length) {\n vertices.push(Point3DConverter.convert(arr[1]));\n arr = vParser.exec(content);\n }\n // uvmap\n const vt = [];\n const tParser = /^vt((\\s+-?[\\d\\.]+){2})/gm;\n arr = tParser.exec(content);\n while (arr && arr.length) {\n vt.push(Point.parse(arr[1]));\n arr = tParser.exec(content);\n }\n // normals\n const vn = [];\n const nParser = /^vn((\\s+-?[\\d\\.]+){3})/gm;\n arr = nParser.exec(content);\n while (arr && arr.length) {\n vn.push(Point3DConverter.convert(arr[1]));\n arr = nParser.exec(content);\n }\n const normals = [];\n const uv = [];\n const positions = [];\n const fParser = /^f((\\s+([\\d]+\\/[\\d]+\\/[\\d]+)){3,})/gm;\n arr = fParser.exec(content);\n while (arr && arr.length) {\n const fjParser = /([\\d]+)\\/([\\d]+)\\/([\\d]+)/g;\n const face = arr[1];\n let jArr = fjParser.exec(face);\n let jIndex = 0;\n var vIndex0, tIndex0, nIndex0;\n var vIndex, tIndex, nIndex;\n while (jArr && jArr.length) {\n if (jIndex > 2) {\n // 4+ vertex-face\n // but mesh only allows triangluar faces\n // re-add(0)\n positions.push(vIndex0);\n uv.push(vt[tIndex0]);\n normals.push(vn[nIndex0]);\n // re-add(last)\n positions.push(vIndex);\n uv.push(vt[tIndex]);\n normals.push(vn[nIndex]);\n }\n // OBJ indexes are 1-based\n vIndex = parseInt(jArr[1]) - 1;\n tIndex = parseInt(jArr[2]) - 1;\n nIndex = parseInt(jArr[3]) - 1;\n positions.push(vIndex);\n uv.push(vt[tIndex]);\n normals.push(vn[nIndex]);\n if (jIndex === 0) {\n vIndex0 = vIndex;\n tIndex0 = tIndex;\n nIndex0 = nIndex;\n }\n jIndex++;\n jArr = fjParser.exec(face);\n }\n // loop\n arr = fParser.exec(content);\n }\n // faces\n return new MeshGeometry(vertices, positions, uv, normals);\n }\n}\n/** Model-file parsing entry point, registered as the `parse3D` markup transformer for converting raw asset text into a {@link NodeGeometry} or {@link Material}. */\nclass Parser3D {\n /**\n * Parses `content` according to `type` into a {@link NodeGeometry} (currently only the `'obj'` Wavefront format,\n * via {@link OBJParser}) or a {@link Material}. Throws for any other/unsupported `type` (e.g. `'mtl'`, not yet implemented).\n */\n static parseGeometry(content, type) {\n switch (type.toLowerCase()) {\n case 'obj':\n return OBJParser.parse(content);\n default:\n throw new Error(`Type '${type}' is not supported.`);\n }\n }\n}\n__decorate([\n Transformer('parse3D')\n], Parser3D, \"parseGeometry\", null);\n","//namespace Pacem.Components.Drawing3D {\n/** @deprecated*/\nexport class Pacem3DDetector {\n /** Probes the browser for WebGL support by attempting to create a rendering context, populating {@link info} and {@link supported}. */\n constructor() {\n this._detected = {\n supported: false, info: {}\n };\n let cvs = document.createElement('canvas');\n let contextNames = ['webgl', 'experimental-webgl', 'moz-webgl', 'webkit-3d'];\n let ctx;\n let getParam = function (str) {\n if (!str)\n return undefined;\n return ctx.getParameter(str);\n };\n // addLine\n let addLine = (section, name, value) => {\n let detected = this._detected;\n var info = detected.info[section] = detected.info[section] || {};\n name = name.replace(/[^\\w]+/g, '');\n name = name.substring(0, 1).toLowerCase() + name.substring(1);\n info[name] = value;\n };\n if (navigator.userAgent.indexOf('MSIE') >= 0) {\n try {\n ctx = window['WebGLHelper'].CreateGLContext(cvs, 'canvas');\n }\n catch (e) { }\n }\n else {\n for (var i = 0; i < contextNames.length; i++) {\n try {\n ctx = cvs.getContext(contextNames[i]);\n if (ctx) {\n addLine('main', 'Context Name', contextNames[i]);\n break;\n }\n }\n catch (e) { }\n }\n }\n this._detected.supported = !!ctx;\n addLine('main', 'Platform', navigator.platform);\n addLine('main', 'Agent', navigator.userAgent);\n if (ctx) {\n addLine('main', 'Vendor', getParam(ctx.VENDOR));\n addLine('main', 'Version', getParam(ctx.VERSION));\n addLine('main', 'Renderer', getParam(ctx.RENDERER));\n addLine('main', 'Shading Language Version', getParam(ctx.SHADING_LANGUAGE_VERSION));\n addLine('bits', 'Rgba Bits', getParam(ctx.RED_BITS) + ', ' + getParam(ctx.GREEN_BITS) + ', ' + getParam(ctx.BLUE_BITS) + ', ' + getParam(ctx.ALPHA_BITS));\n addLine('bits', 'Depth Bits', getParam(ctx.DEPTH_BITS));\n addLine('shader', 'Max Vertex Attribs', getParam(ctx.MAX_VERTEX_ATTRIBS));\n addLine('shader', 'Max Vertex Texture Image Units', getParam(ctx.MAX_VERTEX_TEXTURE_IMAGE_UNITS));\n addLine('shader', 'Max Varying Vectors', getParam(ctx.MAX_VARYING_VECTORS));\n addLine('shader', 'Max Uniform Vectors', getParam(ctx.MAX_VERTEX_UNIFORM_VECTORS));\n addLine('tex', 'Max Combined Texture Image Units', getParam(ctx.MAX_COMBINED_TEXTURE_IMAGE_UNITS));\n addLine('tex', 'Max Texture Size', getParam(ctx.MAX_TEXTURE_SIZE));\n addLine('tex', 'Max Cube Map Texture Size', getParam(ctx.MAX_CUBE_MAP_TEXTURE_SIZE));\n addLine('tex', 'Num. Compressed Texture Formats', getParam(ctx.COMPRESSED_TEXTURE_FORMATS));\n addLine('misc', 'Max Render Buffer Size', getParam(ctx.MAX_RENDERBUFFER_SIZE));\n addLine('misc', 'Max Viewport Dimensions', getParam(ctx.MAX_VIEWPORT_DIMS));\n addLine('misc', 'Aliased Line Width Range', getParam(ctx.ALIASED_LINE_WIDTH_RANGE));\n addLine('misc', 'Aliased Point Size Range', getParam(ctx.ALIASED_POINT_SIZE_RANGE));\n addLine('misc', 'Supported Extensions', ctx.getSupportedExtensions() || []);\n }\n }\n /** @readonly Gets the detected WebGL capabilities/limits, grouped by section (`main`, `bits`, `shader`, `tex`, `misc`). */\n get info() {\n return this._detected.info;\n }\n /** @readonly Gets whether a WebGL rendering context could be created on this browser/device. */\n get supported() {\n return this._detected.supported;\n }\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P } from '@pacem/pacem-core';\nimport { KnownShader, MaterialElement } from './material';\nimport { TAG_MIDDLE_NAME } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-material-basic>`: produces a {@link BasicMaterial} (unlit shading model): rendered at flat color, unaffected by scene lighting. */\nlet BasicMaterialElement = class BasicMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Basic);\n }\n};\nBasicMaterialElement = __decorate([\n CustomElement({ tagName: `${P}-${TAG_MIDDLE_NAME}-material-basic` })\n], BasicMaterialElement);\nexport { BasicMaterialElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { KnownShader, MaterialElement } from './material';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-material-lambert>`: produces a {@link LambertMaterial} (Lambertian shading model): matte, non-specular reflection of scene lighting, with no glossy highlights. */\nlet LambertMaterialElement = class LambertMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Lambert);\n }\n /** Builds the {@link LambertMaterial}, adding `emissiveColor`, `reflectivity` and `refractionRatio` to the base {@link Material}. */\n async createMaterial() {\n return Utils.extend({\n emissiveColor: this.emissiveColor || '#000',\n reflectivity: this.reflectivity ?? 0,\n refractionRatio: this.refractionRatio ?? 0\n }, await super.createMaterial());\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'emissiveColor':\n case 'reflectivity':\n case 'refractionRatio':\n this.updateMaterial();\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], LambertMaterialElement.prototype, \"emissiveColor\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], LambertMaterialElement.prototype, \"reflectivity\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], LambertMaterialElement.prototype, \"refractionRatio\", void 0);\nLambertMaterialElement = __decorate([\n CustomElement({ tagName: `${P}-${TAG_MIDDLE_NAME}-material-lambert` })\n], LambertMaterialElement);\nexport { LambertMaterialElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { KnownShader, MaterialElement } from './material';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-material-line>`: produces a {@link LineMaterial} for rendering {@link PacemLineElement} polylines (stroke width, joins, caps, dash pattern). */\nlet LineMaterialElement = class LineMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Line);\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'lineWidth':\n case 'lineJoin':\n case 'lineCap':\n case 'dashArray':\n this.updateMaterial();\n break;\n }\n }\n }\n /** Builds the {@link LineMaterial}, adding `lineWidth`, `lineJoin`, `lineCap` and `dashArray` to the base {@link Material}. */\n async createMaterial() {\n return Utils.extend({\n lineWidth: this.lineWidth ?? 1,\n lineJoin: this.lineJoin ?? 'round',\n lineCap: this.lineCap ?? 'round',\n dashArray: this.dashArray,\n }, await super.createMaterial());\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], LineMaterialElement.prototype, \"lineWidth\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], LineMaterialElement.prototype, \"lineJoin\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], LineMaterialElement.prototype, \"lineCap\", void 0);\n__decorate([\n Watch({\n emit: false, converter: {\n convert: (attr) => attr?.split(',').map(i => parseInt(i)).filter(i => !Number.isNaN(i)),\n convertBack: (prop) => prop?.join(',')\n }\n })\n], LineMaterialElement.prototype, \"dashArray\", void 0);\nLineMaterialElement = __decorate([\n CustomElement({ tagName: `${P}-${TAG_MIDDLE_NAME}-material-line` })\n], LineMaterialElement);\nexport { LineMaterialElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { KnownShader, MaterialElement } from './material';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-material-phong>`: produces a {@link PhongMaterial} (Phong shading model): diffuse reflection plus a specular highlight of adjustable shininess. */\nlet PhongMaterialElement = class PhongMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Phong);\n }\n /** Builds the {@link PhongMaterial}, adding the diffuse (`emissiveColor`, `reflectivity`, `refractionRatio`) and specular (`specularColor`, `shininess`, `flatShading`) properties to the base {@link Material}. */\n async createMaterial() {\n return Utils.extend({\n emissiveColor: this.emissiveColor || '#000',\n reflectivity: this.reflectivity ?? 0,\n refractionRatio: this.refractionRatio ?? 0,\n specularColor: this.specularColor || '#000',\n shininess: this.shininess ?? 0,\n flatShading: this.flatShading ?? true\n }, await super.createMaterial());\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'emissiveColor':\n case 'reflectivity':\n case 'refractionRatio':\n case 'specularColor':\n case 'shininess':\n case 'flatShading':\n this.updateMaterial();\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PhongMaterialElement.prototype, \"emissiveColor\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PhongMaterialElement.prototype, \"reflectivity\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PhongMaterialElement.prototype, \"refractionRatio\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PhongMaterialElement.prototype, \"specularColor\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PhongMaterialElement.prototype, \"shininess\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], PhongMaterialElement.prototype, \"flatShading\", void 0);\nPhongMaterialElement = __decorate([\n CustomElement({ tagName: `${P}-${TAG_MIDDLE_NAME}-material-phong` })\n], PhongMaterialElement);\nexport { PhongMaterialElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { KnownShader, MaterialElement } from './material';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-material-standard>`: produces a {@link StandardMaterial} using a physically-based (metalness/roughness) shading model. */\nlet StandardMaterialElement = class StandardMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Standard);\n }\n /** Builds the {@link StandardMaterial}, adding `emissiveColor`, `refractionRatio`, `metalness`, `roughness` and `flatShading` to the base {@link Material}. */\n async createMaterial() {\n return Utils.extend({\n emissiveColor: this.emissiveColor || '#000',\n refractionRatio: this.refractionRatio ?? 0,\n metalness: this.metalness ?? 0,\n roughness: this.roughness ?? 0,\n flatShading: this.flatShading ?? false\n }, await super.createMaterial());\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'emissiveColor':\n case 'roughness':\n case 'metalness':\n case 'refractionRatio':\n case 'flatShading':\n this.updateMaterial();\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], StandardMaterialElement.prototype, \"emissiveColor\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], StandardMaterialElement.prototype, \"refractionRatio\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], StandardMaterialElement.prototype, \"roughness\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], StandardMaterialElement.prototype, \"metalness\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], StandardMaterialElement.prototype, \"flatShading\", void 0);\nStandardMaterialElement = __decorate([\n CustomElement({ tagName: `${P}-${TAG_MIDDLE_NAME}-material-standard` })\n], StandardMaterialElement);\nexport { StandardMaterialElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { PacemEventTarget, Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\n//namespace Pacem.Components.Drawing3D {\n/**\n * Abstract base of the declarative geometric-primitive custom elements — {@link PacemBoxElement}, {@link PacemConeElement},\n * {@link PacemCylinderElement}, {@link PacemLineElement}, {@link PacemPlaneElement}, {@link PacemSphereElement},\n * {@link PacemTorusElement} and the {@link PolyhedronElement} family — that compute a {@link NodeGeometry} out of their\n * own shape parameters, ready to be assigned to a `Pacem3DMeshElement`'s `geometry` property.\n */\nexport class Pacem3DPrimitiveElement extends PacemEventTarget {\n viewActivatedCallback() {\n super.viewActivatedCallback();\n if (Utils.isNull(this.geometry)) {\n this.geometry = this.createDefaultGeometry();\n }\n }\n}\n__decorate([\n Watch({ converter: PropertyConverters.Json })\n], Pacem3DPrimitiveElement.prototype, \"geometry\", void 0);\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemBoxElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-box>`: computes the {@link MeshGeometry} of a rectangular cuboid (box). */\nlet PacemBoxElement = PacemBoxElement_1 = class PacemBoxElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a box with the given size and per-axis segment subdivisions (all default to `1`). */\n static createMeshGeometry(width, height, depth, widthSegments, heightSegments, depthSegments) {\n const w = width || 1, h = height || 1, d = depth || 1, sw = widthSegments || 1, sh = heightSegments || 1, sd = depthSegments || 1;\n const positions = [];\n const uv = [];\n const indices = [];\n // populationg positions\n for (var j = 0; j <= sh; j++) {\n var y = h / 2.0 - h * (1.0 * j) / (1.0 * sh); // ??\n for (var k = 0; k <= sd; k++) {\n var z = -d / 2.0 + d * (1.0 * k) / (1.0 * sd);\n for (var i = 0; i <= sw; i++) {\n var x = -w / 2.0 + w * (1.0 * i) / (1.0 * sw);\n // add only surface nodes\n if (i == 0 || i == sw || k == 0 || k == sd || j == 0 || j == sh)\n positions.push({ x, y, z });\n }\n }\n }\n var getPosIndex = function (x, y, z) {\n var epsilon = .00001;\n for (var i = 0; i < positions.length; i++) {\n var pt = positions[i];\n if (Math.abs(pt.x - x) < epsilon && Math.abs(pt.y - y) < epsilon && Math.abs(pt.z - z) < epsilon)\n return i;\n }\n return -1;\n };\n var appendFace = function (c_1, c_2, c_3, c_4, u, v, u_next, v_next) {\n indices.push(c_1);\n indices.push(c_2);\n indices.push(c_3);\n indices.push(c_1);\n indices.push(c_3);\n indices.push(c_4);\n uv.push({ x: u, y: v_next });\n uv.push({ x: u_next, y: v_next });\n uv.push({ x: u_next, y: v });\n uv.push({ x: u, y: v_next });\n uv.push({ x: u_next, y: v });\n uv.push({ x: u, y: v });\n };\n // top face (1)\n for (var k = 0; k < sd; k++) {\n var y = h / 2.0;\n var z = -d / 2.0 + d * (1.0 * k) / (1.0 * sd);\n var z_next = -d / 2.0 + d * (1.0 * (k + 1)) / (1.0 * sd);\n for (var i = 0; i < sw; i++) {\n var x = -w / 2.0 + (1.0 * i) * w / (1.0 * sw);\n var x_next = -w / 2.0 + (1.0 * (i + 1)) * w / (1.0 * sw);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y, z_next);\n var c_2 = getPosIndex(x_next, y, z_next);\n var c_3 = getPosIndex(x_next, y, z);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (1.0 * (i + 1)) / (1.0 * sw);\n var u = (1.0 * i) / (1.0 * sw);\n var v_next = 1.0 - (1.0 * (k + 1)) / (1.0 * sd);\n var v = 1.0 - (1.0 * k) / (1.0 * sd);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n // back face (2)\n for (var j = 0; j < sh; j++) {\n var y = h / 2.0 - (1.0 * j) * h / (1.0 * sh);\n var y_next = h / 2.0 - (j + 1.0) * h / (1.0 * sh);\n var z = -d / 2.0;\n for (var i = 0; i < sw; i++) {\n var x = w / 2.0 - 1.0 * i * w / (1.0 * sw);\n var x_next = w / 2.0 - (i + 1.0) * w / (1.0 * sw);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y_next, z);\n var c_2 = getPosIndex(x_next, y_next, z);\n var c_3 = getPosIndex(x_next, y, z);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (i + 1.0) / (1.0 * sw);\n var u = (1.0 * i) / (1.0 * sw);\n var v_next = 1.0 - (j + 1.0) / (1.0 * sh);\n var v = 1.0 - 1.0 * j / (1.0 * sh);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n // left face (3)\n for (var j = 0; j < sh; j++) {\n var y = h / 2.0 - (1.0 * j) * h / (1.0 * sh);\n var y_next = h / 2.0 - (j + 1.0) * h / (1.0 * sh);\n var x = -w / 2.0;\n for (var k = 0; k < sd; k++) {\n var z = -d / 2.0 + k * d / (1.0 * sd);\n var z_next = -d / 2.0 + (k + 1.0) * d / (1.0 * sd);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y_next, z);\n var c_2 = getPosIndex(x, y_next, z_next);\n var c_3 = getPosIndex(x, y, z_next);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (k + 1.0) / (1.0 * sd);\n var u = (1.0 * k) / (1.0 * sd);\n var v_next = 1.0 - (j + 1.0) / (1.0 * sh);\n var v = 1.0 - j / (1.0 * sh);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n // front face (4)\n for (var j = 0; j < sh; j++) {\n var y = h / 2.0 - j * h / (1.0 * sh);\n var y_next = h / 2.0 - (j + 1.0) * h / (1.0 * sh);\n var z = d / 2.0;\n for (var i = 0; i < sw; i++) {\n var x = -w / 2.0 + i * w / (1.0 * sw);\n var x_next = -w / 2.0 + (i + 1.0) * w / (1.0 * sw);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y_next, z);\n var c_2 = getPosIndex(x_next, y_next, z);\n var c_3 = getPosIndex(x_next, y, z);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (i + 1.0) / (1.0 * sw);\n var u = (1.0 * i) / (1.0 * sw);\n var v_next = 1.0 - (j + 1.0) / (1.0 * sh);\n var v = 1.0 - (1.0 * j) / (1.0 * sh);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n // right face (5)\n for (var j = 0; j < sh; j++) {\n var y = h / 2.0 - j * h / (1.0 * sh);\n var y_next = h / 2.0 - (j + 1.0) * h / (1.0 * sh);\n var x = w / 2.0;\n for (var k = 0; k < sd; k++) {\n var z = d / 2.0 - k * d / (1.0 * sd);\n var z_next = d / 2.0 - (k + 1.0) * d / (1.0 * sd);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y_next, z);\n var c_2 = getPosIndex(x, y_next, z_next);\n var c_3 = getPosIndex(x, y, z_next);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (k + 1.0) / (1.0 * sd);\n var u = (1.0 * k) / (1.0 * sd);\n var v_next = 1.0 - (j + 1.0) / (1.0 * sh);\n var v = 1.0 - (1.0 * j) / (1.0 * sh);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n // bottom face (6)\n for (var k = 0; k < sd; k++) {\n var y = -h / 2.0;\n var z = d / 2.0 - d * k / (1.0 * sd);\n var z_next = d / 2.0 - d * (k + 1.0) / (1.0 * sd);\n for (var i = 0; i < sw; i++) {\n var x = -w / 2.0 + i * w / (1.0 * sw);\n var x_next = -w / 2.0 + (i + 1.0) * w / (1.0 * sw);\n // coord-indices + tex-coords\n var c_1 = getPosIndex(x, y, z_next);\n var c_2 = getPosIndex(x_next, y, z_next);\n var c_3 = getPosIndex(x_next, y, z);\n var c_4 = getPosIndex(x, y, z);\n var u_next = (i + 1.0) / (1.0 * sw);\n var u = (1.0 * i) / (1.0 * sw);\n var v_next = 1.0 - (k + 1.0) / (1.0 * sd);\n var v = 1.0 - (1.0 * k) / (1.0 * sd);\n appendFace(c_1, c_2, c_3, c_4, u, v, u_next, v_next);\n }\n }\n const geom = new MeshGeometry(positions, indices, uv);\n geom.key = `box_${width}x${height}x${depth}_w${widthSegments}_h${heightSegments}_d${depthSegments}`;\n computeSharpVertexNormals(geom);\n const center = { x: 0, y: 0, z: 0 };\n const w2 = width / 2, h2 = height / 2, d2 = depth / 2;\n //\n geom.barycenter = center;\n geom.boundingBox = { maxX: w2, maxY: h2, maxZ: d2, minX: -w2, minY: -h2, minZ: -d2 };\n geom.boundingSphere = { center, radius: Math.sqrt(Math.pow(w2, 2) + Math.pow(h2, 2) + Math.pow(d2, 2)) };\n //\n return geom;\n }\n /** Computes the box geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemBoxElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'width':\n case 'height':\n case 'depth':\n case 'widthSegments':\n case 'heightSegments':\n case 'depthSegments':\n this.geometry = PacemBoxElement_1.createMeshGeometry(this.width, this.height, this.depth, this.widthSegments, this.heightSegments, this.depthSegments);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"width\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"height\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"depth\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"widthSegments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"heightSegments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemBoxElement.prototype, \"depthSegments\", void 0);\nPacemBoxElement = PacemBoxElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-box' })\n], PacemBoxElement);\nexport { PacemBoxElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemConeElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME, DEG2RAD } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-cone>`: computes the {@link MeshGeometry} of a cone (a circular base tapering to an apex point). */\nlet PacemConeElement = PacemConeElement_1 = class PacemConeElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a cone with the given base radius, height, side count, lateral-surface segments and base-cap segments. */\n static createMeshGeometry(radius = 1, height = 1, sides = 18, heightSegments = 5, capSegments = 1) {\n const r = radius;\n const nodes = [], uv = [], indices = [];\n const theta = DEG2RAD * (360.0 / sides);\n const slope = r / height;\n const fY = height / heightSegments;\n const fU = 1.0 / sides;\n // top vertex\n nodes.push({ x: .0, y: height, z: .0 });\n // ======================================\n // side loops\n for (let j = 1; j <= heightSegments; j++) {\n const y = height - fY * j;\n const v = y / height;\n const rj = (height - y) * slope;\n // for loops other than tip loop\n const y_prev = y + fY;\n const v_prev = y_prev / height;\n for (let i = 0; i < sides; i++) {\n const angle = theta * i;\n const x = Math.cos(angle) * rj, z = -Math.sin(angle) * rj;\n nodes.push({ x, y, z });\n const index = 1 + sides * (j - 1) + i;\n const index_prev = i == 0 ? index + sides - 1 : index - 1;\n const u = i * fU;\n const u_prev = i == 0 ? (1 - fU) : fU * (i - 1);\n if (j == 1) {\n // tip loop\n // 1 triangle\n indices.push(0, index_prev, index);\n uv.push({ x: u, y: 1 }, { x: u_prev, y: v }, { x: u, y: v });\n continue;\n }\n const prevLoopIndex = 1 + sides * (j - 2) + i;\n const prevLoopIndex_prev = i == 0 ? prevLoopIndex + sides - 1 : prevLoopIndex - 1;\n // quad\n const A = prevLoopIndex_prev;\n const B = index_prev;\n const C = index;\n const D = prevLoopIndex;\n indices.push(C, A, B);\n indices.push(C, D, A);\n const uvA = { x: u_prev, y: v_prev };\n const uvB = { x: u_prev, y: v };\n const uvC = { x: u, y: v };\n const uvD = { x: u, y: v_prev };\n uv.push(uvC, uvA, uvB);\n uv.push(uvC, uvD, uvA);\n }\n }\n // bottom cap\n const startCapIndex = 1 + (heightSegments - 1) * sides;\n // bottom vertex (pivot)\n nodes.push({ x: .0, y: 0, z: .0 });\n const bottomIndex = startCapIndex + sides;\n // ======================================\n for (let j = 1; j <= capSegments; j++) {\n const rj_norm = j / capSegments;\n const rj = radius * rj_norm;\n // for loops other than bottom vertex loop\n const rj_norm_prev = (j - 1) / capSegments;\n for (let i = 0; i < sides; i++) {\n const angle = theta * i, cos = Math.cos(angle), sin = Math.sin(angle);\n const angle_prev = angle - theta, cos_prev = Math.cos(angle_prev), sin_prev = Math.sin(angle_prev);\n const u = .5 * (1 + cos * rj_norm), v = .5 * (1 + sin * rj_norm);\n const u_prev = .5 * (1 + cos_prev * rj_norm), v_prev = .5 * (1 + sin_prev * rj_norm);\n let index, index_prev;\n if (j != capSegments) {\n const x = Math.cos(angle) * rj, z = -Math.sin(angle) * rj;\n nodes.push({ x, y: 0, z });\n index = bottomIndex + 1 + (j - 1) * sides + i;\n index_prev = i == 0 ? index + sides - 1 : index - 1;\n }\n else {\n index = startCapIndex + i;\n index_prev = i == 0 ? startCapIndex + sides - 1 : index - 1;\n }\n if (j == 1) {\n // bottom vertex loop\n // 1 triangle\n indices.push(bottomIndex, index, index_prev);\n uv.push({ x: .5, y: .5 }, { x: u, y: v }, { x: u_prev, y: v_prev });\n continue;\n }\n const prevLoopU = .5 * (1 + cos * rj_norm_prev), prevLoopV = .5 * (1 + sin * rj_norm_prev);\n const prevLoopU_prev = .5 * (1 + cos_prev * rj_norm_prev), prevLoopV_prev = .5 * (1 + sin_prev * rj_norm_prev);\n const prevLoopIndex = bottomIndex + 1 + (j - 2) * sides + i;\n const prevLoopIndex_prev = i == 0 ? prevLoopIndex + sides - 1 : prevLoopIndex - 1;\n // quad\n const A = prevLoopIndex_prev;\n const B = index_prev;\n const C = index;\n const D = prevLoopIndex;\n indices.push(A, D, B);\n indices.push(B, D, C);\n const uvA = { x: prevLoopU_prev, y: prevLoopV_prev };\n const uvB = { x: u_prev, y: v_prev };\n const uvC = { x: u, y: v };\n const uvD = { x: prevLoopU, y: prevLoopV };\n uv.push(uvA, uvD, uvB);\n uv.push(uvB, uvD, uvC);\n }\n }\n // put the whole thing together\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `cone_${radius}x${height}_s${sides}_h${heightSegments}_c${capSegments}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n return geom;\n }\n /** Computes the cone geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemConeElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'radius':\n case 'height':\n case 'sides':\n case 'heightSegments':\n case 'capSegments':\n this.geometry = PacemConeElement_1.createMeshGeometry(this.radius, this.height, this.sides, this.heightSegments, this.capSegments);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemConeElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemConeElement.prototype, \"height\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemConeElement.prototype, \"sides\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemConeElement.prototype, \"heightSegments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemConeElement.prototype, \"capSegments\", void 0);\nPacemConeElement = PacemConeElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-cone' })\n], PacemConeElement);\nexport { PacemConeElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemCylinderElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME, DEG2RAD } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-cylinder>`: computes the {@link MeshGeometry} of a cylinder (two parallel circular caps joined by a straight lateral surface). */\nlet PacemCylinderElement = PacemCylinderElement_1 = class PacemCylinderElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a cylinder with the given radius, height, side count, lateral-surface segments and cap segments. */\n static createMeshGeometry(radius = 1, height = 1, sides = 18, heightSegments = 5, capSegments = 1) {\n const r = radius;\n const nodes = [], uv = [], indices = [];\n const theta = DEG2RAD * (360.0 / sides);\n // top & bottom vertices (pivot @(0,0,0))\n nodes.push({ x: .0, y: height, z: .0 });\n nodes.push({ x: .0, y: .0, z: .0 });\n // ======================================\n // cap loops\n const capRadius = r / capSegments;\n for (let j = 1; j <= capSegments; j++) {\n //int j_prev = j - 1;\n var rho = capRadius * j;\n for (var i = 0; i < sides; i++) {\n const startIndex = 2 + 2 * sides * (j - 1);\n const A = i == 0 ? startIndex + 2 * (sides - 1) : startIndex + 2 * (i - 1);\n const B = startIndex + 2 * i;\n const u = Math.cos(theta * i);\n const v = -Math.sin(theta * i);\n const u_prev = Math.cos(theta * (i - 1.0));\n const v_prev = -Math.sin(theta * (i - 1.0));\n const x = rho * u;\n const z = rho * v;\n const topPoint = { x, y: height, z };\n const bottomPoint = { x, y: .0, z };\n //\n nodes.push(topPoint);\n nodes.push(bottomPoint);\n // coordinates & texture\n const factor = .5 * rho / r;\n const uB = u * factor;\n const vB = v * factor;\n const uA = u_prev * factor;\n const vA = v_prev * factor;\n if (j == 1) {\n const faceIndicesTop = [0 /* top vertex*/, A, B];\n const faceIndicesBottom = [1 /* bottom vertex*/, B + 1, A + 1];\n // texture\n const uvTop = [\n { x: .5, y: .5 },\n { x: .5 + uA, y: .5 - vA },\n { x: 0.5 + uB, y: .5 - vB }\n ];\n const uvBottom = [\n { x: .5, y: .5 },\n { x: 0.5 + uB, y: .5 + vB },\n { x: .5 + uA, y: .5 + vA }\n ];\n // faces\n indices.push(...faceIndicesTop);\n indices.push(...faceIndicesBottom);\n // texture\n for (let i = 0; i < uvTop.length; i++)\n uv.push(uvTop[i]);\n for (let i = 0; i < uvBottom.length; i++)\n uv.push(uvBottom[i]);\n }\n else {\n const startIndexPrevLoop = 2 + 2 * sides * (j - 2);\n const D = i == 0 ? startIndexPrevLoop + 2 * (sides - 1) : startIndexPrevLoop + 2 * (i - 1);\n const C = startIndexPrevLoop + 2 * i;\n // coordinates & texture\n const factor0 = .5 * ((j - 1.0) / capSegments);\n const uC = u * factor0;\n const vC = v * factor0;\n const uD = u_prev * factor0;\n const vD = v_prev * factor0;\n const uvA = { x: .5 + uA, y: .5 - vA };\n const uvB = { x: .5 + uB, y: .5 - vB };\n const uvC = { x: .5 + uC, y: .5 - vC };\n const uvD = { x: .5 + uD, y: .5 - vD };\n const uvA2 = { x: .5 + uA, y: .5 + vA };\n const uvB2 = { x: .5 + uB, y: .5 + vB };\n const uvC2 = { x: .5 + uC, y: .5 + vC };\n const uvD2 = { x: .5 + uD, y: .5 + vD };\n // top\n indices.push(A);\n indices.push(B);\n indices.push(D);\n indices.push(D);\n indices.push(B);\n indices.push(C);\n // bottom\n indices.push(C + 1);\n indices.push(B + 1);\n indices.push(A + 1);\n indices.push(C + 1);\n indices.push(A + 1);\n indices.push(D + 1);\n // textures top\n uv.push(uvA);\n uv.push(uvB);\n uv.push(uvD);\n uv.push(uvD);\n uv.push(uvB);\n uv.push(uvC);\n // texture bottom\n uv.push(uvC2);\n uv.push(uvB2);\n uv.push(uvA2);\n uv.push(uvC2);\n uv.push(uvA2);\n uv.push(uvD2);\n }\n }\n }\n // ======================================\n // side loops\n const sideStartIndex = 2 + 2 * sides * (capSegments);\n const capLastIndex = 2 + 2 * sides * (capSegments - 1);\n const fU = 1.0 / sides;\n const fV = 1.0 / heightSegments;\n for (let j = 1; j <= heightSegments; j++) {\n for (let i = 0; i < sides; i++) {\n if (j != heightSegments) {\n var x = r * Math.cos(theta * i);\n var z = -r * Math.sin(theta * i);\n var y = (height * j) / heightSegments;\n //\n nodes.push({ x, y, z });\n }\n const i_prev = i == 0 ? sides - 1 : i - 1;\n const A = j == 1 ? capLastIndex + 2 * i_prev + 1 : sideStartIndex + sides * (j - 2) + i_prev;\n const B = j == 1 ? capLastIndex + 2 * i + 1 : sideStartIndex + sides * (j - 2) + i;\n const C = j == heightSegments ? capLastIndex + 2 * i : sideStartIndex + sides * (j - 1) + i;\n const D = j == heightSegments ? capLastIndex + 2 * i_prev : sideStartIndex + sides * (j - 1) + i_prev;\n const u_prev = i_prev * fU;\n const v_prev = (j - 1) * fV;\n const u = i == 0 ? 1.0 : i * fU;\n const v = j * fV;\n const uvA = { x: u_prev, y: v_prev };\n const uvB = { x: u, y: v_prev };\n const uvC = { x: u, y: v };\n const uvD = { x: u_prev, y: v };\n indices.push(A);\n indices.push(B);\n indices.push(C);\n indices.push(A);\n indices.push(C);\n indices.push(D);\n //\n uv.push(uvA);\n uv.push(uvB);\n uv.push(uvC);\n uv.push(uvA);\n uv.push(uvC);\n uv.push(uvD);\n }\n }\n // put the whole thing together\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `cylinder_${radius}x${height}_s${sides}_h${heightSegments}_c${capSegments}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n return geom;\n }\n /** Computes the cylinder geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemCylinderElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'radius':\n case 'height':\n case 'sides':\n case 'heightSegments':\n case 'capSegments':\n this.geometry = PacemCylinderElement_1.createMeshGeometry(this.radius, this.height, this.sides, this.heightSegments, this.capSegments);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCylinderElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCylinderElement.prototype, \"height\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCylinderElement.prototype, \"sides\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCylinderElement.prototype, \"heightSegments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCylinderElement.prototype, \"capSegments\", void 0);\nPacemCylinderElement = PacemCylinderElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-cylinder' })\n], PacemCylinderElement);\nexport { PacemCylinderElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemLineElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { LineGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME } from '../constants';\n//namespace Pacem.Components.Drawing3D {\nconst DEFAULT_LINE = [{ x: 0, y: 0, z: 0 }, { x: 0, y: 1, z: 0 }];\n/** `<pacem-3d-primitive-line>`: computes the {@link LineGeometry} of a polyline connecting a sequence of points. */\nlet PacemLineElement = PacemLineElement_1 = class PacemLineElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link LineGeometry} out of the given vertices (a single segment from `(0,0,0)` to `(0,1,0)` when omitted). */\n static createLineGeometry(positions) {\n return new LineGeometry(positions || DEFAULT_LINE);\n }\n /** Computes the line geometry from the default (unset) vertex positions. */\n createDefaultGeometry() {\n return PacemLineElement_1.createLineGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'positions':\n this.geometry = PacemLineElement_1.createLineGeometry(val);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], PacemLineElement.prototype, \"positions\", void 0);\nPacemLineElement = PacemLineElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-line' })\n], PacemLineElement);\nexport { PacemLineElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemPlaneElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-plane>`: computes the {@link MeshGeometry} of a flat rectangular surface lying on the xz plane. */\nlet PacemPlaneElement = PacemPlaneElement_1 = class PacemPlaneElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a flat rectangle with the given width, length and per-axis segment subdivisions (defaulting to `1`x`1`, 4 segments each way). */\n static createMeshGeometry(width, length, widthSegments, lengthSegments) {\n width ||= 1.0;\n length ||= 1.0;\n widthSegments ||= 4;\n lengthSegments ||= 4;\n const halfWidth = width * .5, halfLength = length * .5;\n const nodes = [];\n const uv = [];\n const indices = [];\n const normals = [], normal = Geometry.LinearAlgebra.Vector3D.from(0, 0, 1);\n for (let j = 0; j <= lengthSegments; j++) {\n for (let i = 0; i <= widthSegments; i++) {\n const x = -halfWidth + i * width / (1.0 * widthSegments);\n const y = .0;\n const z = -halfLength + j * length / (1.0 * lengthSegments);\n nodes.push({ x, y, z });\n if (j < lengthSegments && i < widthSegments) {\n const rowPoints = widthSegments + 1;\n // const colPoints = lengthSegments + 1;\n const u_next = (i + 1.0) / (1.0 * widthSegments);\n const u = (1.0 * i) / (1.0 * widthSegments);\n const v_next = 1.0 - (j + 1.0) / (1.0 * lengthSegments);\n const v = 1.0 - (1.0 * j) / (1.0 * lengthSegments);\n indices.push((j + 1) * rowPoints + i);\n indices.push((j + 1) * rowPoints + i + 1);\n indices.push(j * rowPoints + i + 1);\n indices.push((j + 1) * rowPoints + i);\n indices.push(j * rowPoints + i + 1);\n indices.push(j * rowPoints + i);\n uv.push({ x: u, y: v_next });\n uv.push({ x: u_next, y: v_next });\n uv.push({ x: u_next, y: v });\n uv.push({ x: u, y: v_next });\n uv.push({ x: u_next, y: v });\n uv.push({ x: u, y: v });\n normals.push(normal, normal, normal, normal, normal, normal);\n }\n }\n }\n const geom = new MeshGeometry(nodes, indices, uv, normals);\n geom.key = `plane_${width}x${length}_w${widthSegments}_l${lengthSegments}`;\n // TODO: barycenter, boundingBox, boundingSphere\n return geom;\n }\n /** Computes the plane geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemPlaneElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'width':\n case 'length':\n case 'widthSegments':\n case 'lengthSegments':\n this.geometry = PacemPlaneElement_1.createMeshGeometry(this.width, this.length, this.widthSegments, this.lengthSegments);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPlaneElement.prototype, \"width\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPlaneElement.prototype, \"length\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPlaneElement.prototype, \"widthSegments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPlaneElement.prototype, \"lengthSegments\", void 0);\nPacemPlaneElement = PacemPlaneElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-plane' })\n], PacemPlaneElement);\nexport { PacemPlaneElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemTetrahedronElement_1, PacemOctahedronElement_1, PacemHexahedronElement_1, PacemIcosahedronElement_1, PacemDodecahedronElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { PacemBoxElement } from './box';\nimport { TAG_MIDDLE_NAME } from '../constants';\n//namespace Pacem.Components.Drawing3D {\nconst _utils = {\n parseFloats: function (input) {\n const pattern = /([\\d.-]+)/i;\n var match = pattern.exec(input);\n const ret = [];\n while (match != null) {\n const g = match[0];\n const j = parseFloat(g);\n ret.push(j);\n input = input.replace(g, '');\n match = pattern.exec(input);\n }\n return ret;\n }\n};\nconst Point3D = Geometry.LinearAlgebra.Vector3D;\n/**\n * Abstract base of the regular-polyhedron (Platonic solid) primitive custom elements — {@link PacemTetrahedronElement},\n * {@link PacemOctahedronElement}, {@link PacemHexahedronElement}, {@link PacemIcosahedronElement} and\n * {@link PacemDodecahedronElement} — each computing the {@link MeshGeometry} of a solid inscribed in a sphere of the\n * given {@link radius}.\n */\nexport class PolyhedronElement extends Pacem3DPrimitiveElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'radius') {\n this._assignMeshGeometry(val);\n }\n }\n _assignMeshGeometry(radius) {\n this.geometry = this.createMeshGeometry(radius > .0 ? radius : 1.0);\n }\n /** Computes the polyhedron geometry using a radius of `1` when {@link radius} hasn't been explicitly set. */\n createDefaultGeometry() {\n return this.createMeshGeometry(1.0);\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PolyhedronElement.prototype, \"radius\", void 0);\n// #region Tetrahedron\n/** `<pacem-3d-primitive-tetrahedron>`: computes the {@link MeshGeometry} of a regular tetrahedron (a Platonic solid with 4 triangular faces). */\nlet PacemTetrahedronElement = PacemTetrahedronElement_1 = class PacemTetrahedronElement extends PolyhedronElement {\n /** Builds the {@link MeshGeometry} of a tetrahedron inscribed in a sphere of the given radius (defaults to `1`). */\n static createMeshGeometry(radius) {\n radius ||= 1.0;\n const nodesCoordsString = \"0 0.5774 -0.8165, 0 0.5774 0.8165, 0.8165 -0.5774 0, -0.8165 -0.5774 0\";\n const nodesToParse = nodesCoordsString.split(',');\n const nodes = [];\n for (let i = 0; i < nodesToParse.length; i++) {\n const nodeToParse = nodesToParse[i];\n const pt3D = _utils.parseFloats(nodeToParse);\n nodes.push({ x: pt3D[0] * radius, y: pt3D[1] * radius, z: pt3D[2] * radius });\n }\n const indices = [1, 2, 0, 2, 3, 0, 3, 1, 0, 3, 2, 1];\n const textureCoordsString = \"0.5 0.9995, 0.5 0.0004995, 0.0004995 0.5, 0.9995 0.5, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995\";\n const pointsToParse = textureCoordsString.split(',');\n const texIndices = [4, 5, 6, 7, 8, 9, 10, 11, 0, 3, 2, 1];\n const uv = [];\n for (let i = 0; i < texIndices.length; i++) {\n const ndx = texIndices[i];\n const uvCoords = _utils.parseFloats(pointsToParse[ndx]);\n uv.push({ x: uvCoords[0], y: uvCoords[1] });\n }\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `tetrahedron_${radius}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n geom.boundingSphere = { center: Point3D.zero(), radius };\n return geom;\n }\n createMeshGeometry(radius = this.radius) {\n return PacemTetrahedronElement_1.createMeshGeometry(radius);\n }\n};\nPacemTetrahedronElement = PacemTetrahedronElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-tetrahedron' })\n], PacemTetrahedronElement);\nexport { PacemTetrahedronElement };\n// #endregion\n// #region Octahedron\n/** `<pacem-3d-primitive-octahedron>`: computes the {@link MeshGeometry} of a regular octahedron (a Platonic solid with 8 triangular faces). */\nlet PacemOctahedronElement = PacemOctahedronElement_1 = class PacemOctahedronElement extends PolyhedronElement {\n /** Builds the {@link MeshGeometry} of an octahedron inscribed in a sphere of the given radius (defaults to `1`). */\n static createMeshGeometry(radius) {\n radius ||= 1.0;\n // -------------------------------------------------------------------------------------------------\n const nodesCoordsString = \"0 0.7071 -0.7071, 0 0.7071 0.7071, 1 0 0, 0 -0.7071 -0.7071, -1 0 0, 0 -0.7071 0.7071\";\n const indices = [1, 2, 0, 2, 3, 0, 3, 4, 0, 4, 1, 0, 4, 5, 1, 5, 2, 1, 2, 5, 3, 4, 3, 5];\n const textureCoordsString = \"0.5 0.9995, 0.5 0.9995, 0.0004995 0.5, 0.5 0.9995, 0.9995 0.5, 0.5 0.0004995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995, 0.5 0.9995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.9995, 0.0004995 0.5, 0.5 0.0004995, 0.0004995 0.5, 0.5 0.0004995, 0.5 0.9995, 0.5 0.0004995, 0.9995 0.5, 0.5 0.0004995, 0.5 0.9995\";\n const texIndices = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 19, 20, 21, 1, 2, 22, 23, 4, 3, 5];\n // -------------------------------------------------------------------------------------------------\n const nodesToParse = nodesCoordsString.split(',');\n const nodes = [];\n for (let i = 0; i < nodesToParse.length; i++) {\n const nodeToParse = nodesToParse[i];\n const pt3D = _utils.parseFloats(nodeToParse);\n nodes.push({ x: pt3D[0] * radius, y: pt3D[1] * radius, z: pt3D[2] * radius });\n }\n const pointsToParse = textureCoordsString.split(',');\n const uv = [];\n for (let i = 0; i < texIndices.length; i++) {\n const ndx = texIndices[i];\n const uvCoords = _utils.parseFloats(pointsToParse[ndx]);\n uv.push({ x: uvCoords[0], y: uvCoords[1] });\n }\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `octahedron_${radius}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n geom.boundingSphere = { center: Point3D.zero(), radius };\n return geom;\n }\n createMeshGeometry(radius = this.radius) {\n return PacemOctahedronElement_1.createMeshGeometry(radius);\n }\n};\nPacemOctahedronElement = PacemOctahedronElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-octahedron' })\n], PacemOctahedronElement);\nexport { PacemOctahedronElement };\n// #endregion\n// #region Hexahedron\n/** `<pacem-3d-primitive-hexahedron>`: computes the {@link MeshGeometry} of a regular hexahedron (a Platonic solid with 6 square faces, i.e. a cube). */\nlet PacemHexahedronElement = PacemHexahedronElement_1 = class PacemHexahedronElement extends PolyhedronElement {\n /** Builds the {@link MeshGeometry} of a cube inscribed in a sphere of the given radius (defaults to `1`), as an equal-sided {@link PacemBoxElement}. */\n static createMeshGeometry(radius) {\n radius ||= 1.0;\n const inv_sqrt3 = 1.0 / Math.sqrt(3.0);\n const w = 2.0 * radius * inv_sqrt3;\n const geom = PacemBoxElement.createMeshGeometry(w, w, w);\n geom.key = `hexahedron_${radius}`;\n return geom;\n }\n createMeshGeometry(radius = this.radius) {\n return PacemHexahedronElement_1.createMeshGeometry(radius);\n }\n};\nPacemHexahedronElement = PacemHexahedronElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-hexahedron' })\n], PacemHexahedronElement);\nexport { PacemHexahedronElement };\n// #endregion\n// #region Icosahedron\n/** `<pacem-3d-primitive-icosahedron>`: computes the {@link MeshGeometry} of a regular icosahedron (a Platonic solid with 20 triangular faces). */\nlet PacemIcosahedronElement = PacemIcosahedronElement_1 = class PacemIcosahedronElement extends PolyhedronElement {\n /** Builds the {@link MeshGeometry} of an icosahedron inscribed in a sphere of the given radius (defaults to `1`). */\n static createMeshGeometry(radius) {\n radius ||= 1.0;\n const nodesCoordsString = \"0 0.850651 -0.525731, 0 0.850651 0.525731, 0.850651 0.525731 0, 0.525731 0 -0.850651, -0.525731 0 -0.850651, -0.850651 0.525731 0, -0.525731 0 0.850651, 0.525731 0 0.850651, 0.850651 -0.525731 0, 0 -0.850651 0.525731, 0 -0.850651 -0.525731, -0.850651 -0.525731 0\";\n const indices = [1, 2, 0, 2, 3, 0, 3, 4, 0, 4, 5, 0, 5, 1, 0,\n 5, 6, 1, 6, 7, 1, 7, 2, 1, 2, 8, 3,\n 2, 7, 8, 6, 9, 7, 9, 8, 7, 8, 10, 3,\n 8, 9, 10, 6, 11, 9, 11, 10, 9, 10, 4, 3,\n 10, 11, 4, 6, 5, 11, 5, 4, 11];\n const textureCoordsString = \"0.5 0.808708, 0.5 0.999501, 0.5 0.808708, 0.191292 0.5, \" +\n \"0.000499547 0.5, 0.5 0.808708, 0.9995 0.5, 0.808708 0.5,\" +\n \"0.000499487 0.5, 0.5 0.191292, 0.5 0.000499487, 0.5 0.191292,\" +\n \"0.5 0.191292, 0.999501 0.5, 0.5 0.808708, 0.5 0.808708,\" +\n \"0.9995 0.5, 0.808708 0.999501, 0.191292 0.5, 0.808708 0.5,\" +\n \"0.5 0.999501, 0.808708 0.5, 0.999501 0.808708, 0.5 0.999501,\" +\n \"0.000499487 0.5, 0.5 0.191292, 0.5 0.808708, 0.9995 0.5,\" +\n \"0.808708 0.999501, 0.191292 0.5, 0.808708 0.5, 0.5 0.999501,\" +\n \"0.808708 0.5, 0.999501 0.808708, 0.5 0.808708, 0.5 0.191292,\" +\n \"0.9995 0.5, 0.000499547 0.5, 0.5 0.191292, 0.191292 0.5,\" +\n \"0.5 0.000499487, 0.808708 0.5, 0.5 0.000499487, 0.999501 0.191292,\" +\n \"0.5 0.191292, 0.808708 0.000499487, 0.9995 0.5, 0.5 0.191292,\" +\n \"0.5 0.808708, 0.9995 0.5, 0.5 0.191292, 0.808708 0.000499487,\" +\n \"0.999501 0.5, 0.5 0.808708, 0.5 0.000499487, 0.808708 0.5,\" +\n \"0.999501 0.191292, 0.808708 0.5, 0.5 0.808708, 0.5 0.191292\";\n const texIndices = [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\n 24, 25, 0, 26, 27, 28, 29, 30, 31, 32, 33, 1,\n 34, 35, 36, 2, 37, 38, 39, 40, 41, 42, 43, 7,\n 44, 45, 46, 8, 47, 48, 49, 50, 51, 52, 53, 9,\n 54, 55, 3, 10, 56, 57, 6, 58, 59, 5, 4, 11];\n // -------------------------------------------------------------------------------------------------\n const nodesToParse = nodesCoordsString.split(',');\n const nodes = [];\n for (let i = 0; i < nodesToParse.length; i++) {\n const nodeToParse = nodesToParse[i];\n const pt3D = _utils.parseFloats(nodeToParse);\n nodes.push({ x: pt3D[0] * radius, y: pt3D[1] * radius, z: pt3D[2] * radius });\n }\n const pointsToParse = textureCoordsString.split(',');\n const uv = [];\n for (let i = 0; i < texIndices.length; i++) {\n const ndx = texIndices[i];\n const uvCoords = _utils.parseFloats(pointsToParse[ndx]);\n uv.push({ x: uvCoords[0], y: uvCoords[1] });\n }\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `icosahedron_${radius}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n geom.boundingSphere = { center: Point3D.zero(), radius };\n return geom;\n }\n createMeshGeometry(radius = this.radius) {\n return PacemIcosahedronElement_1.createMeshGeometry(radius);\n }\n};\nPacemIcosahedronElement = PacemIcosahedronElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-icosahedron' })\n], PacemIcosahedronElement);\nexport { PacemIcosahedronElement };\n// #endregion\n// #region Dodecahedron\n/** `<pacem-3d-primitive-dodecahedron>`: computes the {@link MeshGeometry} of a regular dodecahedron (a Platonic solid with 12 pentagonal faces). */\nlet PacemDodecahedronElement = PacemDodecahedronElement_1 = class PacemDodecahedronElement extends PolyhedronElement {\n /** Builds the {@link MeshGeometry} of a dodecahedron inscribed in a sphere of the given radius (defaults to `1`). */\n static createMeshGeometry(radius) {\n radius ||= 1.0;\n const n1 = Point3D.from(0.356822 * radius, 0.934172 * radius, 0 * radius);\n const n2 = Point3D.from(-0.356822 * radius, 0.934172 * radius, 0 * radius);\n const n3 = Point3D.from(0.57735 * radius, 0.57735 * radius, -0.57735 * radius);\n const n4 = Point3D.from(0 * radius, 0.356822 * radius, -0.934172 * radius);\n const n5 = Point3D.from(-0.57735 * radius, 0.57735 * radius, -0.57735 * radius);\n const n6 = Point3D.from(-0.57735 * radius, 0.57735 * radius, 0.57735 * radius);\n const n7 = Point3D.from(0 * radius, 0.356822 * radius, 0.934172 * radius);\n const n8 = Point3D.from(0.57735 * radius, 0.57735 * radius, 0.57735 * radius);\n const n9 = Point3D.from(0.934172 * radius, 0 * radius, -0.356822 * radius);\n const n10 = Point3D.from(0.934172 * radius, 0 * radius, 0.356822 * radius);\n const n11 = Point3D.from(0 * radius, -0.356822 * radius, 0.934172 * radius);\n const n12 = Point3D.from(0.57735 * radius, -0.57735 * radius, 0.57735 * radius);\n const n13 = Point3D.from(0.57735 * radius, -0.57735 * radius, -0.57735 * radius);\n const n14 = Point3D.from(0.356822 * radius, -0.934172 * radius, 0 * radius);\n const n15 = Point3D.from(-0.57735 * radius, -0.57735 * radius, 0.57735 * radius);\n const n16 = Point3D.from(-0.356822 * radius, -0.934172 * radius, 0 * radius);\n const n17 = Point3D.from(0 * radius, -0.356822 * radius, -0.934172 * radius);\n const n18 = Point3D.from(-0.57735 * radius, -0.57735 * radius, -0.57735 * radius);\n const n19 = Point3D.from(-0.934172 * radius, 0 * radius, 0.356822 * radius);\n const n20 = Point3D.from(-0.934172 * radius, 0 * radius, -0.356822 * radius);\n const positions = [\n n1,\n n2,\n n3,\n n4,\n n5,\n n6,\n n7,\n n8,\n n9,\n n10,\n n11,\n n12,\n n13,\n n14,\n n15,\n n16,\n n17,\n n18,\n n19,\n n20\n ];\n const indices = [0, 2, 3, 0, 3, 4, 0, 4, 1, 1, 5, 6, 1, 6, 7,\n 1, 7, 0, 7, 9, 8, 7, 8, 2, 7, 2, 0,\n 7, 6, 10, 7, 10, 11, 7, 11, 9, 11, 13, 12,\n 11, 12, 8, 11, 8, 9, 11, 10, 14, 11, 14, 15,\n 11, 15, 13, 15, 17, 16, 15, 16, 12, 15, 12, 13,\n 15, 14, 18, 15, 18, 19, 15, 19, 17, 19, 4, 3,\n 19, 3, 16, 19, 16, 17, 19, 18, 5, 19, 5, 1,\n 19, 1, 4, 18, 14, 10, 18, 10, 6, 18, 6, 5,\n 3, 2, 8, 3, 8, 12, 3, 12, 16];\n const textureCoordsString = `0.5 0.999501, 0.5 0.999501, 0.191292 0.808708, 0.5 0.690792,\r\n 0.191292 0.808708, 0.191292 0.808708, 0.5 0.690792,\r\n 0.808708 0.808708, 0.000499517 0.5, 0.309208 0.5, 0.5 0.309208,\r\n 0.191292 0.191292, 0.191292 0.191292, 0.309208 0.5,\r\n 0.191292 0.191292, 0.5 0.000499517, 0.5 0.309208, 0.808708 0.191292,\r\n 0.000499517 0.5, 0.309208 0.5, 0.690792 0.5, 0.808708 0.808708,\r\n 0.5 0.999501, 0.690792 0.5, 0.5 0.999501, 0.191292 0.808708,\r\n 0.690792 0.5, 0.191292 0.808708, 0.309208 0.5, 0.309208 0.5,\r\n 0.191292 0.191292, 0.5 0.000499517, 0.309208 0.5, 0.5 0.000499517,\r\n 0.808708 0.191292, 0.309208 0.5, 0.808708 0.191292,\r\n 0.690792 0.5, 0.191292 0.808708, 0.309208 0.5, 0.690792 0.5,\r\n 0.191292 0.808708, 0.690792 0.5, 0.808708 0.808708,\r\n 0.191292 0.808708, 0.808708 0.808708, 0.808708 0.808708,\r\n 0.5 0.690792, 0.5 0.309208, 0.808708 0.808708, 0.5 0.309208,\r\n 0.808708 0.191292, 0.808708 0.191292, 0.9995 0.5, 0.191292 0.191292,\r\n 0.5 0.000499517, 0.808708 0.191292, 0.191292 0.191292,\r\n 0.808708 0.191292, 0.690792 0.5, 0.191292 0.191292,\r\n 0.690792 0.5, 0.191292 0.191292, 0.5 0.000499517, 0.808708 0.191292,\r\n 0.191292 0.191292, 0.808708 0.191292, 0.690792 0.5,\r\n 0.690792 0.5, 0.309208 0.5, 0.690792 0.5, 0.808708 0.808708,\r\n 0.5 0.999501, 0.690792 0.5, 0.5 0.999501, 0.191292 0.808708,\r\n 0.690792 0.5, 0.191292 0.808708, 0.5 0.000499517, 0.808708 0.191292,\r\n 0.690792 0.5, 0.5 0.000499517, 0.690792 0.5, 0.309208 0.5,\r\n 0.309208 0.5, 0.191292 0.191292, 0.9995 0.5, 0.808708 0.808708,\r\n 0.5 0.690792, 0.9995 0.5, 0.5 0.690792, 0.5 0.309208,\r\n 0.9995 0.5, 0.5 0.309208, 0.309208 0.5, 0.690792 0.5,\r\n 0.808708 0.808708, 0.309208 0.5, 0.808708 0.808708,\r\n 0.5 0.999501, 0.000499517 0.5, 0.5 0.309208, 0.000499517 0.5,\r\n 0.5 0.690792, 0.5 0.690792, 0.000499517 0.5, 0.5 0.690792,\r\n 0.191292 0.191292`;\n const texIndices = [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,\n 44, 45, 0, 46, 47, 48, 49, 50, 51, 7, 52, 53,\n 54, 55, 56, 57, 58, 59, 60, 61, 9, 62, 63, 64,\n 65, 66, 67, 11, 68, 69, 70, 71, 72, 73, 74, 75,\n 76, 77, 13, 78, 79, 80, 81, 82, 83, 15, 84, 85,\n 86, 87, 88, 89, 90, 91, 92, 93, 17, 94, 95, 96,\n 97, 98, 99, 19, 1, 4, 100, 14, 101, 102, 10, 103,\n 18, 6, 5, 104, 2, 105, 106, 8, 107, 3, 12, 16];\n // -------------------------------------------------------------------------------------------------\n const pointsToParse = textureCoordsString.split(',');\n const uv = [];\n for (let i = 0; i < texIndices.length; i++) {\n const ndx = texIndices[i];\n const uvCoords = _utils.parseFloats(pointsToParse[ndx]);\n uv.push({ x: uvCoords[0], y: uvCoords[1] });\n }\n const geom = new MeshGeometry(positions, indices, uv);\n geom.key = `dodecahedron_${radius}`;\n computeSharpVertexNormals(geom);\n // TODO: barycenter, boundingBox, boundingSphere\n geom.boundingSphere = { center: Point3D.zero(), radius };\n return geom;\n }\n createMeshGeometry(radius = this.radius) {\n return PacemDodecahedronElement_1.createMeshGeometry(radius);\n }\n};\nPacemDodecahedronElement = PacemDodecahedronElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-dodecahedron' })\n], PacemDodecahedronElement);\nexport { PacemDodecahedronElement };\n// #endregion\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemSphereElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME, DEG2RAD } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-sphere>`: computes the {@link MeshGeometry} of a UV sphere. */\nlet PacemSphereElement = PacemSphereElement_1 = class PacemSphereElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a sphere with the given radius (defaults to `1`) and tessellation (defaults to `8`). */\n static createMeshGeometry(radius = 1, segs = 8) {\n //\n const nodes = [];\n const uv = [];\n const indices = [];\n //\n const r = radius, tessellation = segs;\n const theta = DEG2RAD * (360.0 / tessellation);\n const segments = tessellation % 2 == 0 ? tessellation / 2 : (tessellation - 1) / 2;\n // top vertex\n nodes.push({ x: .0, y: r, z: .0 });\n for (let j = 1; j < segments; j++) {\n // loop \"latitude\"\n const angle1 = theta * j;\n const cos_angle1 = Math.cos(angle1);\n const sin_angle1 = Math.sin(angle1);\n const v = 1.0 - 1.0 * j / segments;\n for (let i = 0; i < tessellation; i++) {\n // loop \"longitude\"\n const angle2 = theta * i - Math.PI / 2.0;\n const cos_angle2 = Math.cos(angle2);\n const sin_angle2 = Math.sin(angle2);\n const x = r * sin_angle1 * cos_angle2;\n const y = r * cos_angle1;\n const z = r * sin_angle1 * sin_angle2;\n nodes.push({ x, y, z });\n // coordinates & texture\n const i_prev = i == 0 ? tessellation - 1 : i - 1;\n const u = i == 0 ? .0 : 1.0 - 1.0 * i / tessellation;\n const u_prev = 1.0 - 1.0 * i_prev / tessellation;\n // triangles\n if (j == 1) {\n indices.push(1 + i);\n indices.push(1 + i_prev);\n indices.push(0);\n //\n uv.push({ x: u, y: v });\n uv.push({ x: u_prev, y: v });\n uv.push({ x: .5, y: 1.0 });\n }\n else {\n indices.push((j - 1) * tessellation + i + 1);\n indices.push((j - 1) * tessellation + i_prev + 1);\n indices.push((j - 2) * tessellation + i_prev + 1);\n indices.push((j - 1) * tessellation + i + 1);\n indices.push((j - 2) * tessellation + i_prev + 1);\n indices.push((j - 2) * tessellation + i + 1);\n //\n const v_prev = 1.0 - (j - 1.0) / segments;\n //var faceUV = [];\n uv.push({ x: u, y: v });\n uv.push({ x: u_prev, y: v });\n uv.push({ x: u_prev, y: v_prev });\n uv.push({ x: u, y: v });\n uv.push({ x: u_prev, y: v_prev });\n uv.push({ x: u, y: v_prev });\n }\n }\n }\n // bottom vertex\n nodes.push({ x: .0, y: -r, z: .0 });\n const last = nodes.length - 1;\n for (let i = 0; i < tessellation; i++) {\n const j = segments - 2;\n const i_prev = i == 0 ? tessellation - 1 : i - 1;\n const u = i == 0 ? .0 : 1.0 - 1.0 * i / tessellation;\n const u_prev = 1.0 - 1.0 * i_prev / tessellation;\n const v = 1.0 - (j + 1.0) / segments;\n // triangles\n indices.push(last);\n indices.push(j * tessellation + 1 + i_prev);\n indices.push(j * tessellation + 1 + i);\n uv.push({ x: .5, y: 0 });\n uv.push({ x: u_prev, y: v });\n uv.push({ x: u, y: v });\n }\n const geom = new MeshGeometry(nodes, indices, uv);\n geom.key = `sphere_${radius}_s${segs}`;\n computeSharpVertexNormals(geom);\n return geom;\n }\n /** Computes the sphere geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemSphereElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'radius':\n case 'segments':\n this.geometry = PacemSphereElement_1.createMeshGeometry(this.radius, this.segments);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSphereElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemSphereElement.prototype, \"segments\", void 0);\nPacemSphereElement = PacemSphereElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-sphere' })\n], PacemSphereElement);\nexport { PacemSphereElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemTorusElement_1;\nimport { CustomElement, P, Watch, PropertyConverters } from '@pacem/pacem-core';\nimport { computeSharpVertexNormals } from '../types';\nimport { MeshGeometry } from '../geometry';\nimport { Pacem3DPrimitiveElement } from './primitive';\nimport { TAG_MIDDLE_NAME, DEG2RAD } from '../constants';\n//namespace Pacem.Components.Drawing3D {\n/** `<pacem-3d-primitive-torus>`: computes the {@link MeshGeometry} of a torus (donut shape): a tube revolved around a central axis. */\nlet PacemTorusElement = PacemTorusElement_1 = class PacemTorusElement extends Pacem3DPrimitiveElement {\n /** Builds the {@link MeshGeometry} of a torus with the given outer/inner radii and ring/tube segment counts. */\n static createMeshGeometry(radius = 1, innerRadius = .25, segments = 24, sides = 12) {\n //\n const nodes = [];\n const uv = [];\n const coords = [];\n const theta = DEG2RAD * (360.0 / segments);\n const phi = DEG2RAD * (360.0 / sides);\n const r1 = radius;\n const r2 = innerRadius;\n for (let j = 0; j < segments; j++) {\n // Math.PI/2 adjustement (useful for UV mapping)\n const angle1 = theta * j - Math.PI / 2.0;\n const sin_angle1 = Math.sin(angle1);\n const cos_angle1 = Math.cos(angle1);\n for (let i = 0; i < sides; i++) {\n // Math.PI adjustement (useful for UV mapping)\n const angle2 = phi * i + Math.PI;\n const cos_angle2 = Math.cos(angle2);\n const x = r1 * cos_angle1 + r2 * cos_angle2 * cos_angle1;\n const y = r2 * Math.sin(angle2);\n const z = r1 * sin_angle1 + r2 * cos_angle2 * sin_angle1;\n nodes.push({ x, y, z });\n const prev_j = j > 0 ? j - 1 : segments - 1;\n const prev_i = i > 0 ? i - 1 : sides - 1;\n const u = j == 0 ? .0 : 1.0 - 1.0 * j / segments;\n const v = i > 0 ? 1.0 * i / sides : 1.0;\n const u_prev = j > 0 ? 1.0 - (j - 1.0) / segments : 1.0 / segments;\n const v_prev = i > 0 ? (i - 1.0) / sides : 1.0 - 1.0 / sides;\n // triangles <=> Int32Collection\n // <=> PointCollection\n coords.push(j * sides + prev_i);\n coords.push(prev_j * sides + prev_i);\n coords.push(prev_j * sides + i);\n coords.push(j * sides + prev_i);\n coords.push(prev_j * sides + i);\n coords.push(j * sides + i);\n //\n uv.push({ x: u, y: v_prev });\n uv.push({ x: u_prev, y: v_prev });\n uv.push({ x: u_prev, y: v });\n uv.push({ x: u, y: v_prev });\n uv.push({ x: u_prev, y: v });\n uv.push({ x: u, y: v });\n }\n }\n const geom = new MeshGeometry(nodes, coords, uv);\n geom.key = `torus_${radius}x${innerRadius}_t${segments}_s${sides}`;\n computeSharpVertexNormals(geom);\n return geom;\n }\n /** Computes the torus geometry from the default (unset) shape parameters. */\n createDefaultGeometry() {\n return PacemTorusElement_1.createMeshGeometry();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'radius':\n case 'innerRadius':\n case 'segments':\n case 'sides':\n this.geometry = PacemTorusElement_1.createMeshGeometry(this.radius, this.innerRadius, this.segments, this.sides);\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemTorusElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemTorusElement.prototype, \"innerRadius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemTorusElement.prototype, \"segments\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemTorusElement.prototype, \"sides\", void 0);\nPacemTorusElement = PacemTorusElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-primitive-torus' })\n], PacemTorusElement);\nexport { PacemTorusElement };\n","import { CustomEventUtils, Utils } from '@pacem/pacem-core';\nimport { Point } from '@pacem/pacem-foundation';\nimport { isCamera } from '../types';\nfunction _clipPoint(evt, rect) {\n let x, y;\n if (Point.isPoint(evt)) {\n x = evt.x;\n y = evt.y;\n }\n else {\n const { page } = CustomEventUtils.getEventCoordinates(evt);\n const p = { x: page.x - rect.x, y: page.y - rect.y };\n x = p.x;\n y = p.y;\n }\n const clipX = x / rect.width * 2 - 1;\n const clipY = y / rect.height * -2 + 1;\n return { x: clipX, y: clipY };\n}\n/** Shared helpers used by the concrete `pacem-3d` rendering-backend adapters (Three.js, WebGPU): type guards, buffer flattening, camera lookup and pointer-to-clip-space conversion. */\nexport class AdapterUtils {\n /** Returns whether the given object is a {@link MeshGeometry} (has `positions` and `triangleIndices` arrays). */\n static isMeshGeometry(obj) {\n return 'positions' in obj && Utils.isArray(obj.positions)\n && 'triangleIndices' in obj && Utils.isArray(obj.triangleIndices);\n }\n /** Returns whether the given object is a {@link Vector3D} (has numeric `x`/`y`/`z`). */\n static isVector3D(obj) {\n return 'x' in obj && typeof obj.x === 'number'\n && 'y' in obj && typeof obj.y === 'number'\n && 'z' in obj && typeof obj.z === 'number';\n }\n /** Returns whether the given object is an {@link Rgba} color (has numeric `r`/`g`/`b`). */\n static isRgba(obj) {\n return 'r' in obj && typeof obj.r === 'number'\n && 'g' in obj && typeof obj.g === 'number'\n && 'b' in obj && typeof obj.b === 'number';\n }\n /**\n * Flattens an array of 3D vectors, UV coordinates, or RGBA colors into a single flat number array (interleaved components), ready for a GPU buffer.\n * @param array Array of {@link Vector3D}, {@link UVMap} entries, or {@link Rgba} values to flatten\n */\n static flattenVectorArray(array) {\n const retval = [];\n for (let v of array) {\n if (AdapterUtils.isVector3D(v)) {\n retval.push(v.x, v.y, v.z);\n }\n else if (AdapterUtils.isRgba(v)) {\n retval.push(v.r, v.g, v.b, v.a ?? 1);\n }\n else {\n retval.push(v.x, v.y);\n }\n }\n return retval;\n }\n /**\n * Returns the first non-hidden {@link Camera} among the given renderables, if any.\n * @param items Renderable items to search\n */\n static findCamera(items) {\n return (items || []).find(r => isCamera(r) && !r.hide);\n }\n clipPixel(evt, viewport) {\n if (viewport instanceof HTMLElement) {\n viewport = Utils.offsetRect(viewport);\n }\n return _clipPoint(evt, viewport);\n }\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils, CustomElementUtils } from '@pacem/pacem-core';\nimport { Colors } from '@pacem/pacem-foundation';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { StalePropertyFlag, isMesh, isUi3DObject, Pacem3DAdapterElement, Pacem3DObjectElement, Pacem3DGroupElement, Pacem3DLightElement, Pacem3DCameraElement, Pacem3DPerspectiveCameraElement, Pacem3DOrthographicCameraElement, Pacem3DMeshElement } from '../types';\nimport { MeshGeometry, LineGeometry } from '../geometry';\nimport { AdapterUtils } from './shared';\nimport { isStandardMaterial, isPhongMaterial, isLambertMaterial, isLineMaterial, isMaterial } from '../materials/material';\n//namespace Pacem.Components.Drawing3D {\nfunction isMeshGeometry(obj) {\n return AdapterUtils.isMeshGeometry(obj);\n}\nfunction isVector3D(obj) {\n return AdapterUtils.isVector3D(obj);\n}\nfunction flattenVectorArray(array) {\n return AdapterUtils.flattenVectorArray(array);\n}\nconst threeJsVersion = '0.152.2', lastOrbitCtrlJsVersion = '0.147.0';\n;\nconst consts = {\n VERSION: threeJsVersion,\n API_URI: `https://unpkg.com/three@${threeJsVersion}/build/three.min.js`,\n ORBIT_URI: `https://unpkg.com/three@${lastOrbitCtrlJsVersion}/examples/js/controls/OrbitControls.js`,\n LOADERS: [\n //`https://unpkg.com/three@${threeJsVersion}/examples/js/loaders/OBJLoader.js`,\n //`https://unpkg.com/three@${threeJsVersion}/examples/js/loaders/MTLLoader.js`,\n ],\n DEFAULT_MATERIAL: function () {\n return new THREE.MeshStandardMaterial({ color: '#069', flatShading: true });\n }\n};\nfunction matrix3DToMatrix4(m) {\n const matrix = new THREE.Matrix4();\n matrix.set(m.m11, m.m12, m.m13, m.m14, m.m21, m.m22, m.m23, m.m24, m.m31, m.m32, m.m33, m.m34, m.offsetX, m.offsetY, m.offsetZ, m.m44);\n return matrix;\n}\n// as of https://codepen.io/discoverthreejs/full/vwVeZB\nfunction fitCameraToSelection(camera, controls /* OrbitControls */, selection, fitOffset = 1.333) {\n const box = new THREE.Box3();\n for (const object of selection) {\n box.expandByObject(object);\n }\n const size = box.getSize(new THREE.Vector3());\n const center = box.getCenter(new THREE.Vector3());\n const maxSize = Math.max(size.x, size.y, size.z);\n const fitHeightDistance = maxSize / (2 * Math.atan(Math.PI * camera.fov / 360));\n const fitWidthDistance = fitHeightDistance / camera.aspect;\n const distance = fitOffset * Math.max(fitHeightDistance, fitWidthDistance);\n const hasControls = !Utils.isNull(controls);\n var direction;\n if (hasControls) {\n direction = controls.target.clone()\n .sub(camera.position)\n .normalize()\n .multiplyScalar(distance);\n controls.maxDistance = distance * 10;\n controls.target.copy(center);\n }\n camera.near = distance / 100;\n camera.far = distance * 100;\n camera.updateProjectionMatrix();\n if (hasControls) {\n camera.position.copy(controls.target).sub(direction);\n controls.update();\n }\n}\nfunction flattenMatrix3D(m) {\n return [\n // right way to translate the matrix3D to matrix4\n m.m11, m.m21, m.m31, m.offsetX,\n m.m12, m.m22, m.m32, m.offsetY,\n m.m13, m.m23, m.m33, m.offsetZ,\n m.m14, m.m24, m.m34, m.m44,\n ];\n}\nfunction nodeGeometryToBufferGeometry(mesh) {\n const geometry = new THREE.BufferGeometry();\n const vertices = flattenVectorArray(mesh.positions);\n geometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));\n if (mesh instanceof MeshGeometry) {\n if (!Utils.isNullOrEmpty(mesh.triangleIndices)) {\n geometry.setIndex(mesh.triangleIndices);\n }\n const vertices = flattenVectorArray(mesh.positions);\n geometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));\n const uvs = flattenVectorArray(mesh.textureCoordinates);\n geometry.setAttribute('uv', new THREE.Float32BufferAttribute(uvs, 2));\n if (Utils.isNullOrEmpty(mesh.normals)) {\n geometry.computeVertexNormals();\n }\n else {\n const normals = flattenVectorArray(mesh.normals);\n geometry.setAttribute('normal', new THREE.Float32BufferAttribute(normals, 3));\n }\n }\n return geometry;\n}\nfunction lightToLight(item) {\n var light;\n switch (item.type) {\n case 'spot':\n const spotLight = new THREE.SpotLight();\n spotLight.target.position.set(item.target.x, item.target.y, item.target.z);\n light = spotLight;\n break;\n default:\n light = new THREE.PointLight();\n break;\n }\n return light;\n}\nfunction materialToMaterial(material) {\n if (Utils.isNull(material)) {\n return null;\n }\n const lineBase = {\n color: typeof material.color === 'string' ? material.color : Colors.stringify(material.color),\n opacity: material.opacity ?? 1,\n transparent: true,\n wireframe: material.wireframe ?? false,\n visible: material.visible ?? true\n };\n const base = Utils.extend({}, lineBase, { wireframe: material.wireframe ?? false });\n const mipMapMaterial = (m) => {\n if (material.map) {\n m['map'] = new THREE.TextureLoader().load(material.map, _ => {\n // console.log('texture loaded!');\n m.needsUpdate = true;\n });\n }\n return m;\n };\n if (isStandardMaterial(material)) {\n const std = mipMapMaterial(new THREE.MeshStandardMaterial(Utils.extend(base, {\n roughness: material.roughness,\n metalness: material.metalness,\n emissive: material.emissiveColor,\n flatShading: material.flatShading,\n refractionRatio: material.refractionRatio,\n })));\n return std;\n }\n else if (isPhongMaterial(material)) {\n const phong = mipMapMaterial(new THREE.MeshPhongMaterial(Utils.extend(base, {\n shininess: material.shininess,\n emissive: material.emissiveColor,\n flatShading: material.flatShading,\n specular: material.specularColor,\n reflectivity: material.reflectivity,\n refractionRatio: material.refractionRatio,\n })));\n return phong;\n }\n else if (isLambertMaterial(material)) {\n const lambert = mipMapMaterial(new THREE.MeshLambertMaterial(Utils.extend(base, {\n emissive: material.emissiveColor,\n reflectivity: material.reflectivity,\n refractionRatio: material.refractionRatio,\n })));\n return lambert;\n }\n else if (isLineMaterial(material)) {\n const dash = material.dashArray && material.dashArray[0] || null, gap = material.dashArray && material.dashArray.length > 1 && material.dashArray[1] || dash;\n const lineMatOptions = Utils.extend(lineBase, {\n linecap: material.lineCap ?? 'round',\n linejoin: material.lineJoin ?? 'round',\n linewidth: material.lineWidth ?? 1\n });\n return Utils.isNullOrEmpty(material.dashArray) ?\n new THREE.LineBasicMaterial(lineMatOptions)\n : new THREE.LineDashedMaterial(Utils.extend({ dashSize: dash, gapSize: gap }, lineMatOptions));\n }\n else if (isMaterial(material)) {\n const basic = mipMapMaterial(new THREE.MeshBasicMaterial(base));\n return basic;\n }\n else {\n return null;\n }\n}\nfunction materialToMaterials(frontMaterial, backMaterial, multiAllowed) {\n // material\n const multi = multiAllowed;\n // composite\n const materials = [];\n // front mat\n const material = materialToMaterial(frontMaterial);\n if (!Utils.isNull(material)) {\n material.side = THREE.FrontSide;\n materials.push(material);\n }\n // back mat\n if (!Utils.isNull(backMaterial)) {\n if (backMaterial == frontMaterial) {\n material.side = THREE.DoubleSide;\n }\n else {\n // multi-material\n const backsideMaterial = materialToMaterial(backMaterial);\n if (!Utils.isNull(backsideMaterial)) {\n backsideMaterial.side = THREE.BackSide;\n materials.push(backsideMaterial);\n }\n }\n }\n return multi && materials.length > 1 ? materials : material;\n}\nfunction load(item) {\n if (!Utils.isNullOrEmpty(item.content)) {\n const type = item.type?.toLowerCase();\n switch (type) {\n case 'obj':\n const obj = new THREE['OBJLoader']();\n return obj.parse(item.content);\n default:\n const loader = new THREE.ObjectLoader();\n return loader.parse(item.content);\n }\n }\n else {\n throw new Error('Missing content.');\n }\n}\nfunction meshType(geometry) {\n return geometry instanceof LineGeometry ? THREE.Line : THREE.Mesh;\n}\nfunction build(mesh) {\n if (Utils.isNullOrEmpty(mesh.geometry)) {\n return null;\n }\n const ctor = meshType(mesh.geometry);\n return new ctor();\n}\nfunction isTHREEAvailable() {\n return 'THREE' in window;\n}\nasync function whenTHREEAvailable(...args) {\n const start = Date.now();\n var initialized = false;\n do {\n initialized = isTHREEAvailable();\n for (let pred of args) {\n initialized &&= pred();\n }\n if (!initialized) {\n await new Promise(resolve => setTimeout(resolve, 500));\n }\n } while (!initialized && (Date.now() - start) < 30000);\n if (!initialized) {\n throw new Error('The wait for THREE adapter initialization timed out.');\n }\n}\n/**\n * `<pacem-3d-three-adapter>`: {@link Pacem3DAdapterElement} rendering backend built on top of the\n * {@link https://threejs.org/ | Three.js}/WebGL library (lazily loaded from a CDN on first use). Translates the\n * {@link RenderableElement} scene graph into `THREE.Object3D`s, renders them with a `THREE.WebGLRenderer` and\n * supports mouse-driven orbit controls via {@link orbit}.\n */\nlet Pacem3DThreeAdapterElement = class Pacem3DThreeAdapterElement extends Pacem3DAdapterElement {\n constructor() {\n super(...arguments);\n this._renderer = null;\n this._camera = null;\n this._scene = null;\n this._orbitCtrls = null;\n this._objects = new WeakMap();\n this._dict = {};\n this._orbitControlsDelegate = (_) => {\n };\n this._ensureAndRefresh = (item, object3D, parent) => {\n object3D.matrixAutoUpdate = false;\n // choose whether to render the object or not\n if (object3D.visible = !item.hide) {\n // the modeling part\n // 1. pacem 3d mesh\n if (isMesh(item)) {\n let mesh3D = object3D;\n if (item.flags.indexOf(StalePropertyFlag.Geometry) >= 0) {\n mesh3D.geometry.dispose();\n // swap Line <-> Mesh according to the geometry\n const mesh3D2 = build(item);\n if (mesh3D2.constructor.name !== mesh3D.constructor.name) {\n parent.remove(object3D);\n delete this._dict[object3D.id];\n object3D = mesh3D = mesh3D2;\n }\n // /swap\n mesh3D.geometry = nodeGeometryToBufferGeometry(item.geometry);\n }\n if (item.flags.indexOf(StalePropertyFlag.Material) >= 0) {\n if (Utils.isArray(mesh3D.material)) {\n for (let m of mesh3D.material) {\n m.dispose();\n }\n }\n else {\n mesh3D.material.dispose();\n }\n mesh3D.material = materialToMaterials(item.material) || consts.DEFAULT_MATERIAL();\n }\n }\n // 2. 3d 'native' object\n else if (item instanceof Pacem3DObjectElement\n && (item.flags.indexOf(StalePropertyFlag.Material) >= 0 || item.flags.indexOf(StalePropertyFlag.Geometry) >= 0)) {\n // swap reference\n object3D.parent && object3D.parent.remove(object3D);\n object3D = load(item);\n }\n // 3. grouping object\n else if (item instanceof Pacem3DGroupElement) {\n if (item.flags.indexOf(StalePropertyFlag.Children) >= 0) {\n // remove all children\n for (let j = object3D.children.length - 1; j >= 0; j--) {\n const child = object3D.children[j];\n object3D.remove(child);\n }\n // re-create\n for (let child of item.items) {\n this._addOrUpdateItem(child, object3D);\n }\n }\n }\n // 4. light\n else if (item instanceof Pacem3DLightElement) {\n const light = object3D;\n if (item.flags.indexOf(StalePropertyFlag.Light) >= 0) {\n light.color = new THREE.Color(item.color);\n light.intensity = item.intensity;\n }\n }\n // the configuring part\n let posv = item.position; // || new THREE.Vector3(0, 0, 0);\n if (isUi3DObject(item)\n && !Utils.isNull(item.transformMatrix)\n && (item.flags.indexOf(StalePropertyFlag.Position) >= 0 || item.flags.indexOf(StalePropertyFlag.Transform) >= 0)) {\n const positionMatrix = Geometry.LinearAlgebra.Matrix3D.from(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, posv.x, posv.y, posv.z, 1);\n // item.transformMatrix is a local matrix thus\n // prepend in the multiplication (i.e. FIRST apply transform THEN apply positioning)\n const transformMatrix = Geometry.LinearAlgebra.Matrix3D.multiply(item.transformMatrix, positionMatrix);\n THREE.Matrix4.prototype.set.apply(object3D.matrix, flattenMatrix3D(transformMatrix));\n //object3D.updateMatrix();\n }\n else if (item.flags.indexOf(StalePropertyFlag.Position) >= 0) {\n object3D.position.set(posv.x, posv.y, posv.z);\n object3D.updateMatrix();\n }\n }\n object3D.userData = item.tag;\n if (Utils.isNull(parent.getObjectById(object3D.id))) {\n parent.add(object3D);\n this._dict[object3D.id] = item;\n }\n // clear flags\n item.flags.splice(0);\n return object3D;\n };\n //#endregion\n }\n _assertMonoStage(scene) {\n if (scene != this._3d && !Utils.isNull(this._3d)) {\n throw new Error('Stage mismatch.');\n }\n }\n dispose(scene) {\n // do nothing\n }\n snapshot(scene, background, type, quality) {\n if (scene != this._3d) {\n return Promise.resolve(null);\n }\n const jpeg = !Utils.isNullOrEmpty(background), mime = type ?? (jpeg ? 'image/jpeg' : null), compression = quality ?? (jpeg ? .9 : null);\n return new Promise((resolve, _) => {\n this.render();\n Utils.snapshotElement(this._stage, background, mime, compression).then(resolve);\n });\n }\n project(scene, point3D) {\n this._assertMonoStage(scene);\n // check feasibility\n if (Utils.isNull(this._camera) || Utils.isNull(this._stage))\n return null;\n //\n const stage = this._stage;\n const vector = new THREE.Vector3(point3D.x, point3D.y, point3D.z);\n const width = stage.width, height = stage.height;\n const widthHalf = width / 2, heightHalf = height / 2;\n const point = vector.project(this._camera);\n const x = (point.x * widthHalf) + widthHalf;\n const y = -(point.y * heightHalf) + heightHalf;\n return { x: x, y: y };\n }\n zoomFit(scene, ...items) {\n this._assertMonoStage(scene);\n return new Promise((resolve, reject) => {\n const camera = this._camera;\n const map = this._objects;\n const targets = items.filter(o => map.has(o)).map(o => map.get(o));\n if (Utils.isNull(camera) || Utils.isNullOrEmpty(targets)) {\n resolve();\n }\n fitCameraToSelection(camera, this._orbitCtrls, targets);\n resolve();\n });\n }\n getScene(scene) {\n this._assertMonoStage(scene);\n return this._scene;\n }\n raycast(scene, point, size, callback) {\n this._assertMonoStage(scene);\n if (isTHREEAvailable() && !Utils.isNull(this._camera)) {\n const camera = this._camera;\n const vector = new THREE.Vector2((point.x / size.width) * 2 - 1, -(point.y / size.height) * 2 + 1);\n const raycaster = new THREE.Raycaster();\n raycaster.setFromCamera(vector, camera);\n const intersects = raycaster.intersectObjects(this._scene.children, true);\n let obj;\n let intersection;\n let j = 0;\n while (intersects.length > j && (intersection = intersects[j++]) && (obj = intersection.object)) {\n const item = this._dict[obj.id];\n if (item.inert) {\n continue;\n }\n const v = intersection.point, x = v.x, y = v.y, z = v.z, point = { x, y, z };\n callback({ object: this._dict[obj.id], point });\n return;\n }\n }\n callback(null);\n }\n // #region ABSTRACT IMPLEMENTATION\n async initialize(container) {\n if (!Utils.isNull(this._stage)) {\n return this._stage;\n }\n this._3d = container;\n const wrapper = container.stage;\n const stage = this._stage = document.createElement('canvas');\n wrapper.innerHTML = '';\n wrapper.appendChild(stage);\n if (!isTHREEAvailable()) {\n await CustomElementUtils.importjs(consts.API_URI);\n await whenTHREEAvailable();\n await Promise.all([CustomElementUtils.importjs(consts.ORBIT_URI)]\n .concat(consts.LOADERS.map(js => CustomElementUtils.importjs(js))));\n }\n // here comes THREE.js\n this._scene = new THREE.Scene();\n // this._scene.add(new THREE.Mesh(new THREE.PlaneGeometry(1, 1, 1, 1), consts.DEFAULT_MATERIAL()));\n this.invalidateSize(container);\n let w = this._stage.width, h = this._stage.height;\n //if (!ctrl.renderer)\n let parameters = {\n canvas: stage, antialias: true, stencil: false, alpha: container.transparent ?? true //, clearAlpha: 1\n };\n this._renderer = new THREE.WebGLRenderer(parameters);\n this._renderer.setSize(w, h);\n if (container.background && !container.transparent) {\n let clr = container.background;\n if (typeof clr === 'string') {\n clr = Colors.parse(clr);\n }\n const theejsClr = new THREE.Color(clr.r, clr.g, clr.b);\n this._renderer.setClearColor(theejsClr, clr.a);\n }\n this.orbit = container.orbit;\n return stage;\n }\n _setCamera(cam) {\n this._camera = cam;\n this.invalidateSize(this._3d);\n this._disposeOrbitControls();\n // re-init\n if (this.orbit) {\n this._initOrbitControls();\n }\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'orbit') {\n if (val === true)\n this._initOrbitControls();\n else\n this._disposeOrbitControls();\n }\n }\n _initOrbitControls() {\n const cam = this._camera;\n if (Utils.isNull(this._3d) || Utils.isNull(cam)) {\n return;\n }\n const controls = this._orbitCtrls = new THREE['OrbitControls'](cam, this._3d.stage);\n controls.addEventListener('change', this._orbitControlsDelegate);\n }\n _disposeOrbitControls() {\n const controls = this._orbitCtrls;\n if (Utils.isNull(controls)) {\n return;\n }\n controls.removeEventListener('change', this._orbitControlsDelegate);\n controls.dispose();\n }\n _updateRenderer(container, renderer = this._renderer) {\n if (!container.transparent) {\n if (container.background) {\n let clr = container.background;\n if (typeof clr === 'string') {\n clr = Colors.parse(clr);\n }\n const theejsClr = new THREE.Color(clr.r, clr.g, clr.b);\n renderer.setClearColor(theejsClr, clr.a);\n }\n else {\n renderer.setClearColor(null);\n }\n }\n else {\n renderer.setClearAlpha(0);\n }\n }\n invalidateSize(scene, size = scene.size) {\n this._assertMonoStage(scene);\n if (!isTHREEAvailable() || Utils.isNull(size)) {\n return;\n }\n let w = size.width;\n let h = size.height;\n this._stage.width = w;\n this._stage.height = h;\n let camera = this._camera;\n if (camera instanceof THREE.PerspectiveCamera) {\n camera.aspect = w / h;\n camera.updateProjectionMatrix();\n }\n if (this._renderer) {\n this._renderer.setSize(w, h);\n this._updateRenderer(scene);\n }\n }\n removeItem(scene, item) {\n this._assertMonoStage(scene);\n const bag = this._objects;\n const obj3d = bag.get(item);\n if (!Utils.isNull(obj3d)) {\n this._scene.remove(obj3d);\n delete this._dict[obj3d.id];\n bag.delete(item);\n }\n }\n updateItem(scene, item) {\n this._assertMonoStage(scene);\n const bag = this._objects;\n if (!Utils.isNull(item.parent) && bag.has(item.parent)) {\n const parent3d = bag.get(item.parent);\n this._addOrUpdateItem(item, parent3d);\n }\n else {\n this._addOrUpdateItem(item);\n }\n }\n addItem(scene, item) {\n this._assertMonoStage(scene);\n this._addOrUpdateItem(item);\n }\n _addOrUpdateItem(item, parent = this._scene) {\n if (!isTHREEAvailable() || Utils.isNull(parent)) {\n return;\n }\n if (item instanceof Pacem3DCameraElement) {\n if (item instanceof Pacem3DPerspectiveCameraElement) {\n var pcam;\n if (this._camera instanceof THREE.PerspectiveCamera) {\n var pcam = this._camera;\n }\n else {\n pcam = new THREE.PerspectiveCamera();\n }\n const lookAtVector = new THREE.Vector3(item.lookAt.x, item.lookAt.y, item.lookAt.z);\n pcam.lookAt(lookAtVector);\n pcam.position.set(item.position.x, item.position.y, item.position.z);\n pcam.fov = item.fov;\n pcam.aspect = item.aspect;\n pcam.near = item.near;\n pcam.far = item.far;\n //\n this._setCamera(pcam);\n //\n const orbit = this._orbitCtrls;\n if (!Utils.isNull(orbit) && orbit.object === pcam) {\n orbit.target = lookAtVector;\n orbit.update();\n }\n }\n else if (item instanceof Pacem3DOrthographicCameraElement) {\n // bunch of duplicated code\n // no need to refactor since it's a deprecating branch of development\n var ocam;\n if (this._camera instanceof THREE.OrthographicCamera) {\n var ocam = this._camera;\n }\n else {\n ocam = new THREE.OrthographicCamera();\n }\n const lookAtVector = new THREE.Vector3(item.lookAt.x, item.lookAt.y, item.lookAt.z);\n ocam.lookAt(lookAtVector);\n ocam.position.set(item.position.x, item.position.y, item.position.z);\n ocam.left = item.left;\n ocam.right = item.right;\n ocam.top = item.top;\n ocam.bottom = item.bottom;\n ocam.near = item.near;\n ocam.far = item.far;\n //\n this._setCamera(ocam);\n //\n const orbit = this._orbitCtrls;\n if (!Utils.isNull(orbit) && orbit.object === ocam) {\n orbit.target = lookAtVector;\n orbit.update();\n }\n }\n else {\n // cam not supported\n throw new Error(`Camera ${item} not supported.`);\n }\n }\n else {\n if (!this._objects.has(item)) {\n // adding\n const then = (object3D) => {\n // clear flags\n // item.flags.splice(0);\n if (object3D) {\n object3D = this._ensureAndRefresh(item, object3D, parent);\n this._objects.set(item, object3D);\n }\n else {\n // object not built\n // throw?\n }\n };\n // TODO: switch to interface matching\n if (item instanceof Pacem3DObjectElement) {\n const mesh = load(item);\n then(mesh);\n }\n else if (item instanceof Pacem3DMeshElement) {\n // beware! a change in the geometry could cause a change in the object3D type\n const mesh = build(item);\n then(mesh);\n }\n else if (item instanceof Pacem3DLightElement) {\n const light = lightToLight(item);\n then(light);\n }\n else if (item instanceof Pacem3DGroupElement) {\n const group = new THREE.Group();\n then(group);\n }\n }\n else {\n // updating\n const obj = this._objects.get(item);\n const objOut = this._ensureAndRefresh(item, obj, parent);\n if (objOut != obj) {\n this._objects.set(item, objOut);\n }\n }\n }\n }\n render() {\n if (this._camera) {\n this._renderer.render(this._scene, this._camera);\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], Pacem3DThreeAdapterElement.prototype, \"orbit\", void 0);\nPacem3DThreeAdapterElement = __decorate([\n CustomElement({ tagName: P + '-3d-three-adapter' })\n], Pacem3DThreeAdapterElement);\nexport { Pacem3DThreeAdapterElement };\n","//namespace Pacem.Drawing3D.WebGPU {\n/** Prefix prepended to every WebGPU resource label ({@link GPURenderPipeline}s, bind groups, layouts, shader modules, ...) created by this adapter, so they're easy to spot in browser devtools/profilers. */\nexport const LABEL_PREFIX = 'pacem-3d-';\n/** Maximum value representable by a 32-bit unsigned integer (2^32 - 1). Used as the color-picking \"no object\" sentinel `u32` id. */\nexport const U32_MAX = 4_294_967_295;\n// #region vertex state\n/** Vertex buffer slot (index into {@link GPUVertexState.buffers}) carrying mesh vertex positions (or the packed position+normal+uv buffer, see {@link PipelineOptions.packedVertices}). */\nexport const VERTEX_BUFFER_INDEX_MESH_POSITION = 0;\n/** Vertex buffer slot (index into {@link GPUVertexState.buffers}) carrying mesh vertex normals, when vertices aren't packed. */\nexport const VERTEX_BUFFER_INDEX_MESH_NORMAL = 1;\n/** Vertex buffer slot (index into {@link GPUVertexState.buffers}) carrying mesh UV coordinates, when vertices aren't packed. */\nexport const VERTEX_BUFFER_INDEX_MESH_UV = 2;\n/** `@location` index of the surface normal in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_NORMAL = 0;\n/** `@location` index of the world-space vertex position in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_VERTEX = 1;\n/** `@location` index of the UV coordinate in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_UV = 2;\n/** `@location` index of the vertex/triangle index in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_INDEX = 3;\n/** `@location` index of the picking ray data in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_RAY = 4;\n/** `@location` index of the instance index in the generated WGSL `VertexOutput` struct. */\nexport const VERTEX_OUTPUT_LOCATION_INSTANCE = 5;\n/** `@group` index of the world/normal transform uniform bind group. */\nexport const UNIFORM_GROUP_INDEX_TRANSFORM = 1;\n/** `@group` index of the camera view/projection uniform bind group. */\nexport const UNIFORM_GROUP_INDEX_CAMERA = 0;\n/** `@group` index of the pointer/interaction uniform bind group. Deliberately aliased to {@link UNIFORM_GROUP_INDEX_CAMERA} so interaction data shares the camera's binding group. */\nexport const UNIFORM_GROUP_INDEX_INTERACTION = UNIFORM_GROUP_INDEX_CAMERA; // put it in camera same binding group\n/** `@group` index of the line-geometry storage bind group (positions + line properties). */\nexport const STORAGE_GROUP_INDEX_LINE = 2;\n/** `@group` index of the color-picking (object-id) uniform bind group. */\nexport const UNIFORM_GROUP_INDEX_COLORPICKING = 2;\n/** `@binding` index of the world/normal transform uniform, within {@link UNIFORM_GROUP_INDEX_TRANSFORM}. */\nexport const UNIFORM_BINDING_INDEX_TRANSFORM = 0;\n/** `@binding` index of the camera view/projection uniform, within {@link UNIFORM_GROUP_INDEX_CAMERA}. */\nexport const UNIFORM_BINDING_INDEX_CAMERA = 0;\n/** `@binding` index of the pointer/interaction uniform, within {@link UNIFORM_GROUP_INDEX_INTERACTION}. */\nexport const UNIFORM_BINDING_INDEX_INTERACTION = 1;\n// #endregion\n// #region fragment state\n/** `@group` index of the material (storage buffer + optional texture/sampler) bind group. */\nexport const MATERIAL_GROUP_INDEX = 2;\n/** `@group` index of the per-light uniform bind group, immediately following {@link MATERIAL_GROUP_INDEX}. */\nexport const UNIFORM_GROUP_INDEX_LIGHTING = MATERIAL_GROUP_INDEX + 1;\n/** `@binding` index of the material storage buffer, within {@link MATERIAL_GROUP_INDEX}. */\nexport const STORAGE_MATERIAL_INDEX = 0;\n/** `@binding` index of the material's texture sampler, within {@link MATERIAL_GROUP_INDEX}. */\nexport const SAMPLER_BINDING_INDEX = 1;\n/** `@binding` index of the material's texture, within {@link MATERIAL_GROUP_INDEX}. */\nexport const TEXTURE_BINDING_INDEX = 2;\n/** WGSL identifier used to reference the bound material struct/storage-buffer in generated fragment shader code. */\nexport const MATERIAL_REFERENCE = 'material';\n/** WGSL identifier used to reference the running vertex/fragment color in generated shader fragments (spliced in and out by texture/lighting stages). */\nexport const VERTEX_COLOR_REFERENCE = 'color';\n/** WGSL identifier used to reference the accumulated ambient-light contribution in generated fragment shader code. */\nexport const AMBIENT_COLOR_REFERENCE = 'ambient';\n/** WGSL identifier used to reference the accumulated (directional/omni) lighting contribution in generated fragment shader code. */\nexport const LIGHTING_COLOR_REFERENCE = 'lighting';\n// #endregion\n// #region WGSL\n/** Name of the WGSL struct describing per-vertex input attributes, used by generated vertex shader code. */\nexport const WGSL_VERTEXINPUT_STRUCT_NAME = 'VertexInput';\n/** Name of the WGSL struct describing vertex-stage output / fragment-stage input, used by generated vertex and fragment shader code. */\nexport const WGSL_VERTEXOUTPUT_STRUCT_NAME = 'VertexOutput';\n/** Name of the WGSL struct describing the pointer/interaction uniform data, used by generated shader code. */\nexport const WGSL_INTERACTIONDATA_STRUCT_NAME = 'InteractionData';\n// #endregion\n// Kinda polyfill for WebGPU constants, as TypeScript 6.0 does include WebGPU types but does NOT include these constants for magic numbers:\n/** Polyfill for the WebGPU `GPUBufferUsage` bitflags (`lib.dom` declares the `GPUBufferUsageFlags` type but not these numeric flag values). Combine with `|` when creating a {@link GPUBuffer}, e.g. `GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST`. */\nexport var GPUBufferUsage;\n(function (GPUBufferUsage) {\n GPUBufferUsage[GPUBufferUsage[\"COPY_SRC\"] = 4] = \"COPY_SRC\";\n GPUBufferUsage[GPUBufferUsage[\"COPY_DST\"] = 8] = \"COPY_DST\";\n GPUBufferUsage[GPUBufferUsage[\"INDEX\"] = 16] = \"INDEX\";\n GPUBufferUsage[GPUBufferUsage[\"INDIRECT\"] = 256] = \"INDIRECT\";\n GPUBufferUsage[GPUBufferUsage[\"MAP_READ\"] = 1] = \"MAP_READ\";\n GPUBufferUsage[GPUBufferUsage[\"MAP_WRITE\"] = 2] = \"MAP_WRITE\";\n GPUBufferUsage[GPUBufferUsage[\"QUERY_RESOLVE\"] = 512] = \"QUERY_RESOLVE\";\n GPUBufferUsage[GPUBufferUsage[\"STORAGE\"] = 128] = \"STORAGE\";\n GPUBufferUsage[GPUBufferUsage[\"UNIFORM\"] = 64] = \"UNIFORM\";\n GPUBufferUsage[GPUBufferUsage[\"VERTEX\"] = 32] = \"VERTEX\";\n})(GPUBufferUsage || (GPUBufferUsage = {}));\n/** Polyfill for the WebGPU `GPUTextureUsage` bitflags (`lib.dom` declares the `GPUTextureUsageFlags` type but not these numeric flag values). Combine with `|` when creating a {@link GPUTexture}. */\nexport var GPUTextureUsage;\n(function (GPUTextureUsage) {\n GPUTextureUsage[GPUTextureUsage[\"COPY_SRC\"] = 1] = \"COPY_SRC\";\n GPUTextureUsage[GPUTextureUsage[\"COPY_DST\"] = 2] = \"COPY_DST\";\n GPUTextureUsage[GPUTextureUsage[\"RENDER_ATTACHMENT\"] = 16] = \"RENDER_ATTACHMENT\";\n GPUTextureUsage[GPUTextureUsage[\"STORAGE_BINDING\"] = 8] = \"STORAGE_BINDING\";\n GPUTextureUsage[GPUTextureUsage[\"TEXTURE_BINDING\"] = 4] = \"TEXTURE_BINDING\";\n})(GPUTextureUsage || (GPUTextureUsage = {}));\n/** Polyfill for the WebGPU `GPUShaderStage` bitflags (`lib.dom` declares the `GPUShaderStageFlags` type but not these numeric flag values). Combine with `|` in {@link GPUBindGroupLayoutEntry.visibility}, e.g. `GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT`. */\nexport var GPUShaderStage;\n(function (GPUShaderStage) {\n GPUShaderStage[GPUShaderStage[\"VERTEX\"] = 1] = \"VERTEX\";\n GPUShaderStage[GPUShaderStage[\"FRAGMENT\"] = 2] = \"FRAGMENT\";\n GPUShaderStage[GPUShaderStage[\"COMPUTE\"] = 4] = \"COMPUTE\";\n})(GPUShaderStage || (GPUShaderStage = {}));\n/** Polyfill for the WebGPU `GPUMapMode` flags (`lib.dom` declares the type but not these numeric values). Used with {@link GPUBuffer.mapAsync}. */\nexport var GPUMapMode;\n(function (GPUMapMode) {\n GPUMapMode[GPUMapMode[\"READ\"] = 1] = \"READ\";\n GPUMapMode[GPUMapMode[\"WRITE\"] = 2] = \"WRITE\";\n})(GPUMapMode || (GPUMapMode = {}));\n","/** Categorizes a bind group by the role of the resources it carries (mesh transforms, camera, texture, light, interaction data), used to look up {@link BindGroupDefinition}s via {@link WGSL.bindings}. */\nexport var WGSLBindingType;\n(function (WGSLBindingType) {\n WGSLBindingType[\"Mesh\"] = \"mesh\";\n WGSLBindingType[\"Camera\"] = \"camera\";\n WGSLBindingType[\"Texture\"] = \"texture\";\n WGSLBindingType[\"Light\"] = \"light\";\n WGSLBindingType[\"Interaction\"] = \"interaction\";\n})(WGSLBindingType || (WGSLBindingType = {}));\n","import { GPUBufferUsage } from './constants';\n//namespace Pacem.Drawing3D.WebGPU {\n/**\n * Low-level factory for typed {@link GPUBuffer}s (vertex, uniform, storage, index) used throughout the WebGPU backend\n * to upload CPU-side geometry/material/uniform data to the GPU. Vertex and index buffers are populated immediately\n * (via `mappedAtCreation`); uniform and storage buffers are allocated empty, sized to `data`, and are expected to be\n * populated later via {@link GPUQueue.writeBuffer} (see {@link Buffer}/`abstractions.ts` and the `fresh`-tracking\n * buffer accessors in `renderablebuffer.ts`).\n */\nexport class Buffers {\n /**\n * Creates a {@link GPUBuffer} usable as a vertex buffer (`VERTEX | COPY_DST`), writing `data` into it immediately.\n * @param device The {@link GPUDevice} to allocate the buffer on.\n * @param data Vertex attribute data (e.g. flattened positions/normals/uv coordinates).\n * @param label Optional debug label.\n */\n static create(device, data, label = '') {\n const buffer = device.createBuffer({\n size: data.byteLength, label,\n usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n mappedAtCreation: true\n });\n new Float32Array(buffer.getMappedRange()).set(data);\n buffer.unmap();\n return buffer;\n }\n static createUniform(device, data, label = '') {\n return device.createBuffer({\n size: data.byteLength, label,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n }\n static createStorage(device, data, label = '') {\n return device.createBuffer({\n size: data.byteLength, label,\n usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,\n });\n }\n /**\n * Creates a {@link GPUBuffer} usable as an index buffer (`INDEX | COPY_DST`), writing `data` into it immediately.\n * @param device The {@link GPUDevice} to allocate the buffer on.\n * @param data 16-bit vertex indices.\n * @param label Optional debug label.\n */\n static createIndexed(device, data, label = '') {\n const buffer = device.createBuffer({\n size: data.byteLength, label,\n usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,\n mappedAtCreation: true\n });\n new Uint16Array(buffer.getMappedRange()).set(data);\n buffer.unmap();\n return buffer;\n }\n}\n/**\n * Helpers to build {@link GPUVertexBufferLayout}s describing how a vertex buffer's contents map to shader `@location`\n * inputs, for use in a {@link GPURenderPipelineDescriptor.vertex} state.\n */\nexport class BufferLayouts {\n static createVertex(shaderLocationStart = 0, size = 3, ...sizes) {\n const attributes = [];\n let fullSize = 0, index = 0;\n for (let sz of [size].concat(sizes)) {\n attributes.push({\n shaderLocation: shaderLocationStart + index,\n offset: fullSize * Float32Array.BYTES_PER_ELEMENT,\n format: `float32x${sz}`,\n });\n fullSize += sz;\n index++;\n }\n return {\n arrayStride: fullSize /* x, y, z */ * Float32Array.BYTES_PER_ELEMENT,\n attributes,\n stepMode: 'vertex'\n };\n }\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { VERTEX_OUTPUT_LOCATION_NORMAL, VERTEX_OUTPUT_LOCATION_VERTEX, VERTEX_OUTPUT_LOCATION_UV, VERTEX_OUTPUT_LOCATION_INDEX, VERTEX_OUTPUT_LOCATION_RAY, VERTEX_OUTPUT_LOCATION_INSTANCE, MATERIAL_GROUP_INDEX, STORAGE_MATERIAL_INDEX, VERTEX_COLOR_REFERENCE, LIGHTING_COLOR_REFERENCE, AMBIENT_COLOR_REFERENCE } from '../constants';\n/** Fallback options used by {@link getBasicMaterialFragmentWgsl}: mirrors the `VERTEX_OUTPUT_LOCATION_*` layout produced by `mesh-vertex.ts` and reads the diffuse color from {@link MATERIAL_GROUP_INDEX}/{@link STORAGE_MATERIAL_INDEX}. */\nconst DefaultBasicMaterialFragmentOptions = {\n outputNormalLocation: VERTEX_OUTPUT_LOCATION_NORMAL,\n outputVertexLocation: VERTEX_OUTPUT_LOCATION_VERTEX,\n outputUvLocation: VERTEX_OUTPUT_LOCATION_UV,\n outputVertexIndexLocation: VERTEX_OUTPUT_LOCATION_INDEX,\n outputRayIndexLocation: VERTEX_OUTPUT_LOCATION_RAY,\n outputInstanceIndexLocation: VERTEX_OUTPUT_LOCATION_INSTANCE,\n storageMaterialGroupIndex: MATERIAL_GROUP_INDEX,\n storageMaterialBindingIndex: STORAGE_MATERIAL_INDEX,\n};\n/** Joins a {@link WGSLFragmentExtra} string array (`definitions`/`bindings`) with CRLF newlines, or returns an empty string when omitted. */\nfunction adaptWGSLStringArray(array = []) {\n return array.join('\\r\\n');\n}\n/**\n * Turns a {@link WGSLFragmentExtra.modifiers} array into a block of WGSL statements to inline into `main`. Entries\n * already ending with `;` are emitted verbatim; bare expressions are wrapped into `${VERTEX_COLOR_REFERENCE} = <expr>;`\n * so lighting/texture snippets (see {@link ambientLight}/{@link directionalLight}/{@link omniLight}/{@link textureMap})\n * can either replace or contribute to the running `color`/`ambient`/`lighting` accumulators.\n */\nfunction adaptWGSLModifierStringArray(array = []) {\n let output = '';\n for (let modifier of array) {\n const trimmed = modifier.trim();\n if (trimmed.endsWith(';')) {\n output += (trimmed + '\\r\\n\\t');\n }\n else {\n output += `${VERTEX_COLOR_REFERENCE} = ${trimmed};\\r\\n\\t`;\n }\n }\n return output;\n}\n/**\n * Composes the fragment shader for the \"basic\" (unlit-by-default) material: it reads a flat `diffuseColor` from a\n * storage buffer, then lets `extensions.modifiers` (lighting/texture snippets) accumulate into the `color`,\n * `ambient` and `lighting` WGSL variables ({@link VERTEX_COLOR_REFERENCE}/{@link AMBIENT_COLOR_REFERENCE}/{@link LIGHTING_COLOR_REFERENCE}).\n * If nothing wrote a `lighting` color (alpha stays `0`), it is treated as fully lit (`white`) so the material\n * renders unshaded when no light snippet is attached; the final output is `color * lighting + ambient`.\n *\n * Splices `extensions.definitions`/`extensions.bindings`/`extensions.modifiers` (see {@link WGSLFragmentExtra}) into\n * the `// definitions`, `// bindings` and body sections of the generated source, alongside the fixed\n * `diffuseColor` storage binding and the `@fragment fn main` signature matching `mesh-vertex.ts`'s `VertexOutput`.\n *\n * @param extensions Extra WGSL `definitions`/`bindings`/`modifiers` to merge in (e.g. lighting/texture contributions).\n * @param options Location/binding overrides; defaults to {@link DefaultBasicMaterialFragmentOptions}, matching the vertex-stage outputs produced by `mesh-vertex.ts`.\n * @returns Complete WGSL fragment-shader source with a single `@fragment fn main` entry point returning `@location(0) vec4f`.\n */\nexport function getBasicMaterialFragmentWgsl(extensions = {}, options = DefaultBasicMaterialFragmentOptions) {\n const opts = Utils.extend({}, DefaultBasicMaterialFragmentOptions, options);\n const definitions = adaptWGSLStringArray(extensions.definitions), bindings = adaptWGSLStringArray(extensions.bindings), modifiers = adaptWGSLModifierStringArray(extensions.modifiers);\n const color = VERTEX_COLOR_REFERENCE, lighting = LIGHTING_COLOR_REFERENCE, ambient = AMBIENT_COLOR_REFERENCE;\n return `// definitions\r\n\r\n${definitions}\r\n\r\n// bindings\r\n@group(${opts.storageMaterialGroupIndex}) @binding(${opts.storageMaterialBindingIndex}) var<storage, read> diffuseColor: vec4f;\r\n${bindings}\r\n\r\nconst empty = vec4f(0,0,0,0);\r\nconst white = vec4f(1,1,1,1);\r\n\r\n@fragment fn main (\r\n @builtin(position) position: vec4f, // clip-space position\r\n @location(${opts.outputNormalLocation}) normal: vec3f, // world-space normal\r\n @location(${opts.outputVertexLocation}) vertex: vec3f, // world-space position\r\n @location(${opts.outputUvLocation}) uv: vec2f,\r\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index: u32, // vertex index,\r\n @location(${opts.outputRayIndexLocation}) ray: vec3f, // ray (eye-to-vertex) vector\r\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\r\n) -> @location(0) vec4f {\r\n var ${color} = diffuseColor;\r\n var ${ambient}: vec4f = empty;\r\n var ${lighting}: vec4f = empty;\r\n\r\n // modifiers\r\n ${modifiers}\r\n\r\n ${lighting} = select(white, ${lighting}, ${lighting}.a > 0);\r\n return ${color} * ${lighting} + ${ambient};\r\n}`;\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { STORAGE_GROUP_INDEX_LINE, STORAGE_MATERIAL_INDEX } from '../constants';\n/** Fallback options used by {@link getLineMaterialFragmentWgsl}: reads instance/vertex index from locations 0/1 (matching `line-vertex.ts`'s `VertexOutput`) and the color storage buffer at {@link STORAGE_GROUP_INDEX_LINE}` + 1`/{@link STORAGE_MATERIAL_INDEX}. */\nconst DefaultLineMaterialFragmentOptions = {\n outputInstanceIndexLocation: 0,\n outputVertexIndexLocation: 1,\n storageMaterialGroupIndex: STORAGE_GROUP_INDEX_LINE + 1,\n storageMaterialBindingIndex: STORAGE_MATERIAL_INDEX,\n};\n/** Joins a {@link WGSLFragmentExtra} string array (`definitions`/`bindings`) with CRLF newlines, or returns an empty string when omitted. */\nfunction adaptWGSLStringArray(array = []) {\n return array.join('\\r\\n');\n}\n/**\n * Turns a {@link WGSLFragmentExtra.modifiers} array into a block of WGSL statements to inline into `main`. Entries\n * already ending with `;` are emitted verbatim (assumed to be full statements); bare expressions are wrapped into\n * `output = <expr>;` so each modifier can either replace or contribute to the fragment's `output` color variable.\n */\nfunction adaptWGSLModifierStringArray(array = []) {\n let output = '';\n for (let modifier of array) {\n const trimmed = modifier.trim();\n if (trimmed.endsWith(';')) {\n output += (trimmed + '\\r\\n');\n }\n else {\n output += `output = ${trimmed};\\r\\n`;\n }\n }\n return output;\n}\n/**\n * Composes the fragment shader for line/polyline rendering: it looks up the current vertex's color from a\n * per-vertex `vertexColors` storage buffer (indexed modulo its length via `getVertexColor`, so a shorter palette\n * cycles/repeats across a longer line) and returns it as `@location(0) vec4f`, honoring any `extensions.modifiers`\n * applied afterwards (e.g. dashing, fading).\n *\n * Splices `extensions.definitions`/`extensions.bindings`/`extensions.modifiers` (see {@link WGSLFragmentExtra},\n * typically produced by the light snippets in this folder) into the `// definitions`, `// bindings` and body\n * sections of the generated source, in addition to the fixed `vertexColors` storage binding.\n *\n * @param extensions Extra WGSL `definitions`/`bindings`/`modifiers` to merge in (e.g. lighting contributions).\n * @param options Binding/location overrides; defaults to {@link DefaultLineMaterialFragmentOptions}, matching the vertex-stage outputs produced by `line-vertex.ts`.\n * @returns Complete WGSL fragment-shader source with a single `@fragment fn main` entry point.\n */\nexport function getLineMaterialFragmentWgsl(extensions = {}, options = DefaultLineMaterialFragmentOptions) {\n const opts = Utils.extend({}, DefaultLineMaterialFragmentOptions, options);\n const definitions = adaptWGSLStringArray(extensions.definitions), bindings = adaptWGSLStringArray(extensions.bindings), modifiers = adaptWGSLModifierStringArray(extensions.modifiers);\n return `// definitions\r\n${definitions}\r\n\r\n// bindings\r\n@group(${options.storageMaterialGroupIndex}) @binding(${options.storageMaterialBindingIndex}) var<storage, read> vertexColors: array<vec4f>;\r\n${bindings}\r\n\r\nfn getVertexColor(index: u32) -> vec4f {\r\n let numColors = arrayLength(&vertexColors);\r\n let vertexColorIndex = index % numColors;\r\n return vertexColors[vertexColorIndex];\r\n}\r\n\r\n@fragment fn main (\r\n @builtin(position) position: vec4f, // clip-space position\r\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance: u32, // instance index\r\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index: u32 // vertex index\r\n) -> @location(0) vec4f {\r\n var output = getVertexColor(index);\r\n\r\n // modifiers\r\n ${modifiers}\r\n\r\n return output;\r\n}`;\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { Colors } from '@pacem/pacem-foundation';\nimport { isBasicMaterial, isLineMaterial, KnownShader } from '../../materials/material';\nimport { Buffers } from './buffers';\nimport { GPUTextureUsage } from './constants';\nimport { getBasicMaterialFragmentWgsl } from './wgsl/basic-material-fragment';\nimport { getLineMaterialFragmentWgsl } from './wgsl/line-material-fragment';\nimport { LABEL_PREFIX } from './constants';\n//namespace Pacem.Drawing3D.WebGPU {\n/**\n * Factory that converts a scene-facing {@link Material3D} (`../../materials/material.ts`) into its WebGPU-side\n * counterpart ({@link Material}, `abstractions.ts`): a {@link BasicMaterial} or {@link LineMaterial} wrapping the GPU\n * buffer/texture/WGSL-fragment logic consumed when building render pipelines (see `pipelinefactory.ts`).\n */\nexport class Materials {\n /**\n * Wraps `material` in the {@link Material} implementation matching its `shader`.\n * @param material The scene material to wrap.\n * @returns A {@link BasicMaterial} or {@link LineMaterial}, depending on `material.shader`.\n * @throws {TypeError} If `material.shader` isn't one of the supported {@link KnownShader} values.\n */\n static create(material) {\n if (isBasicMaterial(material)) {\n return new BasicMaterial(material);\n }\n if (isLineMaterial(material)) {\n return new LineMaterial(material);\n }\n throw new TypeError(`Material type '${material.shader}' not supported.`);\n }\n}\nconst EmptyMaterialWGSLDelegates = {\n// empty delegates\n};\nclass MaterialBase {\n constructor(material) {\n if (Utils.isNull(this.#material = material)) {\n throw new ReferenceError(\"Null material provided.\");\n }\n }\n #material;\n get material() { return this.#material; }\n get wgsl() {\n return EmptyMaterialWGSLDelegates;\n }\n buffer({ device }, label = LABEL_PREFIX + 'material-' + this.shader + '-buffer') {\n const { r, g, b, a } = this._diffuseColor();\n const materialValue = new Float32Array([r, g, b, a]);\n return { buffer: Buffers.createStorage(device, materialValue, label), value: materialValue, version: performance.now() };\n }\n _diffuseColor() {\n const { visible, opacity, color } = this.material;\n if (!(visible ?? true)) {\n return { r: 0, g: 0, b: 0, a: 0 };\n }\n const retval = typeof color === 'string' ? Colors.parse(color) : (color ?? { r: 1, g: 1, b: 1, a: 1 });\n if (opacity >= 0 && opacity <= 1) {\n return Utils.extend(retval, { a: retval.a * opacity });\n }\n return retval;\n }\n}\n/**\n * WebGPU-side counterpart of a {@link BasicMaterial3D}: supplies the diffuse-color storage buffer (inherited from\n * {@link MaterialBase.buffer}) and, when the material has a `texture`, allocates the backing {@link GPUTexture}\n * (pixel data is copied in later by the mesh pipeline's material bind-group setup, see `pipelinefactory.ts`).\n */\nexport class BasicMaterial extends MaterialBase {\n get shader() {\n return KnownShader.Basic;\n }\n constructor(material) {\n super(material);\n if (material.shader != this.shader) {\n throw new TypeError(\"Basic material expected.\");\n }\n }\n /**\n * Allocates the (uninitialized) {@link GPUTexture} for the material's `texture`, if any.\n * @param key Must be `'texture'`; any other {@link MaterialKey} (or a material without a `texture`) yields `null`.\n */\n texture({ device }, key = 'texture') {\n const material = this.material;\n if (key === 'texture' && !Utils.isNull(material.texture)) {\n const texBmp = material.texture;\n const texture = device.createTexture({\n format: 'rgba8unorm',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_DST,\n size: [texBmp.width, texBmp.height],\n });\n return { texture, source: texBmp };\n }\n return null;\n }\n // TODO: put it in the material instance/interface\n /** Basic-material fragment shader WGSL source generator; see `wgsl/basic-material-fragment.ts`. */\n static { this.fragment = getBasicMaterialFragmentWgsl; }\n}\n/**\n * WebGPU-side counterpart of a {@link LineMaterial3D}: supplies the diffuse-color storage buffer (inherited from\n * {@link MaterialBase.buffer}) plus a dedicated `'line'` uniform buffer holding the canvas size and half line-width,\n * consumed by the line vertex shader (`wgsl/line-vertex.ts`).\n */\nexport class LineMaterial extends MaterialBase {\n get shader() {\n return KnownShader.Line;\n }\n constructor(material) {\n super(material);\n if (material.shader != this.shader) {\n throw new TypeError(\"Line material expected.\");\n }\n }\n /**\n * Returns the `'line'` uniform buffer (canvas width/height and half line-width) for `key === 'line'`; otherwise\n * defers to the inherited diffuse-color buffer.\n * @param ctx WebGPU context supplying the device and canvas.\n * @param key Which buffer to build; only `'line'` is handled specially.\n */\n buffer(ctx, key) {\n switch (key) {\n case 'line':\n const { device, canvas } = ctx;\n const lineMaterial = this.material;\n const lineValue = new Float32Array([canvas.clientWidth, canvas.clientHeight, lineMaterial.lineWidth / 2]);\n return { buffer: Buffers.createUniform(device, lineValue, LABEL_PREFIX + 'line-' + this.shader + '-buffer'), value: lineValue, version: performance.now() };\n default:\n return super.buffer(ctx);\n }\n }\n /** Lines have no texture support; always returns `null`. */\n texture(_) {\n return null;\n }\n /** Line-material fragment shader WGSL source generator; see `wgsl/line-material-fragment.ts`. */\n static { this.fragment = getLineMaterialFragmentWgsl; }\n}\n","import { WGSL_VERTEXINPUT_STRUCT_NAME, WGSL_VERTEXOUTPUT_STRUCT_NAME, WGSL_INTERACTIONDATA_STRUCT_NAME } from '../constants';\n//namespace Pacem.Drawing3D.WebGPU {\n/** Placeholder identifiers (`input`, `data`) fed to a {@link VertexInputModifierDelegate}/{@link VertexOutputModifierDelegate} callback when {@link extractMeshVertexModifierFunctionComponents} needs to materialize its WGSL source before parsing it. */\nconst defaultVertexGeometryModifierArgs = ['input', 'data'];\n//const defaultVertexGeometryModifier: VertexInputModifierDelegate = (...defaultVertexGeometryModifierArgs) => {\n// const [inputRef, dataRef] = defaultVertexGeometryModifierArgs;\n// return `fn echo(${inputRef}: ${WGSL_VERTEXINPUT_STRUCT_NAME}, ${dataRef}: ${WGSL_INTERACTIONDATA_STRUCT_NAME}) -> ${WGSL_VERTEXINPUT_STRUCT_NAME} { return ${inputRef}; }`;\n//};\n/**\n * Parses a user-supplied vertex-stage modifier (see {@link VertexInputModifierDelegate}/{@link VertexOutputModifierDelegate},\n * consumed by `mesh-vertex.ts`'s `getMeshVertexWgsl`) into its WGSL function name, parameter names and body, so the\n * caller can inline it as a standalone `fn` definition and reference it by name from the generated vertex shader.\n *\n * If `wgsl` is a callback rather than a raw string, it is first invoked with the placeholder argument names in\n * {@link defaultVertexGeometryModifierArgs} to obtain its WGSL source. The resulting source is then matched against\n * `fn <name>(<arg0>: <ArgType>, <arg1>: InteractionData) -> <ArgType> { <body> }`, where `<ArgType>` must be either\n * `VertexInput` ({@link WGSL_VERTEXINPUT_STRUCT_NAME}) or `VertexOutput` ({@link WGSL_VERTEXOUTPUT_STRUCT_NAME}) and\n * must match on both sides of the signature (an input modifier both takes and returns `VertexInput`, an output\n * modifier both takes and returns `VertexOutput`), with the second parameter always typed\n * {@link WGSL_INTERACTIONDATA_STRUCT_NAME}.\n *\n * @param wgsl Raw WGSL function source, or a delegate that produces it when called with `(inputRef, interactionDataRef)`.\n * @returns The parsed function's `name`, its two parameter `args` (in order), and its `body` (the statements between the braces, trimmed).\n * @throws If the source doesn't match the required single-function signature, or if its parameter types are inconsistent with the modifier contract.\n */\nexport function extractMeshVertexModifierFunctionComponents(wgsl) {\n if (typeof wgsl !== 'string') {\n wgsl = wgsl(...defaultVertexGeometryModifierArgs);\n }\n // regex that remove all the wgsl comments and extract the function name, arguments and body\n const regex = new RegExp(`fn\\\\s+(\\\\w+)\\\\s*\\\\(([^)]*)\\\\)\\\\s*->\\\\s*(${WGSL_VERTEXINPUT_STRUCT_NAME}|${WGSL_VERTEXOUTPUT_STRUCT_NAME})\\\\s*{((.|\\\\n)+)}\\\\s*$`);\n const match = wgsl.match(regex);\n if (match) {\n const name = match[1];\n const args = match[2].split(',').map(arg => {\n const kvp = arg.split(':');\n return { name: kvp[0].trim(), type: kvp[1].trim() };\n });\n if (args.length !== 2\n || args[0].type !== match[3] // the first argument type must match the function return type\n || args[1].type !== WGSL_INTERACTIONDATA_STRUCT_NAME) {\n throw new Error(`Invalid modifier function. Invalid signature types (arg1: ${args[0]?.type}, arg2: ${args[1]?.type})`);\n }\n const body = match[4].trim();\n return { name, args: args.map(i => i.name), body };\n }\n else {\n throw new Error(`Invalid modifier function. Must be a valid WGSL function with the signature: fn name(arg1: ${WGSL_VERTEXINPUT_STRUCT_NAME}|${WGSL_VERTEXOUTPUT_STRUCT_NAME}, arg2: ${WGSL_INTERACTIONDATA_STRUCT_NAME}) -> ${WGSL_VERTEXINPUT_STRUCT_NAME}|${WGSL_VERTEXOUTPUT_STRUCT_NAME}`);\n }\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { VERTEX_OUTPUT_LOCATION_NORMAL, VERTEX_OUTPUT_LOCATION_VERTEX, VERTEX_OUTPUT_LOCATION_UV, VERTEX_OUTPUT_LOCATION_INDEX, VERTEX_OUTPUT_LOCATION_RAY, VERTEX_OUTPUT_LOCATION_INSTANCE, VERTEX_BUFFER_INDEX_MESH_POSITION, VERTEX_BUFFER_INDEX_MESH_NORMAL, VERTEX_BUFFER_INDEX_MESH_UV, UNIFORM_BINDING_INDEX_CAMERA, UNIFORM_GROUP_INDEX_CAMERA, UNIFORM_BINDING_INDEX_TRANSFORM, UNIFORM_GROUP_INDEX_TRANSFORM, UNIFORM_BINDING_INDEX_INTERACTION, UNIFORM_GROUP_INDEX_INTERACTION, WGSL_VERTEXINPUT_STRUCT_NAME, WGSL_VERTEXOUTPUT_STRUCT_NAME, WGSL_INTERACTIONDATA_STRUCT_NAME } from '../constants';\nimport { extractMeshVertexModifierFunctionComponents } from './shared';\n/** Fallback options used by {@link getMeshVertexWgsl}: the standard `VERTEX_OUTPUT_LOCATION_*`/`VERTEX_BUFFER_INDEX_MESH_*` layout and the transform/camera/interaction uniform coordinates shared across mesh pipelines. */\nconst DefaultMeshVertexOptions = {\n outputNormalLocation: VERTEX_OUTPUT_LOCATION_NORMAL,\n outputVertexLocation: VERTEX_OUTPUT_LOCATION_VERTEX,\n outputUvLocation: VERTEX_OUTPUT_LOCATION_UV,\n outputVertexIndexLocation: VERTEX_OUTPUT_LOCATION_INDEX,\n outputInstanceIndexLocation: VERTEX_OUTPUT_LOCATION_INSTANCE,\n outputRayLocation: VERTEX_OUTPUT_LOCATION_RAY,\n inputPositionLocation: VERTEX_BUFFER_INDEX_MESH_POSITION,\n inputNormalLocation: VERTEX_BUFFER_INDEX_MESH_NORMAL,\n inputUvLocation: VERTEX_BUFFER_INDEX_MESH_UV,\n uniformViewBindingIndex: UNIFORM_BINDING_INDEX_CAMERA,\n uniformViewGroupIndex: UNIFORM_GROUP_INDEX_CAMERA,\n uniformWorldBindingIndex: UNIFORM_BINDING_INDEX_TRANSFORM,\n uniformWorldGroupIndex: UNIFORM_GROUP_INDEX_TRANSFORM,\n uniformInteractionBindingIndex: UNIFORM_BINDING_INDEX_INTERACTION,\n uniformInteractionGroupIndex: UNIFORM_GROUP_INDEX_INTERACTION,\n};\n/**\n * Composes the standard vertex shader used to draw mesh geometry: it transforms each vertex position by the\n * world/view/projection matrices, transforms the normal by the (precomputed) normal matrix, passes UVs through\n * unchanged, and computes an eye-to-vertex `ray` (normalized `worldPosition - camera.position`) plus the built-in\n * vertex/instance indices — everything the fragment shaders in this folder (see `basic-material-fragment.ts`,\n * `standard-material-fragment.ts`) expect to find on `VertexOutput`.\n *\n * Declares the `VertexOutput`/`VertexInput`/`Transforms`/`Camera`/`InteractionData` WGSL structs (using the\n * `WGSL_*_STRUCT_NAME` constants so downstream shaders can reference them by the same names), binds the\n * `transforms`/`camera`/`interaction` uniforms at the configured `@group`/`@binding` coordinates, and — if\n * `options.inputModifier`/`options.outputModifier` are supplied (raw WGSL or a {@link VertexInputModifierDelegate}/{@link VertexOutputModifierDelegate}) —\n * parses them via {@link extractMeshVertexModifierFunctionComponents} and inlines them as extra `fn` definitions\n * invoked before returning, letting user code rewrite the input geometry or tweak the computed output per-vertex.\n *\n * @param options Location/binding overrides and optional input/output WGSL modifiers; defaults to {@link DefaultMeshVertexOptions}.\n * @returns Complete WGSL vertex-shader source with a single `@vertex fn main` entry point returning `VertexOutput`.\n */\nexport function getMeshVertexWgsl(options = DefaultMeshVertexOptions) {\n if (options != DefaultMeshVertexOptions) {\n options = Utils.extend({}, DefaultMeshVertexOptions, options);\n }\n // vertex input modifier?\n const modifierInput = options.inputModifier;\n let modifyInstructionInput = 'vertexInput', modifierFnInput = '';\n if (!Utils.isNullOrEmpty(modifierInput)) {\n const { name: modifierName, args: [arg0, arg1], body: modifierBody } = extractMeshVertexModifierFunctionComponents(modifierInput);\n modifyInstructionInput = `${modifierName}(vertexInput, interaction)`;\n modifierFnInput = `fn ${modifierName} (${arg0}: ${WGSL_VERTEXINPUT_STRUCT_NAME}, ${arg1}: ${WGSL_INTERACTIONDATA_STRUCT_NAME}) -> ${WGSL_VERTEXINPUT_STRUCT_NAME} {\r\n ${modifierBody}\r\n}`;\n }\n // vertex output modifier?\n const modifierOutput = options.outputModifier;\n let modifyInstructionOutput = 'output', modifierFnOutput = '';\n if (!Utils.isNullOrEmpty(modifierOutput)) {\n const { name: modifierName, args: [arg0, arg1], body: modifierBody } = extractMeshVertexModifierFunctionComponents(modifierOutput);\n modifyInstructionOutput = `${modifierName}(output, interaction)`;\n modifierFnOutput = `fn ${modifierName} (${arg0}: ${WGSL_VERTEXINPUT_STRUCT_NAME}, ${arg1}: ${WGSL_INTERACTIONDATA_STRUCT_NAME}) -> ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n ${modifierBody}\r\n}`;\n }\n const opts = Utils.extend({}, DefaultMeshVertexOptions, options);\n return `struct ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n @builtin(position) position : vec4f, // clip space position\r\n @location(${opts.outputNormalLocation}) normal: vec3f, // world space normal\r\n @location(${opts.outputVertexLocation}) vertex : vec3f, // world space position\r\n @location(${opts.outputUvLocation}) uv : vec2f, // texture coordinates\r\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index : u32, // vertex index\r\n @location(${opts.outputRayLocation}) ray : vec3f, // eye-to-point vector in world space\r\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\r\n}\r\n\r\nstruct ${WGSL_VERTEXINPUT_STRUCT_NAME} {\r\n @location(${opts.inputPositionLocation}) position: vec3f,\r\n @location(${opts.inputNormalLocation}) normal: vec3f,\r\n @location(${opts.inputUvLocation}) uv: vec2f,\r\n @builtin(vertex_index) index: u32,\r\n @builtin(instance_index) instance: u32,\r\n}\r\n\r\nstruct Transforms {\r\n world: mat4x4f,\r\n normal: mat3x3f,\r\n}\r\n\r\nstruct Camera {\r\n view: mat4x4f,\r\n projection: mat4x4f,\r\n position: vec3f,\r\n}\r\n\r\nstruct ${WGSL_INTERACTIONDATA_STRUCT_NAME} {\r\n // mouse coordinatges in NDC space ([-1,1], [-1,1])\r\n cursor: vec2f,\r\n // canvas size in pixels\r\n resolution: vec2f,\r\n // some phase timer (e.g. time since mouse down, or time since last click, etc.)\r\n time: f32,\r\n}\r\n\r\n${modifierFnInput}\r\n\r\n${modifierFnOutput}\r\n\r\n@group(${opts.uniformWorldGroupIndex}) @binding(${opts.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\r\n@group(${opts.uniformViewGroupIndex}) @binding(${opts.uniformViewBindingIndex}) var<uniform> camera: Camera;\r\n@group(${opts.uniformInteractionGroupIndex}) @binding(${opts.uniformInteractionBindingIndex}) var<uniform> interaction: ${WGSL_INTERACTIONDATA_STRUCT_NAME};\r\n\r\n@vertex fn main(vertexInput: ${WGSL_VERTEXINPUT_STRUCT_NAME}) -> ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n let input = ${modifyInstructionInput};\r\n let position4 = vec4f(input.position, 1.0);\r\n let worldTransform = transforms.world;\r\n let viewProjectionTransform = camera.projection;\r\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\r\n let worldPosition = (worldTransform * position4).xyz;\r\n let output = ${WGSL_VERTEXOUTPUT_STRUCT_NAME}(\r\n worldViewProjectionTransform * position4,\r\n transforms.normal * input.normal,\r\n worldPosition,\r\n input.uv,\r\n input.index,\r\n normalize(worldPosition - camera.position),\r\n input.instance\r\n );\r\n return ${modifyInstructionOutput};\r\n}`;\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { VERTEX_BUFFER_INDEX_MESH_POSITION, UNIFORM_GROUP_INDEX_CAMERA, UNIFORM_BINDING_INDEX_CAMERA, UNIFORM_GROUP_INDEX_TRANSFORM, UNIFORM_BINDING_INDEX_TRANSFORM, STORAGE_GROUP_INDEX_LINE, WGSL_VERTEXOUTPUT_STRUCT_NAME } from '../constants';\n/** Fallback options used by {@link getDefaultLineVertexWgsl}/{@link getFatLineVertexWgsl}: positions/dimensions read from {@link STORAGE_GROUP_INDEX_LINE}, transform/camera uniforms from the shared {@link UNIFORM_GROUP_INDEX_TRANSFORM}/{@link UNIFORM_GROUP_INDEX_CAMERA} coordinates. */\nconst DefaultLineVertexOptions = {\n inputPositionLocation: VERTEX_BUFFER_INDEX_MESH_POSITION,\n outputInstanceIndexLocation: 0,\n outputVertexIndexLocation: 1,\n storagePositionsGroupIndex: STORAGE_GROUP_INDEX_LINE,\n storagePositionsBindingIndex: 0,\n uniformDimensionsGroupIndex: STORAGE_GROUP_INDEX_LINE,\n uniformDimensionsBindingIndex: 1,\n uniformViewGroupIndex: UNIFORM_GROUP_INDEX_CAMERA,\n uniformViewBindingIndex: UNIFORM_BINDING_INDEX_CAMERA,\n uniformWorldGroupIndex: UNIFORM_GROUP_INDEX_TRANSFORM,\n uniformWorldBindingIndex: UNIFORM_BINDING_INDEX_TRANSFORM,\n};\n/** Builds the `VertexOutput` struct shared by both line vertex shaders below: clip-space `position` plus flat `instance`/`index` varyings, at the configured output locations, consumed by `line-material-fragment.ts`. */\nfunction getVertexOutputStructDefinition(opts) {\n return `struct ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n @builtin(position) position : vec4f, // clip space position\r\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\r\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index : u32, // vertex index\r\n}`;\n}\n/**\n * Composes the vertex shader for thin (native-line-width, 1px) line rendering: each vertex reads its `x`/`y`/`z`\n * directly out of a flattened `positions: array<f32>` storage buffer (three floats per point, indexed by the\n * built-in `vertex_index`) rather than a vertex-buffer attribute, then applies the usual world/view/projection\n * transform chain. `instance_index` is passed through unchanged so the fragment stage\n * (`line-material-fragment.ts`) can look up a per-vertex color.\n *\n * Declares `VertexOutput`/`Transforms`/`Camera` WGSL structs and binds `transforms`/`camera`/`positions` at the\n * configured `@group`/`@binding` coordinates.\n *\n * @param options Location/binding overrides; defaults to {@link DefaultLineVertexOptions}.\n * @returns Complete WGSL vertex-shader source with a single `@vertex fn main` entry point returning `VertexOutput`.\n */\nexport function getDefaultLineVertexWgsl(options = DefaultLineVertexOptions) {\n const opts = Utils.extend({}, DefaultLineVertexOptions, options);\n return `${getVertexOutputStructDefinition(opts)}\r\n\r\nstruct Transforms {\r\n world: mat4x4f,\r\n normal: mat3x3f,\r\n}\r\n\r\nstruct Camera {\r\n view: mat4x4f,\r\n projection: mat4x4f,\r\n position: vec3f\r\n}\r\n\r\n@group(${opts.uniformWorldGroupIndex}) @binding(${opts.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\r\n@group(${opts.uniformViewGroupIndex}) @binding(${opts.uniformViewBindingIndex}) var<uniform> camera: Camera;\r\n@group(${opts.storagePositionsGroupIndex}) @binding(${opts.storagePositionsBindingIndex}) var<storage, read> positions: array<f32>;\r\n\r\n@vertex fn main(@builtin(instance_index) instance: u32,\r\n @builtin(vertex_index) index: u32) -> ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n\r\n let x = positions[3u * index + 0u];\r\n let y = positions[3u * index + 1u];\r\n let z = positions[3u * index + 2u];\r\n let position4 = vec4f(x, y, z, 1.0);\r\n let worldTransform = transforms.world;\r\n let viewProjectionTransform = camera.projection;\r\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\r\n let worldPosition = (worldTransform * position4).xyz;\r\n return ${WGSL_VERTEXOUTPUT_STRUCT_NAME}(\r\n worldViewProjectionTransform * position4,\r\n instance,\r\n index);\r\n}`;\n}\n/**\n * Composes the vertex shader for \"fat\" (screen-space-thickness) line rendering: unlike\n * {@link getDefaultLineVertexWgsl}, it expects to be invoked with 6 vertices per line segment (a quad split into\n * two triangles, per the index-to-corner mapping documented in `computeOffsetPosition`'s inline diagram) and\n * offsets each corner perpendicular to the segment's screen-space direction by half of a uniform pixel width, so\n * the line renders at a constant on-screen thickness regardless of distance from the camera.\n *\n * `computeClipPosition` reads a point's `x`/`y`/`z` out of the flattened `positions: array<f32>` storage buffer\n * (as in {@link getDefaultLineVertexWgsl}) and transforms it to clip space; `computeOffsetPosition` then derives\n * the two endpoints' NDC direction, builds a perpendicular offset scaled by `dimensions.halfLineWidth` and the\n * viewport size, and picks/offsets the correct quad corner based on `vertex_index` (segment endpoint is\n * `instance_index`/`instance_index + 1`).\n *\n * Declares `VertexOutput`/`Transforms`/`Camera`/`Pixels` WGSL structs and binds `transforms`/`camera`/`positions`/`dimensions`\n * at the configured `@group`/`@binding` coordinates (`dimensions` carries `viewportWidth`, `viewportHeight` and `halfLineWidth` in pixels).\n *\n * @param options Location/binding overrides; defaults to {@link DefaultLineVertexOptions}.\n * @returns Complete WGSL vertex-shader source with a single `@vertex fn main` entry point returning `VertexOutput`.\n */\nexport function getFatLineVertexWgsl(options = DefaultLineVertexOptions) {\n const opts = Utils.extend({}, DefaultLineVertexOptions, options);\n return `${getVertexOutputStructDefinition(opts)}\r\n\r\nstruct Transforms {\r\n world: mat4x4f,\r\n normal: mat3x3f,\r\n}\r\n\r\nstruct Camera {\r\n view: mat4x4f,\r\n projection: mat4x4f,\r\n position: vec3f\r\n}\r\n\r\nstruct Pixels {\r\n viewportWidth: f32,\r\n viewportHeight: f32,\r\n halfLineWidth: f32\r\n}\r\n\r\n@group(${opts.uniformWorldGroupIndex}) @binding(${opts.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\r\n@group(${opts.uniformViewGroupIndex}) @binding(${opts.uniformViewBindingIndex}) var<uniform> camera: Camera;\r\n@group(${opts.storagePositionsGroupIndex}) @binding(${opts.storagePositionsBindingIndex}) var<storage, read> positions: array<f32>;\r\n@group(${opts.uniformDimensionsGroupIndex}) @binding(${opts.uniformDimensionsBindingIndex}) var<uniform> dimensions: Pixels;\r\n\r\nfn computeClipPosition(index: u32) -> vec4f {\r\n let x = positions[3u * index + 0u];\r\n let y = positions[3u * index + 1u];\r\n let z = positions[3u * index + 2u];\r\n let position4 = vec4f(x, y, z, 1.0);\r\n let worldTransform = transforms.world;\r\n let viewProjectionTransform = camera.projection;\r\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\r\n return worldViewProjectionTransform * position4;\r\n}\r\n\r\nfn computeOffsetPosition(p0: vec4f, p1: vec4f, index: u32) -> vec4f {\r\n\r\n let viewportSize = vec2f(dimensions.viewportWidth, dimensions.viewportHeight);\r\n let normalizedSize = normalize(viewportSize);\r\n let halfThickness = dimensions.halfLineWidth / dimensions.viewportWidth;\r\n let p0ndc = p0.xyz / p0.w;\r\n let p1ndc = p1.xyz / p1.w;\r\n let dir = normalize((p1ndc - p0ndc).xy);\r\n let offsetX = halfThickness * 2.0 / normalizedSize.x;\r\n let offsetY = halfThickness * 2.0 / normalizedSize.y;\r\n\r\n // perp\r\n let perp0 = vec2f(-dir.y * offsetX, dir.x * offsetY);\r\n let perp1 = perp0;\r\n\r\n /*\r\n\r\n position0-0 -----*----- position0-1\r\n |\\\\ |\r\n | \\\\ |\r\n | \\\\ |\r\n | \\\\ |\r\n | \\\\ |\r\n | \\\\ |\r\n | \\\\ |\r\n | \\\\|\r\n position1-0 -----*----- position1-1\r\n\r\n indexes:\r\n ------------\r\n p0-0 -> 0, 3\r\n p0-1 -> 5\r\n p1-0 -> 1\r\n p1-1 -> 2, 4\r\n */\r\n\r\n var outPos: vec2f;\r\n var w = p0.w;\r\n var z = p0.z;\r\n if (index == 0 || index == 3){\r\n outPos = p0ndc.xy - perp0;\r\n }\r\n else if (index == 1){\r\n outPos = p1ndc.xy - perp1;\r\n w = p1.w;\r\n z = p1.z;\r\n }\r\n else if (index == 5){\r\n outPos = p0ndc.xy + perp0;\r\n }\r\n else { //if (index == 2 || index == 4)\r\n outPos = p1ndc.xy + perp1;\r\n w = p1.w;\r\n z = p1.z;\r\n }\r\n\r\n // return vec4f(outPos , 0, 1.0);\r\n return vec4f(outPos * w, z, w);\r\n}\r\n\r\n@vertex fn main(@builtin(instance_index) instance: u32,\r\n @builtin(vertex_index) index: u32) -> ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\r\n\r\n // vertex index starting at 1\r\n let position0 = computeClipPosition(instance);\r\n let position1 = computeClipPosition(instance + 1);\r\n\r\n // apply offset\r\n let position = computeOffsetPosition(position0, position1, index);\r\n\r\n return ${WGSL_VERTEXOUTPUT_STRUCT_NAME}(\r\n position,\r\n instance,\r\n index\r\n );\r\n}`;\n}\n","import { UNIFORM_GROUP_INDEX_COLORPICKING } from '../constants';\n//namespace Pacem.Drawing3D.WebGPU {\n/**\n * Composes the fragment shader used by the {@link Raycaster} off-screen pass for GPU-based, color-coded object\n * picking: instead of computing a lit color, it simply outputs the renderable's own numeric `id` (bound as a\n * `ColorPicker` uniform) into a single-channel `r32uint` render target, so the CPU side can later read back the\n * pixel under the pointer and resolve it to the {@link Renderable} that was drawn there.\n *\n * Declares the `ColorPicker` struct (`id: u32`) and its `var<uniform>` binding at `@binding(0)` within the given\n * `@group`; unlike the material fragments in this folder it takes no {@link WGSLFragmentExtra} — it is not meant to\n * be extended with lighting/texture snippets.\n *\n * @param groupIndex `@group` index at which the per-renderable `ColorPicker` uniform is bound; defaults to {@link UNIFORM_GROUP_INDEX_COLORPICKING}.\n * @returns Complete WGSL fragment-shader source with a single `@fragment fn main` entry point returning `@location(0) u32`.\n */\nexport function getColorPickingFragmentWgsl(groupIndex = UNIFORM_GROUP_INDEX_COLORPICKING) {\n return `struct ColorPicker {\r\n id: u32,\r\n };\r\n\r\n @group(${groupIndex}) @binding(0) var<uniform> colorPicker: ColorPicker;\r\n\r\n @fragment\r\n fn main(@builtin(position) position: vec4f) -> @location(0) u32 {\r\n return colorPicker.id;\r\n }\r\n `;\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { SAMPLER_BINDING_INDEX } from '../constants';\n/** Fallback references used by {@link textureMap} when not overridden: reads UV coordinates from the `uv` varying. */\nconst DefaultTextureMapReferences = {\n uv: 'uv',\n};\n/**\n * Builds a {@link WGSLFragmentExtra} that samples a 2D texture and tints it by a base color: `textureSample(tex, sampler, uv) * inputColor`.\n * Declares a fresh `sampler`/`texture_2d<f32>` pair (uniquely named per call via {@link Utils.uniqueCode}) as `bindings`\n * at consecutive `@binding` indices (`binding` for the sampler, `binding + 1` for the texture) within the given\n * `@group`, and emits no `definitions`.\n *\n * As `modifiers`, either a single bare sample-and-multiply expression (single consumer), or, when\n * `references.outputColors` lists multiple output variable names, one assignment per name — the first computes the\n * sample, the rest copy it — so several downstream color channels (e.g. diffuse and ambient) can share one texture fetch.\n *\n * @param references WGSL identifiers for the UV coordinates (`uv`, defaults to `'uv'`), the base color to tint (`inputColor`, required) and, optionally, one or more output variable names (`outputColors`) to assign the sampled color to.\n * @param group `@group` index at which the generated sampler/texture pair is bound.\n * @param binding `@binding` index (within `group`) for the sampler; the texture is bound at `binding + 1`. Defaults to {@link SAMPLER_BINDING_INDEX}.\n * @returns Fragment-shader `bindings`/`modifiers` meant to be spliced into a material fragment shader (see {@link getBasicMaterialFragmentWgsl}/{@link getStandardMaterialFragmentWgsl}).\n */\nexport function textureMap(references = DefaultTextureMapReferences, group, binding = SAMPLER_BINDING_INDEX) {\n const key = Utils.uniqueCode();\n const samplerReference = `sampler_${key}`;\n const texReference = `tex_${key}`;\n const ref = Utils.extend({}, DefaultTextureMapReferences, references);\n const inputColor = ref.inputColor, outputColors = ref.outputColors;\n if (Utils.isNullOrEmpty(inputColor)) {\n throw new Error('Must provide either input and output vertex color parameter names.');\n }\n const modifiers = outputColors ?\n outputColors.map((name, index) => index === 0 ? `${name} = textureSample(${texReference}, ${samplerReference}, ${ref.uv}) * ${inputColor};` : `${name} = ${outputColors[0]};`)\n : [`textureSample(${texReference}, ${samplerReference}, ${ref.uv}) * ${inputColor}`];\n return {\n // type definitions\n //definition: '',\n // bindings\n bindings: [`@group(${group}) @binding(${binding}) var ${samplerReference}: sampler;`,\n `@group(${group}) @binding(${binding + 1}) var ${texReference}: texture_2d<f32>;`],\n // modifiers\n modifiers\n };\n}\n","import { Utils } from '@pacem/pacem-core';\n/** Fallback references used by {@link directionalLight} when not overridden: reads the world-space `normal` varying and treats the base color as `white`. */\nconst DefaultDirectionalLightReferences = {\n normal: 'normal', inputColor: 'white'\n};\n/**\n * Builds a {@link WGSLFragmentExtra} implementing a directional (sun-like, parallel-rays) light: a Lambertian\n * diffuse term computed from the dot product between the surface normal and the (negated, normalized) light\n * direction, modulated by the light's color and intensity. Unlike {@link omniLight}, it carries no position/falloff\n * or specular term.\n *\n * Emits, as `definitions`, a `DirectionalLight` struct (`color: vec4f`, `direction: vec3f`, `intensity: f32`) and a\n * `computeDirectional` helper function; as `bindings`, a `var<uniform>` declaration for the light data at the given\n * `@group`/`@binding` coordinates; and, as `modifiers`, either a statement that accumulates the contribution into\n * `references.outputColor` (`+=`) when provided, or a bare expression otherwise (for single-light use sites that\n * assign it directly).\n *\n * @param references WGSL identifiers for the surface normal (`normal`), the base color to shade (`inputColor`) and, optionally, the color variable to accumulate into (`outputColor`).\n * @param group `@group` index at which the generated `DirectionalLight` uniform is bound.\n * @param binding `@binding` index (within `group`) at which the generated `DirectionalLight` uniform is bound.\n * @returns Fragment-shader `definitions`/`bindings`/`modifiers` meant to be spliced into a material fragment shader (see {@link getBasicMaterialFragmentWgsl}/{@link getStandardMaterialFragmentWgsl}).\n */\nexport function directionalLight(references, group, binding) {\n const key = Utils.uniqueCode();\n const lightReference = `directional_${key}`;\n const ref = Utils.extend({}, DefaultDirectionalLightReferences, references);\n const inputColor = ref.inputColor, outputColor = ref.outputColor, normal = ref.normal ?? 'normal';\n if (Utils.isNullOrEmpty(inputColor)) {\n throw new Error('Must provide input vertex color parameter name.');\n }\n return {\n // type definitions\n definitions: [`struct DirectionalLight {\r\n color: vec4f,\r\n direction: vec3f,\r\n intensity: f32\r\n}`, `fn computeDirectional(normal: vec3f, color: vec4f, light: DirectionalLight) -> vec4f {\r\n let n = normalize(normal);\r\n let d = normalize(light.direction);\r\n let factor = light.intensity * .5 * (1.0 + dot(n, -d));\r\n let output = color.rgb * light.color.rgb * factor;\r\n return vec4f(output, color.a);\r\n}`],\n // bindings\n bindings: [`@group(${group}) @binding(${binding}) var<uniform> ${lightReference}: DirectionalLight;`],\n // modifiers\n modifiers: outputColor ? [`${outputColor} += computeDirectional(${normal}, ${inputColor}, ${lightReference});`] : [`computeDirectional(${normal}, ${inputColor}, ${lightReference})`]\n };\n}\n","import { Utils } from '@pacem/pacem-core';\n/** Fallback references used by {@link omniLight} when not overridden: reads the world-space `normal`/`vertex`/`ray` varyings, treats the base color as `white` and disables the specular term (`empty` color, `0` shininess). */\nconst DefaultOmniLightReferences = {\n normal: 'normal', position: 'vertex', ray: 'ray', inputColor: 'white', specularColor: 'empty', shininess: '0'\n};\n/**\n * Builds a {@link WGSLFragmentExtra} implementing an omnidirectional (point) light with a Blinn-Phong-like\n * specular term: a Lambertian diffuse factor from the normal-to-light direction (light position minus surface\n * position, i.e. no distance falloff), plus a specular highlight from the half-vector between the light direction\n * and the eye-to-vertex ray, scaled by `shininess`. Unlike {@link directionalLight}, the light has a `position` in\n * world space rather than a constant direction.\n *\n * Emits, as `definitions`, an `OmniLight` struct (`color: vec4f`, `position: vec3f`, `intensity: f32`) and a\n * `computeOmni` helper function; as `bindings`, a `var<uniform>` declaration for the light data at the given\n * `@group`/`@binding` coordinates; and, as `modifiers`, either a statement that accumulates the contribution into\n * `references.outputColor` (`+=`) when provided, or a bare expression otherwise.\n *\n * @param references WGSL identifiers for the surface normal (`normal`), world-space position (`position`), eye-to-vertex ray (`ray`), base color (`inputColor`), specular color (`specularColor`), shininess factor (`shininess`) and, optionally, the color variable to accumulate into (`outputColor`).\n * @param group `@group` index at which the generated `OmniLight` uniform is bound.\n * @param binding `@binding` index (within `group`) at which the generated `OmniLight` uniform is bound.\n * @returns Fragment-shader `definitions`/`bindings`/`modifiers` meant to be spliced into a material fragment shader (see {@link getBasicMaterialFragmentWgsl}/{@link getStandardMaterialFragmentWgsl}).\n */\nexport function omniLight(references, group, binding) {\n const key = Utils.uniqueCode();\n const lightReference = `omni_${key}`;\n const ref = Utils.extend({}, DefaultOmniLightReferences, references);\n const inputColor = ref.inputColor, outputColor = ref.outputColor, normal = ref.normal, ray = ref.ray, vertex = ref.position, shininess = ref.shininess, specularColor = ref.specularColor;\n if (Utils.isNullOrEmpty(inputColor)) {\n throw new Error('Must provide input vertex color parameter name.');\n }\n return {\n // type definitions\n definitions: [`struct OmniLight {\r\n color: vec4f,\r\n position: vec3f,\r\n intensity: f32\r\n}`, `fn computeOmni(position: vec3f, normal: vec3f, ray: vec3f, color: vec4f, specularColor: vec4f, shininess: f32, light: OmniLight) -> vec4f {\r\n\r\n // color\r\n let n = normalize(normal);\r\n let d = normalize(position - light.position);\r\n let factor = light.intensity * .5 * (1.0 + dot(n, -d));\r\n\r\n // specular\r\n let r = normalize(ray);\r\n let halfVector = normalize(d + r);\r\n let specular = specularColor.rgb * shininess * dot(n, -halfVector);\r\n\r\n let output = color.rgb * light.color.rgb * factor + specular;\r\n return vec4f(output, color.a);\r\n}`],\n // bindings\n bindings: [`@group(${group}) @binding(${binding}) var<uniform> ${lightReference}: OmniLight;`],\n // modifiers\n modifiers: outputColor ? [`${outputColor} += computeOmni(${vertex}, ${normal}, ${ray}, ${inputColor}, ${specularColor}, ${shininess}, ${lightReference});`] : [`computeOmni(${vertex}, ${normal}, ${ray}, ${inputColor}, ${specularColor}, ${shininess}, ${lightReference})`]\n };\n}\n","import { Utils } from '@pacem/pacem-core';\n/**\n * Builds a {@link WGSLFragmentExtra} implementing the ambient light contribution to a fragment shader: it multiplies the\n * fragment's base color by a uniform light color/intensity, uniformly across the surface (no dependency on normal or\n * view direction, unlike {@link directionalLight}/{@link omniLight}).\n *\n * Emits, as `definitions`, an `AmbientLight` struct (`color: vec4f`, `intensity: f32`) and a `computeAmbient` helper\n * function; as `bindings`, a `var<uniform>` declaration for the light data at the given `@group`/`@binding`\n * coordinates; and, as `modifiers`, a statement assigning the computed color into `references.outputColor`.\n *\n * @param references WGSL identifiers for the color to shade (`inputColor`) and the variable to assign the ambient-lit result to (`outputColor`). Both are required.\n * @param group `@group` index at which the generated `AmbientLight` uniform is bound.\n * @param binding `@binding` index (within `group`) at which the generated `AmbientLight` uniform is bound.\n * @returns Fragment-shader `definitions`/`bindings`/`modifiers` meant to be spliced into a material fragment shader (see {@link getBasicMaterialFragmentWgsl}/{@link getStandardMaterialFragmentWgsl}).\n */\nexport function ambientLight(references, group, binding) {\n const key = Utils.uniqueCode();\n const lightReference = `ambient_${key}`;\n const inputColor = references.inputColor, outputColor = references.outputColor;\n if (Utils.isNullOrEmpty(inputColor) || Utils.isNullOrEmpty(outputColor)) {\n throw new Error('Must provide either input and output vertex color parameter names.');\n }\n return {\n // type definitions\n definitions: [`struct AmbientLight {\r\n color: vec4f,\r\n intensity: f32\r\n}`, `fn computeAmbient(color: vec4f, light: AmbientLight) -> vec4f {\r\n return vec4f(light.intensity * color.rgb * light.color.rgb, color.a);\r\n}`],\n // bindings\n bindings: [`@group(${group}) @binding(${binding}) var<uniform> ${lightReference}: AmbientLight;`],\n // modifiers\n modifiers: [`${outputColor} = computeAmbient(${inputColor}, ${lightReference});`]\n };\n}\n","import { Geometry } from '@pacem/pacem-numerical';\nimport { isPerspectiveCamera, isOrthographicCamera } from '../../types';\n//namespace Pacem.Drawing3D.WebGPU {\nconst Vector3D = Geometry.LinearAlgebra.Vector3D;\nconst Matrix3D = Geometry.LinearAlgebra.Matrix3D;\nconst DEFAULT_SIZE = { width: 1, height: 1 };\n/**\n * Factory that converts a scene-facing {@link Camera3D} (`../../types.ts`) into its WebGPU-side counterpart\n * ({@link Camera}, `abstractions.ts`): either a {@link PerspectiveCamera} or an {@link OrthographicCamera}, exposing\n * `view()`/`projection()` matrices consumed when building the camera's uniform buffer (see `renderablebuffer.ts`).\n */\nexport class Cameras {\n /**\n * Creates a new webgpu {@link Camera} given a canonic one.\n * @param camera\n * @returns\n */\n static create(camera) {\n if (isPerspectiveCamera(camera)) {\n return new PerspectiveCamera(camera);\n }\n if (isOrthographicCamera(camera)) {\n return new OrthographicCamera(camera);\n }\n throw new TypeError(`Camera type '${camera['type']}' not supported.`);\n }\n}\n/**\n * Camera orientation 4x4 matrix.\n * @param eye\n * @param target\n * @param up\n * @returns\n */\nfunction view(eye, target, up) {\n const z = /* inverse forward is eye -> target */ Vector3D.subtract(target, eye);\n const x = Vector3D.cross(up, z);\n const y = Vector3D.cross(z, x);\n Vector3D.normalize(x);\n Vector3D.normalize(z);\n Vector3D.normalize(y);\n const offsetX = -Vector3D.dot(x, eye);\n const offsetY = -Vector3D.dot(y, eye);\n const offsetZ = -Vector3D.dot(z, eye);\n return Matrix3D.from(x.x, y.x, z.x, 0, x.y, y.y, z.y, 0, x.z, y.z, z.z, 0, offsetX, offsetY, offsetZ, 1);\n}\nfunction assertNearFarCorrectness(near, far) {\n if (near <= 0) {\n throw new RangeError(\"Near plane distance must be positive.\");\n }\n if (far <= near) {\n throw new RangeError(\"Far plane distance must be greater than near plane distance.\");\n }\n}\n/**\n * Perspective transformation 4x4 matrix.\n * @param fovY Vertical field of view (in radians)\n * @param aspectRatio Frustum aspect ratio\n * @param near Clipping plane near distance (not z coordinate)\n * @param far Clipping plane far distance (not z coordinate)\n * @returns\n */\nfunction perspective(fovY = 120, aspectRatio = 1, near = 0.1, far = 1000) {\n assertNearFarCorrectness(near, far);\n const scale = Math.tan(.5 * Math.PI * (1 - fovY / 180));\n const m11 = scale / aspectRatio;\n const finitelyFar = Number.isFinite(far);\n const m33 = finitelyFar ? (far / (near - far)) : -1;\n const offsetZ = finitelyFar ? (far * near / (near - far)) : -near;\n return Matrix3D.from(m11, 0, 0, 0, 0, scale, 0, 0, 0, 0, m33, -1, 0, 0, offsetZ, 0);\n}\n/**\n * Othographic transformation 4x4 matrix.\n * @param left Viewport's left side\n * @param right Viewport's right side\n * @param top Viewport's top side\n * @param bottom Viewport's bottom side\n * @param near Clipping plane near distance\n * @param far Clipping plane far distance\n */\nfunction orthographic(left, right, top, bottom, near = .1, far = 1000) {\n assertNearFarCorrectness(near, far);\n return Matrix3D.from(2 / (right - left), 0, 0, 0, 0, 2 / (top - bottom), 0, 0, 0, 0, 1 / (near - far), 0, (left + right) / (left - right), (top + bottom) / (bottom - top), near / (near - far), 1);\n}\n/**\n * WebGPU-side counterpart of an {@link OrthographicCamera3D}: computes the view matrix from `position`/`lookAt`/`up`,\n * and an orthographic projection matrix from the camera's `left`/`right`/`top`/`bottom`/`near`/`far` planes, scaled\n * by the eye-to-target distance and (if given) the viewport aspect ratio.\n */\nexport class OrthographicCamera {\n constructor(_camera) {\n this._camera = _camera;\n }\n /** Computes the view matrix for `camera`; see {@link view} for a bound instance-method equivalent. */\n static view(camera) {\n return view(camera.position, camera.lookAt, camera.up);\n }\n /**\n * Computes the orthographic projection matrix for `camera`.\n * @param camera Source orthographic camera.\n * @param size Viewport size, used to correct the projected frustum for aspect ratio; defaults to a 1:1 viewport.\n */\n static projection(camera, size = DEFAULT_SIZE) {\n const eye = camera.position, target = camera.lookAt;\n const z = Vector3D.subtract(target, eye);\n Vector3D.normalize(z);\n const zoom = Vector3D.dot(z, eye);\n const { height, width } = size;\n const ratio = width / height;\n const factor = .5 * zoom;\n const w = factor * ratio, h = factor;\n const top = camera.top * h, bottom = camera.bottom * h;\n const right = camera.right * w, left = camera.left * w;\n return orthographic(left, right, top, bottom, camera.near, camera.far);\n }\n /** Computes the view matrix for the wrapped camera. See {@link Camera.view}. */\n view() {\n return OrthographicCamera.view(this._camera);\n }\n /** Computes the orthographic projection matrix for the wrapped camera. See {@link Camera.projection}. */\n projection(size) {\n return OrthographicCamera.projection(this._camera, size);\n }\n}\n/**\n * WebGPU-side counterpart of a {@link PerspectiveCamera3D}: computes the view matrix from `position`/`lookAt`/`up`,\n * and a perspective projection matrix from the camera's vertical field of view, aspect ratio and near/far clip planes.\n */\nexport class PerspectiveCamera {\n constructor(_camera) {\n this._camera = _camera;\n }\n /** Computes the view matrix for `camera`; see {@link view} for a bound instance-method equivalent. */\n static view(camera) {\n return view(camera.position, camera.lookAt, camera.up);\n }\n /**\n * Computes the perspective projection matrix for `camera`, combining its `aspectRatio` with `size`'s\n * (`size.width / size.height`) to correct for non-square viewports.\n * @param camera Source perspective camera.\n * @param size Viewport size, used to correct for aspect ratio; defaults to a 1:1 viewport.\n */\n static projection(camera, size = DEFAULT_SIZE) {\n const aspectRatio = (size.width / size.height) / camera.aspectRatio;\n return perspective(camera.fov, aspectRatio, camera.near, camera.far);\n }\n /** Computes the view matrix for the wrapped camera. See {@link Camera.view}. */\n view() {\n return PerspectiveCamera.view(this._camera);\n }\n /** Computes the perspective projection matrix for the wrapped camera. See {@link Camera.projection}. */\n projection(size) {\n return PerspectiveCamera.projection(this._camera, size);\n }\n}\n","import { Utils } from '@pacem/pacem-core';\nimport { Colors } from '@pacem/pacem-foundation';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { StalePropertyFlag, isGroup, isMesh, isCamera, isLight, isGeometry, isInteraction, isMeshGeometry } from '../../types';\nimport { KnownShader, isMaterial } from '../../materials/material';\nimport { AdapterUtils } from '../shared';\nimport { U32_MAX, LABEL_PREFIX } from './constants';\nimport { Buffers } from './buffers';\nimport { Cameras } from './cameras';\nimport { Materials } from './materials';\n//namespace Pacem.Drawing3D.WebGPU {\nconst Vector3D = Geometry.LinearAlgebra.Vector3D;\nconst Matrix3D = Geometry.LinearAlgebra.Matrix3D;\nfunction throwBufferRequestError(key, type) {\n if (typeof type === 'function') {\n type = type.name;\n }\n throw new RangeError(`Buffer '${key}' not available for ${type}.`);\n}\nfunction createRenderableBuffer(item, parent, ...args) {\n item.stage ??= parent?.item.stage;\n if (isGroup(item)) {\n item.key ??= 'group_' + Utils.uniqueCode();\n return new RenderableGroupBuffer(item, parent, ...args);\n }\n if (isMesh(item)) {\n item.key ??= 'mesh_' + Utils.uniqueCode();\n return new RenderableMeshBuffer(item, parent, ...args);\n }\n if (isCamera(item)) {\n item.key ??= 'camera_' + Utils.uniqueCode();\n return new RenderableCameraBuffer(item /*, parent*/);\n }\n if (isLight(item)) {\n item.key ??= 'light_' + item.type + '_' + Utils.uniqueCode();\n return new RenderableLightBuffer(item /*, parent*/);\n }\n throw new Error(`Renderable is not supported.`);\n}\n/**\n * Drives one render (or raycast) pass over a fixed snapshot of the scene: iterates the meshes accumulated in a\n * {@link RenderableBufferSet}, invoking a callback for each mesh together with the shared camera and lights, and\n * seals (clears the stale-property flags of) every buffer that participated in a successful draw. Rebuilt by\n * `renderer.ts`'s `RendererClass` whenever the scene graph changes (see `update`), and driven once per frame by\n * `RendererClass.render`/`RendererClass.raycast`.\n */\nexport class RenderLooper {\n constructor(_set) {\n this._set = _set;\n }\n /** @internal */\n get items() {\n return this._set;\n }\n /**\n * Invokes `render(mesh, camera, lights)` for every non-disposed mesh buffer in the set, skipping meshes for\n * which `render` returns `false` (e.g. hidden items). After each successful call, clears the\n * {@link StalePropertyFlag}s on the mesh buffer and, the first time each occurs, on the shared camera/light\n * buffers; group buffers are always sealed at the end regardless of whether any mesh rendered.\n * @param render Callback invoked once per mesh with its buffer, the (single) camera buffer and all light buffers; return `false` to skip that mesh (its flags are left untouched).\n */\n loop(render) {\n const { meshes, cameras, groups, lights } = this._set;\n const camera = cameras[0];\n let cameraDone = false, lightsDone = false;\n for (let mesh of meshes) {\n if (mesh.disposed) {\n continue;\n }\n // execute\n const rendered = render(mesh, camera, lights);\n if (!rendered) {\n continue;\n }\n // seal buffers\n RenderableBuffers.clearFlags(mesh);\n if (!cameraDone) {\n RenderableBuffers.clearFlags(camera);\n cameraDone = true;\n }\n if (!lightsDone) {\n lights.forEach(light => RenderableBuffers.clearFlags(light));\n lightsDone = true;\n }\n }\n for (let group of groups) {\n // seal group buffers\n RenderableBuffers.clearFlags(group);\n }\n }\n}\n/**\n * Factory for {@link ManagedBuffer}s wrapping non-{@link Renderable} scene data — geometry ({@link NodeGeometry}/\n * {@link MeshGeometry}), material ({@link Material3D}) and interaction (pointer/time/viewport) state — so this data\n * can be shared and cached across the {@link RenderableBuffer}s that reference it (e.g. a geometry instance reused by\n * several meshes), rather than re-uploaded to the GPU per mesh.\n */\nexport class ManagedBuffers {\n /**\n * Wraps `item` in the {@link ManagedBuffer} implementation matching its runtime type.\n * @param item A geometry ({@link NodeGeometry}/{@link MeshGeometry}), material ({@link Material3D}) or {@link Interaction} instance.\n * @throws {Error} If `item`'s type isn't recognized.\n */\n static create(item) {\n if (isGeometry(item)) {\n item.key ??= 'geometry_' + Utils.uniqueCode();\n return new GeometryBuffer(item);\n }\n if (isMaterial(item)) {\n return new MaterialBuffer(item);\n }\n if (isInteraction(item)) {\n return new InteractionBuffer(item);\n }\n throw new Error(`Object is not supported.`);\n }\n}\n/**\n * Factory and stale-flag utilities for {@link RenderableBuffer}s wrapping {@link Renderable} scene items (groups,\n * meshes, cameras, lights). Callers (see `renderer.ts`'s `RendererClass`) cache one buffer per item across frames, so\n * the underlying GPU resources persist until the item is removed from the scene.\n */\nexport class RenderableBuffers {\n /**\n * Wraps `item` in the {@link RenderableBuffer} implementation matching its kind (group/mesh/camera/light),\n * recursively wrapping a group's children.\n * @param item The scene renderable to wrap.\n * @param args Extra constructor arguments forwarded to mesh buffers (the shared geometry/material {@link ManagedBuffer} caches; see `renderer.ts`).\n * @throws {Error} If `item`'s type isn't recognized.\n */\n static create(item, ...args) {\n return createRenderableBuffer(item, null, ...args);\n }\n /**\n * Clears the {@link StalePropertyFlag}s on `buffer`'s underlying item, marking it as up to date until the next\n * scene-graph mutation flags it again.\n * @param buffer The buffer whose item's flags should be cleared.\n * @param includeParent Whether to also clear the parent group buffer's flags, recursively up the hierarchy.\n */\n static clearFlags(buffer, includeParent = false) {\n buffer.item.flags.splice(0);\n if (includeParent) {\n const bufferBase = buffer;\n if (!Utils.isNull(bufferBase.parent)) {\n RenderableBuffers.clearFlags(bufferBase.parent, true);\n }\n }\n }\n /**\n * Returns the union of `buffer`'s own {@link StalePropertyFlag}s with those of all its ancestor group buffers —\n * the effective set of \"what changed\" a re-render of this item needs to account for.\n * @param buffer The buffer to compute the effective flag set for.\n */\n static allFlags(buffer) {\n const bufferBase = buffer;\n const parentBufferBase = bufferBase.parent;\n const parentFlags = Utils.isNull(parentBufferBase) ? [] : RenderableBuffers.allFlags(parentBufferBase);\n return bufferBase.item.flags.union(parentFlags);\n }\n}\nclass ManagedBufferBase {\n #item;\n constructor(item) {\n this.#item = item;\n }\n get item() {\n return this.#item;\n }\n #lock = false;\n lock() {\n this.#lock = true;\n }\n unlock() {\n this.#lock = false;\n const garbage = this.#garbage;\n while (garbage.length > 0) {\n const obj = garbage.shift();\n this._destroyUnsafe(obj);\n }\n }\n #garbage = [];\n _destroyUnsafe(obj) {\n if ('texture' in obj) {\n obj.texture.destroy();\n }\n else if ('buffer' in obj) {\n obj.buffer.destroy();\n }\n }\n destroySafely(...objects) {\n for (let obj of Array.from(objects).concat(...this.#garbage.splice(0))) {\n if (!obj) {\n continue;\n }\n if (this.#lock) {\n this.#garbage.push(obj);\n }\n else {\n this._destroyUnsafe(obj);\n }\n }\n }\n #disposed = false;\n destroy() {\n this.dispose();\n this.#disposed = true;\n }\n get disposed() {\n return this.#disposed;\n }\n}\nclass RenderableBufferBase extends ManagedBufferBase {\n constructor(item, parentBuffer) {\n super(item);\n this.#parent = parentBuffer;\n this.#u32id = Utils.uniqueId() % U32_MAX;\n }\n #u32id;\n #parent;\n #u32idBuffer = new Map();\n get parent() {\n return this.#parent;\n }\n get id() {\n return this.#u32id;\n }\n allFlags() {\n const parent = this.parent;\n // TODO: this one line is a perf hog!\n return this.item.flags.union(parent?.allFlags() ?? []);\n }\n buildParentWorldTransform() {\n let worldMatrix = Matrix3D.identity();\n let step = this;\n while (!Utils.isNull(step.parent)) {\n const parentItem = step.parent.item;\n const parentItemMatrix = Matrix3D.translate(parentItem.transformMatrix ?? Matrix3D.identity(), parentItem.position ?? Vector3D.zero());\n worldMatrix = Matrix3D.multiply(worldMatrix, parentItemMatrix);\n step = step.parent;\n }\n return worldMatrix;\n }\n buildWorldTransform() {\n const itemMatrix = Matrix3D.translate(this.item.transformMatrix ?? Matrix3D.identity(), this.item.position ?? Vector3D.zero());\n const parentWorldMatrix = this.buildParentWorldTransform();\n return Matrix3D.multiply(itemMatrix, parentWorldMatrix);\n }\n #versions = new Map();\n version(key) {\n return this.#versions.get(key) ?? 0;\n }\n buffer(context, key) {\n if (key === 'u32id') {\n const u32idBuffer = this.#u32idBuffer;\n const { pipeline, device } = context;\n if (u32idBuffer.has(pipeline)) {\n return Utils.extend({ fresh: false }, u32idBuffer.get(pipeline));\n }\n const u32idBufferValue = new Uint32Array([this.id]);\n const u32idBufferBuffer = Buffers.createUniform(device, u32idBufferValue, LABEL_PREFIX + 'u32id-buffer');\n const retval = Utils.extend({ buffer: u32idBufferBuffer, value: u32idBufferValue, version: performance.now() }, { fresh: true });\n this.#u32idBuffer.set(pipeline, retval);\n return retval;\n }\n const retval = this.specificBuffer(context, key);\n this.#versions.set(key, retval.version);\n return retval;\n }\n}\nconst DefaultMaterial = { shader: KnownShader.Basic, color: '#c0c0c0', flags: [] };\n// #region GROUP\nclass RenderableGroupBuffer extends RenderableBufferBase {\n #children;\n constructor(group, parent, ...args) {\n super(group, parent);\n this.#children = group.childRenderables.map(i => createRenderableBuffer(i, this, ...args));\n }\n get children() {\n return this.#children;\n }\n specificBuffer(ctx, key) {\n return null;\n }\n texture(_) {\n throw new Error(\"Method not implemented.\");\n }\n dispose() {\n this.#children.forEach(i => i.destroy());\n //this.#children = null;\n }\n}\n// #endregion\n// #region CAMERA\nclass RenderableCameraBuffer extends RenderableBufferBase {\n #viewBag = new Map();\n #view;\n constructor(camera) {\n super(camera);\n }\n texture(_) {\n throw new Error(\"Method not implemented.\");\n }\n specificBuffer(context, key) {\n //const camera = this.item;\n let fresh = false;\n if (this.allFlags().length > 0 || Utils.isNull(this.#view)) {\n fresh = true;\n this.#viewBag.clear();\n this._rebuildMatrices(context);\n }\n const { pipeline } = context;\n if (!this.#viewBag.has(pipeline)) {\n fresh = true;\n this.#viewBag.set(pipeline, this.#view);\n }\n RenderableBuffers.clearFlags(this);\n switch (key) {\n case 'cameraViewTransform':\n return Utils.extend(this.#view, { fresh });\n default:\n throwBufferRequestError(key, RenderableCameraBuffer);\n }\n }\n _rebuildMatrices({ device, canvas }) {\n // this._destroyView();\n const cam = this.item;\n const camera = Cameras.create(cam);\n const { x, y, z } = cam.position;\n const view = camera.view();\n const projection = camera.projection(canvas);\n const viewProjection = Matrix3D.multiply(view, projection);\n const viewValue = new Float32Array(16 + 16 + 4);\n viewValue.set(Matrix3D.toArray(view), 0);\n viewValue.set(Matrix3D.toArray(viewProjection), 16);\n viewValue.set([x, y, z], 32);\n // reuse GPUBuffer (always same size)\n if (Utils.isNull(this.#view)) {\n const viewBuffer = Buffers.createUniform(device, viewValue, LABEL_PREFIX + 'view-buffer');\n this.#view = { buffer: viewBuffer, value: viewValue, version: performance.now().roundoff() };\n }\n else {\n this.#view.value = viewValue;\n this.#view.version = performance.now().roundoff();\n }\n }\n _destroyView() {\n this.#viewBag.clear();\n const view = this.#view;\n this.#view = null;\n this.destroySafely(view);\n }\n dispose() {\n this._destroyView();\n }\n}\n// #endregion\n// #region GEOMETRY\nclass GeometryBuffer extends ManagedBufferBase {\n #bufferBag = {};\n #freshness = { positions: true, normals: true, uv: true, packed: true };\n #geometryBuffers;\n constructor(geometry) {\n super(geometry);\n geometry.flags ??= [];\n }\n buffer(context, key) {\n const flags = this.item.flags ?? [];\n if (Utils.isNull(this.#geometryBuffers) || flags.includes(StalePropertyFlag.Geometry)) {\n flags.splice(0);\n this.#bufferBag = /* reset */ {};\n this._rebuildGeometryBuffers(context);\n }\n const freshness = this.#freshness;\n const geom = this.#geometryBuffers;\n const { pipeline } = context;\n const bag = (this.#bufferBag[key] ??= new Map());\n const newInPipeline = !bag.has(pipeline);\n const ensureInBag = (buffer) => {\n if (newInPipeline) {\n bag.set(pipeline, buffer);\n }\n return buffer;\n };\n switch (key) {\n case 'geometryPositions':\n const { positions } = geom, posFresh = freshness.positions;\n freshness.positions = false;\n return Utils.extend(ensureInBag(positions), { fresh: posFresh || newInPipeline });\n case 'geometryNormals':\n const { normals } = geom, normFresh = freshness.normals;\n freshness.normals = false;\n return Utils.extend(ensureInBag(normals), { fresh: normFresh || newInPipeline });\n case 'geometryTexCoords':\n const { uv } = geom, uvFresh = freshness.uv;\n freshness.uv = false;\n return Utils.extend({ fresh: uvFresh || newInPipeline }, ensureInBag(uv));\n case 'geometry':\n // alltogether\n const { packed } = geom, geomFresh = freshness.packed;\n freshness.packed = false;\n return Utils.extend(ensureInBag(packed), { fresh: geomFresh || newInPipeline });\n default:\n throwBufferRequestError(key, GeometryBuffer);\n }\n }\n texture(_) {\n throw new Error(\"Method not implemented.\");\n }\n _rebuildGeometryBuffers({ device }) {\n this._destroyBuffers();\n const version = performance.now();\n const geometry = this.item, key = geometry.key;\n if (isMeshGeometry(geometry)) {\n const meshGeometry = geometry;\n // flatten positions...\n const hasTriangleIndices = !Utils.isNullOrEmpty(meshGeometry.triangleIndices);\n const flatPositions = hasTriangleIndices ?\n meshGeometry.triangleIndices.map(index => meshGeometry.positions[index])\n : meshGeometry.positions;\n const length2 = flatPositions.length * 2, length3 = length2 + flatPositions.length;\n const positionsValue = new Float32Array(length3);\n const normalsValue = new Float32Array(length3);\n const uvValue = new Float32Array(length2);\n const geomValue = new Float32Array(2 * length3 + length2);\n for (let j = 0; j < flatPositions.length; j++) {\n const offset2 = 2 * j;\n const offset3 = 3 * j;\n const { x, y, z } = flatPositions[j];\n const { x: nx, y: ny, z: nz } = meshGeometry.normals[j];\n const { x: u, y: v } = meshGeometry.textureCoordinates[j];\n positionsValue.set([x, y, z], offset3);\n normalsValue.set([nx, ny, nz], offset3);\n uvValue.set([u, v], offset2);\n geomValue.set([x, y, z, nx, ny, nz, u, v], offset3 * 2 + offset2);\n }\n const positions = Buffers.create(device, positionsValue, LABEL_PREFIX + 'meshgeometry-' + key + '-positions-buffer');\n const normals = Buffers.create(device, normalsValue, LABEL_PREFIX + 'meshgeometry-' + key + '-normals-buffer');\n const uv = Buffers.create(device, uvValue, LABEL_PREFIX + 'meshgeometry-' + key + '-uvmap-buffer');\n const geom = Buffers.create(device, geomValue, LABEL_PREFIX + 'meshgeometry-' + key + '-buffer');\n this.#geometryBuffers = {\n packed: { buffer: geom, value: geomValue, version },\n positions: { buffer: positions, value: positionsValue, version },\n normals: { buffer: normals, value: normalsValue, version },\n uv: { buffer: uv, value: uvValue, version },\n };\n this.#freshness = { positions: true, normals: true, uv: true, packed: true };\n }\n else {\n const positionsValue = new Float32Array(AdapterUtils.flattenVectorArray(geometry.positions));\n const positions = Buffers.createStorage(device, positionsValue, LABEL_PREFIX + 'nodegeometry-' + key + '-positions-buffer');\n this.#geometryBuffers = {\n positions: { buffer: positions, value: positionsValue, version },\n packed: { buffer: positions, value: positionsValue, version }\n };\n this.#freshness = { positions: true, packed: true };\n }\n }\n _destroyBuffers() {\n this.#bufferBag = {};\n const obsolete = this.#geometryBuffers;\n if (!Utils.isNull(obsolete)) {\n this.destroySafely(obsolete.positions, obsolete.normals, obsolete.uv);\n }\n }\n dispose() {\n this._destroyBuffers();\n }\n}\n// #endregion\n// #region MATERIAL\nclass MaterialBuffer extends ManagedBufferBase {\n #bufferBag = {};\n #textureBag = {};\n #wgpuMaterial;\n #buffers = new Map();\n #textures = new Map();\n constructor(material) {\n super(material);\n material.flags ??= [];\n if (material.flags.indexOf(StalePropertyFlag.Material) === -1) {\n material.flags.push(StalePropertyFlag.Material);\n }\n }\n buffer(context, key) {\n const flags = this.item.flags ?? [];\n let fresh = Utils.isNull(this.#wgpuMaterial);\n if (flags.includes(StalePropertyFlag.Material)) {\n this.#bufferBag = /* reset */ {};\n flags.splice(0);\n fresh = true;\n this.#textures.clear();\n this._resetMaterialBuffers();\n }\n const { pipeline } = context;\n const bag = (this.#bufferBag[key] ??= new Map());\n switch (key) {\n case 'material':\n case 'line':\n const buffer = this._ensureMaterialBuffer(context, key);\n if (buffer) {\n if (!bag.has(pipeline)) {\n fresh = true;\n bag.set(pipeline, buffer);\n }\n return Utils.extend(buffer, { fresh });\n }\n return null;\n default:\n throwBufferRequestError(key, MaterialBuffer);\n }\n }\n _ensureMaterialBuffer(ctx, key = 'material') {\n const set = this.#buffers;\n let retval = set.get(key);\n if (retval) {\n return retval;\n }\n if (set.has(key)) {\n return null;\n }\n retval = this.#wgpuMaterial?.buffer(ctx, key);\n if (retval) {\n set.set(key, retval);\n }\n return retval;\n }\n _resetMaterialBuffers() {\n this.#wgpuMaterial = Materials.create(this.item);\n this._destroyBuffers();\n }\n texture(ctx, key = 'texture') {\n const set = this.#textures;\n let retval = set.get(key), fresh = false;\n if (!retval) {\n retval = this.#wgpuMaterial?.texture(ctx, key);\n if (!retval) {\n return null;\n }\n set.set(key, retval);\n fresh = true;\n //\n this.#textureBag = /* reset */ {};\n }\n const { pipeline } = ctx;\n const bag = (this.#textureBag[key] ??= new Map());\n if (!bag.has(pipeline)) {\n fresh = true;\n bag.set(pipeline, retval);\n }\n return Utils.extend(retval, { fresh });\n }\n dispose() {\n this._destroyBuffers();\n }\n _destroyBuffers() {\n // memoizers\n this.#bufferBag = {};\n this.#textureBag = {};\n // buffers\n const buffers = this.#buffers.values();\n this.#buffers.clear(); // clear before destroying\n this.destroySafely(...buffers);\n // textures\n const textures = this.#textures.values();\n this.#textures.clear(); // clear before destroying\n textures.forEach(t => t.texture.destroy());\n }\n}\n// #endregion\n// #region INTERACTION\nclass InteractionBuffer extends ManagedBufferBase {\n #fields = {\n time: 0, cursor: { x: 0, y: 0 }, resolution: { width: 0, height: 0 }\n };\n #buffer;\n #bufferBag = new Map();\n constructor(data) {\n super(data);\n Utils.extend(this.#fields, data);\n }\n buffer(context, key) {\n switch (key) {\n // altogether\n case 'interaction':\n return this._ensureInteractionBuffer(context);\n default:\n throwBufferRequestError(key, InteractionBuffer);\n }\n }\n texture(_) {\n throw new Error(\"Method not implemented.\");\n }\n _ensureInteractionBuffer(ctx, key = 'interaction') {\n const fields = this.#fields, item = this.item;\n let fresh = (!this.#buffer\n || item.time !== fields.time\n || item.resolution?.width !== fields.resolution.width\n || item.resolution?.height !== fields.resolution.height);\n if (!fresh && !Utils.isNull(item.cursor)) {\n fresh = item.cursor.x !== fields.cursor.x\n || item.cursor.y !== fields.cursor.y;\n }\n if (fresh) {\n // [4bytes cursor.x, 4bytes cursor.y, 4bytes resolution.width, 4bytes resolution.height, 4bytes time] = 20 bytes total]\n const value = new Float32Array([item.cursor?.x ?? 0, item.cursor?.y ?? 0, item.resolution.width, item.resolution.height, item.time, /* padding */ .0]);\n const buffer = Buffers.createUniform(ctx.device, value, LABEL_PREFIX + 'interaction-buffer');\n this.#buffer = { buffer, value, version: performance.now() };\n this.#bufferBag.clear();\n }\n const { pipeline } = ctx;\n const bag = this.#bufferBag;\n if (!bag.has(pipeline)) {\n fresh = true;\n bag.set(pipeline, this.#buffer);\n }\n return Utils.extend(this.#buffer, { fresh });\n }\n _destroyBuffers() {\n // memoizer\n this.#bufferBag.clear();\n // buffer itself\n const obsolete = this.#buffer;\n if (!Utils.isNull(obsolete)) {\n this.destroySafely(obsolete);\n }\n }\n dispose() {\n this._destroyBuffers();\n }\n}\n// #endregion\n// #region MESH\nclass RenderableMeshBuffer extends RenderableBufferBase {\n #geometryBuffers;\n #geometryBuffer;\n #materialBuffers;\n #materialBuffer;\n #worldTransform;\n #freshness = {\n geometry: true, material: true, transform: true\n };\n #worldTransformBufferBag = new Map();\n constructor(mesh, parent, geometries, materials) {\n super(mesh, parent);\n mesh.flags ??= [];\n if (mesh.flags.indexOf(StalePropertyFlag.Geometry) === -1) {\n mesh.flags.push(StalePropertyFlag.Geometry);\n }\n if (mesh.flags.indexOf(StalePropertyFlag.Material) === -1) {\n mesh.flags.push(StalePropertyFlag.Material);\n }\n if (mesh.flags.indexOf(StalePropertyFlag.Position) === -1 && mesh.flags.indexOf(StalePropertyFlag.Transform) === -1) {\n mesh.flags.push(StalePropertyFlag.Transform);\n }\n this.#geometryBuffers = geometries;\n this.#materialBuffers = materials;\n }\n texture(ctx, key) {\n const material = this.#materialBuffer;\n return material?.texture(ctx, key);\n }\n specificBuffer(context, key) {\n const freshness = this.#freshness;\n const flags = this.allFlags();\n if (Utils.isNull(this.#worldTransform) || flags.includes(StalePropertyFlag.Position) || flags.includes(StalePropertyFlag.Transform)) {\n this.#worldTransformBufferBag.clear();\n // world transform bind group buffer\n freshness.transform = true;\n this._rebuildWorldMatrices(context);\n }\n if (Utils.isNull(this.#geometryBuffer) || flags.includes(StalePropertyFlag.Geometry)) {\n // vertex buffers\n freshness.geometry = true;\n this._ensureGeometryBuffer();\n }\n if (Utils.isNull(this.#materialBuffer) || flags.includes(StalePropertyFlag.Material)) {\n freshness.material = true;\n this._ensureMaterialBuffer();\n }\n RenderableBuffers.clearFlags(this);\n const geom = this.#geometryBuffer;\n const mater = this.#materialBuffer;\n switch (key) {\n case 'geometryPositions':\n case 'geometryNormals':\n case 'geometryTexCoords':\n case 'geometry':\n return geom.buffer(context, key);\n case 'material':\n case 'line':\n return mater.buffer(context, key);\n case 'objectWorldTransform':\n const mat = this.#worldTransform, wFresh = freshness.transform;\n freshness.transform = false;\n const bag = this.#worldTransformBufferBag, { pipeline } = context;\n const newInPipeline = !bag.has(pipeline);\n if (newInPipeline) {\n bag.set(pipeline, mat);\n }\n return Utils.extend(mat, { fresh: wFresh || newInPipeline });\n default:\n throwBufferRequestError(key, RenderableMeshBuffer);\n }\n }\n _ensureGeometryBuffer() {\n const current = this.#geometryBuffer;\n const cache = this.#geometryBuffers;\n const mesh = this.item;\n const geom = mesh.geometry;\n // no cache provided? destroy and rebuild\n if (Utils.isNull(cache)) {\n current?.destroy();\n this.#geometryBuffer = new GeometryBuffer(geom);\n }\n else {\n let buffer = cache?.get(geom);\n if (buffer?.disposed !== false) {\n buffer = new GeometryBuffer(geom);\n cache.set(geom, buffer);\n }\n this.#geometryBuffer = buffer;\n }\n }\n _ensureMaterialBuffer() {\n const current = this.#materialBuffer;\n const cache = this.#materialBuffers;\n const mesh = this.item;\n const material = mesh.material ?? DefaultMaterial;\n // no cache provided? destroy and rebuild\n if (Utils.isNull(cache)) {\n current?.destroy();\n this.#materialBuffer = new MaterialBuffer(material);\n }\n else {\n let buffer = cache?.get(material);\n if (buffer?.disposed !== false) {\n buffer = new MaterialBuffer(material);\n cache.set(material, buffer);\n }\n this.#materialBuffer = buffer;\n }\n }\n _rebuildWorldMatrices({ device }) {\n //this.destroySafely(this.#worldTransform);\n const item = this.item;\n const matrix = this.buildWorldTransform();\n const normal = Matrix3D.transpose(Matrix3D.invert(matrix));\n const value = new Float32Array(28);\n value.set(Matrix3D.toArray(matrix), 0);\n value.set([normal.m11, normal.m12, normal.m13, 0, normal.m21, normal.m22, normal.m23, 0, normal.m31, normal.m32, normal.m33, 0], 16);\n //const current = this.#worldTransform;\n // reuse GPUBuffer (always same size)\n if (Utils.isNull(this.#worldTransform)) {\n const buffer = Buffers.createUniform(device, value, LABEL_PREFIX + 'mesh-' + item.key + '-worldmatrix-buffer');\n this.#worldTransform = { buffer, value, version: performance.now().roundoff() };\n }\n else {\n this.#worldTransform.value = value;\n this.#worldTransform.version = performance.now().roundoff();\n }\n //if (!Utils.isNull(current)) {\n // this.destroySafely(current);\n //}\n }\n dispose() {\n // memoizer\n this.#worldTransformBufferBag.clear();\n const world = this.#worldTransform;\n this.#worldTransform = null;\n this.destroySafely(world);\n const material = this.#materialBuffer;\n this.#materialBuffer = null;\n material?.destroy();\n const geometry = this.#geometryBuffer;\n this.#geometryBuffer = null;\n geometry?.destroy();\n }\n}\n// #endregion\n// #region LIGHTS\nclass RenderableLightBuffer extends RenderableBufferBase {\n #buffer;\n #bufferBag = new Map();\n constructor(light) {\n super(light);\n light.flags.push(StalePropertyFlag.Light);\n }\n /**\n * Ambient light buffer building\n * @param param0\n */\n _rebuildAmbientLightBuffer({ device }) {\n const light = this.item;\n // sizes/offsets\n const szColor = 4, szIntensity = 1, offsetColor = 0, offsetIntensity = 4;\n const szTotal = 24; // offsetIntensity + szIntensity;\n const values = new Float32Array(szTotal);\n // color\n const { r, g, b, a } = Colors.parse(light.color ?? '#fff');\n values.set([r, g, b, a], offsetColor);\n // intensity\n values.set([light.intensity], offsetIntensity);\n this.#buffer = { value: values, buffer: Buffers.createUniform(device, values, LABEL_PREFIX + 'ambient-light-buffer'), version: performance.now() };\n }\n /**\n * Directional light buffer building\n * @param param0\n */\n _rebuildDirectionalLightBuffer({ device }) {\n const light = this.item;\n // sizes/offsets\n const szIntensity = 1, szColor = 4, szDirection = 3, offsetColor = 0, offsetDirection = 4, // see: https://www.w3.org/TR/WGSL/#memory-layouts\n offsetIntensity = 7;\n const szTotal = offsetIntensity + szIntensity;\n const values = new Float32Array(szTotal);\n // color\n const { r, g, b, a } = Colors.parse(light.color ?? '#fff');\n values.set([r, g, b, a], offsetColor);\n // intensity\n values.set([light.intensity], offsetIntensity);\n // direction\n const direction = Vector3D.subtract(light.position, light.target);\n values.set([direction.x, direction.y, direction.z], offsetDirection);\n this.#buffer = { value: values, buffer: Buffers.createUniform(device, values, LABEL_PREFIX + 'directional-light-buffer'), version: performance.now() };\n }\n /**\n * Omni light buffer building\n * @param param0\n */\n _rebuildOmniLightBuffer({ device }) {\n const light = this.item;\n // sizes/offsets\n const szIntensity = 1, szColor = 4, szPosition = 3, offsetColor = 0, offsetPosition = 4, // see: https://www.w3.org/TR/WGSL/#memory-layouts\n offsetIntensity = 7;\n const szTotal = offsetIntensity + szIntensity;\n const values = new Float32Array(szTotal);\n // color\n const { r, g, b, a } = Colors.parse(light.color ?? '#fff');\n values.set([r, g, b, a], offsetColor);\n // intensity\n values.set([light.intensity], offsetIntensity);\n // position\n values.set([light.position.x, light.position.y, light.position.z], offsetPosition);\n this.#buffer = { value: values, buffer: Buffers.createUniform(device, values, LABEL_PREFIX + 'omni-light-buffer'), version: performance.now() };\n }\n _rebuildLight(context) {\n this.destroySafely(this.#buffer);\n const light = this.item;\n switch (light.type) {\n case 'direction':\n this._rebuildDirectionalLightBuffer(context);\n break;\n case 'omni':\n this._rebuildOmniLightBuffer(context);\n break;\n case 'ambient':\n this._rebuildAmbientLightBuffer(context);\n break;\n default:\n throw new Error(`Light '${light.type}' is not supported.`);\n }\n }\n texture(_) {\n throw new Error(\"Method not implemented.\");\n }\n specificBuffer(context, key) {\n const bag = this.#bufferBag;\n let fresh = Utils.isNull(this.#buffer) || this.allFlags().length > 0;\n if (fresh) {\n bag.clear();\n this._rebuildLight(context);\n }\n RenderableBuffers.clearFlags(this);\n const { pipeline } = context;\n if (!bag.has(pipeline)) {\n fresh = true;\n bag.set(pipeline, this.#buffer);\n }\n if (key === 'light') {\n return Utils.extend(this.#buffer, { fresh });\n }\n throwBufferRequestError(key, RenderableLightBuffer);\n }\n dispose() {\n this.#bufferBag.clear();\n const buffer = this.#buffer;\n this.#buffer = null;\n this.destroySafely(buffer);\n }\n}\n// #endregion\n","import { Utils } from '@pacem/pacem-core';\nimport { isMesh, isCamera, isLight, isMeshGeometry } from '../../types';\nimport { KnownShader, isLineMaterial } from '../../materials/material';\nimport { WGSLBindingType } from './abstractions';\nimport { LABEL_PREFIX, MATERIAL_GROUP_INDEX, UNIFORM_GROUP_INDEX_LIGHTING, UNIFORM_GROUP_INDEX_CAMERA, UNIFORM_BINDING_INDEX_CAMERA, UNIFORM_GROUP_INDEX_TRANSFORM, UNIFORM_BINDING_INDEX_TRANSFORM, UNIFORM_GROUP_INDEX_INTERACTION, UNIFORM_BINDING_INDEX_INTERACTION, STORAGE_MATERIAL_INDEX, STORAGE_GROUP_INDEX_LINE, SAMPLER_BINDING_INDEX, TEXTURE_BINDING_INDEX, VERTEX_BUFFER_INDEX_MESH_POSITION, VERTEX_BUFFER_INDEX_MESH_NORMAL, VERTEX_BUFFER_INDEX_MESH_UV, VERTEX_COLOR_REFERENCE, LIGHTING_COLOR_REFERENCE, AMBIENT_COLOR_REFERENCE, UNIFORM_GROUP_INDEX_COLORPICKING, GPUShaderStage } from './constants';\nimport { BufferLayouts } from './buffers';\nimport { BasicMaterial, LineMaterial } from './materials';\nimport { getMeshVertexWgsl } from './wgsl/mesh-vertex';\nimport { getDefaultLineVertexWgsl, getFatLineVertexWgsl } from './wgsl/line-vertex';\nimport { getColorPickingFragmentWgsl } from './wgsl/object-picking-fragment';\nimport { textureMap } from './wgsl/texture-fragment';\nimport { directionalLight } from './wgsl/directional-light-fragment';\nimport { omniLight } from './wgsl/omni-light-fragment';\nimport { ambientLight } from './wgsl/ambient-light-fragment';\nimport { RenderableBuffers } from './renderablebuffer';\n//namespace Pacem.Drawing3D.WebGPU {\n// #region constants\nconst labelPrefix = LABEL_PREFIX;\nconst DefaultPipelineOptions = {\n multisample: true,\n packedVertices: true,\n primitive: {\n topology: 'triangle-list',\n frontFace: 'ccw',\n cullMode: 'back'\n }\n};\nconst EMPTY_BIND_DELEGATE = (_) => { };\n/**\n * Factory for {@link RenderPipeline}s: given a {@link Context} and a set of {@link RenderableBuffer}s (a mesh/line plus its\n * camera and lights), builds the WGSL shaders, {@link GPUBindGroupLayout}s, {@link GPUPipelineLayout} and the underlying\n * {@link GPURenderPipeline}(s) needed to draw (and, separately, color-pick/raycast) that combination. Built pipelines are\n * memoized per {@link Context} and reused as long as the shader \"recipe\" (mesh material/shader, light count/types, WGSL\n * modifier version) doesn't change. This is the machinery {@link Pacem3DWebgpuAdapterElement}'s {@link Renderer} implementation\n * (`renderer.ts`) drives every frame.\n */\nexport class RenderPipelines {\n static { this._memoizer = new WeakMap(); }\n /** Clears the {@link RenderPipeline} cache associated with the given {@link Context} (e.g. on device loss/adapter teardown). Does not explicitly destroy the underlying GPU objects — they're released with the {@link GPUDevice}. */\n static dispose(ctx) {\n const memoizer = this._memoizer;\n const cache = memoizer.get(ctx);\n if (!Utils.isNull(cache)) {\n cache.clear();\n memoizer.delete(ctx);\n }\n }\n /**\n * Builds (or reuses, via {@link create}'s cache) the render pipeline for `items` and wraps it as a color-picking-only\n * {@link RenderPipeline}, whose `frame` delegate draws object ids into an `r32uint` target instead of the normal color target.\n * Returns `null` if the resolved pipeline isn't a mesh or line pipeline (i.e. doesn't support raycasting).\n * @param items The mesh/line, camera and lights to raycast, in the same shape expected by {@link create}.\n */\n static createColorPicking(ctx, items) {\n const renderPipeline = RenderPipelines.create(ctx, items);\n if (renderPipeline instanceof MeshRenderPipelineClass\n || renderPipeline instanceof LineRenderPipelineClass) {\n return {\n frame: renderPipeline.raycast\n };\n }\n return null;\n }\n /**\n * Builds (or returns the memoized) {@link RenderPipeline} for the given renderables: the first buffer must wrap a\n * {@link Mesh} (with either a {@link MeshGeometry} or a {@link LineMaterial}), followed by its {@link Camera} buffer\n * and zero or more {@link Light} buffers. Generates the mesh/line's WGSL vertex and fragment shaders (via\n * {@link MeshWGSLBuilder}/{@link LineWGSLBuilder}), compiles them into {@link GPUShaderModule}s, creates the\n * {@link GPUBindGroupLayout}s/{@link GPUPipelineLayout} and the resulting {@link GPURenderPipeline} (plus a matching\n * color-picking pipeline). The pipeline is cached per {@link Context} keyed by shader \"recipe\" + WGSL modifiers version,\n * so repeated calls with an equivalent recipe skip rebuilding.\n * @param ctx WebGPU context (device/canvas/format) to build the pipeline against.\n * @param items `[mesh, camera, ...lights]` renderable buffers.\n * @param pipelineOptions Optional overrides for primitive topology, multisampling, vertex packing and WGSL modifiers.\n * @returns The built (or cached) {@link RenderPipeline}.\n * @throws {Error} If no mesh is provided, the mesh's geometry/material combination isn't supported, or the first argument isn't a mesh.\n */\n static create(ctx, [mesh, camera, ...lights], pipelineOptions) {\n const memoizer = RenderPipelines._memoizer;\n let cache = memoizer.get(ctx);\n if (Utils.isNull(cache)) {\n memoizer.set(ctx, cache = new Map());\n }\n //const camera = items.find(i => isCamera(i.item));\n //const lights = items.filter(i => isLight(i.item));\n //// find main object\n //const mesh = items.find(i => isMesh(i.item));\n if (!Utils.isNull(mesh)) {\n if (isMesh(mesh.item)) {\n const isMesh = isMeshGeometry(mesh.item.geometry);\n const isLine = !isMesh && isLineMaterial(mesh.item.material);\n if (!isMesh && !isLine) {\n throw new Error('Pipeline not implemented, given the provided mesh argument.');\n }\n const builder = isMesh ? new MeshWGSLBuilder(mesh, camera, ...lights)\n : new LineWGSLBuilder(mesh, camera);\n // cache peek for sudden return\n const key = builder.key + (pipelineOptions?.modifiers?.version ?? '');\n const found = cache.get(key);\n if (found) {\n return found;\n }\n const pipeline = isMesh ? new MeshRenderPipelineClass(ctx, builder)\n : new LineRenderPipelineClass(ctx, builder);\n // no cache -> build it\n pipeline.build(pipelineOptions);\n const retval = pipeline;\n Utils.extend(retval, {\n id: key + '-' + ctx.canvas.width + 'x' + ctx.canvas.height + '-' + Utils.Dates.now().toISOString()\n });\n cache.set(key, retval);\n return retval;\n }\n else {\n throw new ReferenceError('Pipeline not implemented, given thst the first argument is not a mesh.');\n }\n }\n else {\n throw new Error('Pipeline not implemented, given the provided arguments.');\n }\n }\n}\nclass RenderPipelineCache {\n constructor() {\n this.#cache = new Map();\n }\n #cache;\n ensureBindGroup({ device }, item, buffers, refresh, layout, label, callback = () => { }) {\n const cache = this.#cache;\n const key = typeof item === 'string' ? item : item.key;\n let set = cache.get(key);\n if (Utils.isNull(set)) {\n cache.set(key, set = new Map());\n }\n if (refresh || !set.has(label)) {\n const entries = buffers.map((item, index) => {\n const entry = {\n binding: index,\n resource: {\n buffer: item\n }\n };\n return entry;\n });\n const descriptor = {\n label,\n layout,\n entries\n };\n // custom config happens here\n callback(descriptor);\n const retval = device.createBindGroup(descriptor);\n set.set(label, retval);\n return retval;\n }\n else {\n return set.get(label);\n }\n }\n}\nclass MeshWGSLBuilder {\n #lights = [];\n #mesh;\n #camera;\n #bindgroups = new Map();\n #key = { shader: 'basic', lights: '' };\n constructor(...objects) {\n this.add(...objects);\n }\n reset() {\n this.#lights.splice(0);\n this.#mesh = null;\n this.#bindgroups.clear();\n this.#key = { shader: 'basic', lights: '' };\n }\n add(...objects) {\n for (let obj of objects ?? []) {\n if (isMesh(obj.item)) {\n if (Utils.isNull(this.#mesh)) {\n this.#mesh = obj;\n const material = obj.item.material ?? { shader: KnownShader.Basic };\n this.#key.shader = material.shader + '-' + (material.map ? 'map' : 'nomap');\n }\n else {\n throw new Error('Mesh already added.');\n }\n }\n else if (isLight(obj.item)) {\n const lights = this.#lights;\n lights.push(obj);\n this.#key.lights += ('-' + obj.item.type);\n }\n else if (isCamera(obj.item)) {\n this.#camera ??= obj;\n }\n else {\n throw new Error('Unknown object type.');\n }\n }\n // add interaction\n }\n build(modifiers) {\n const data = this._computeBasicData();\n const key = this.key, vertex = this.vertex({ inputModifier: modifiers?.vertexInput, outputModifier: modifiers?.vertexOutput }), fragment = this.fragment(data, { modifier: modifiers?.fragment }), bindings = (...args) => MeshWGSLBuilder.prototype.bindgroup.apply(this, args);\n const metadata = {\n lightCount: this.#lights.length,\n mapCount: this.#mesh.item.material?.map ? 1 : 0\n };\n return {\n vertex,\n fragment,\n key,\n bindings,\n metadata\n };\n }\n get key() {\n const { shader, lights } = this.#key;\n // TODO: consider backMap\n return `mesh-` + shader + lights;\n //return `mesh-${shader}${(hasTexture ? '-map' : '-nomap')}`;\n }\n bindgroup(type, key, index) {\n const set = this.#bindgroups;\n const arr = set.get(type);\n if (Utils.isNull(arr)) {\n return null;\n }\n if (Utils.isNullOrEmpty(key)) {\n return arr;\n }\n const filteredArr = arr.filter(i => i.key === key);\n if (isNaN(index)) {\n return filteredArr;\n }\n if (index >= 0 && index < arr.length) {\n return filteredArr[index];\n }\n return filteredArr;\n }\n vertex(options) {\n return getMeshVertexWgsl(options);\n }\n _computeBasicData() {\n const mesh = this.#mesh.item, lights = this.#lights, material = mesh.material, hasTexture = !Utils.isNull(material?.texture), hasLighting = !Utils.isNullOrEmpty(lights);\n const shader = Utils.isNull(mesh) ? KnownShader.Basic : (mesh.material?.shader ?? KnownShader.Basic);\n const materialBindGroupIndex = MATERIAL_GROUP_INDEX, lightingBindGroupIndex = UNIFORM_GROUP_INDEX_LIGHTING;\n return {\n hasTexture, hasLighting, shader,\n materialBindGroupIndex,\n lightingBindGroupIndex,\n };\n }\n _computeBindGroupsAndReferences(data = this._computeBasicData()) {\n const { hasTexture, materialBindGroupIndex, lightingBindGroupIndex } = data;\n const bindgroups = this.#bindgroups, lights = this.#lights;\n // build bindings\n // mesh + material\n const worldTransform = { key: 'objectWorldTransform', group: UNIFORM_GROUP_INDEX_TRANSFORM, binding: UNIFORM_BINDING_INDEX_TRANSFORM, type: 'buffer' };\n const material = { key: 'material', group: materialBindGroupIndex, binding: STORAGE_MATERIAL_INDEX, type: 'buffer' };\n if (hasTexture) {\n bindgroups.set(WGSLBindingType.Mesh, [worldTransform, material, { key: 'texture', group: materialBindGroupIndex, type: 'texture' }]);\n }\n else {\n bindgroups.set(WGSLBindingType.Mesh, [worldTransform, material]);\n }\n // camera\n bindgroups.set(WGSLBindingType.Camera, [\n { key: 'cameraViewTransform', group: UNIFORM_GROUP_INDEX_CAMERA, binding: UNIFORM_BINDING_INDEX_CAMERA, type: 'buffer' }\n ]);\n // lights\n const lArr = lights.map((_, ndx) => {\n return { key: 'light', group: lightingBindGroupIndex, binding: ndx, type: 'buffer' };\n });\n lArr.push(...lArr);\n // interaction\n bindgroups.set(WGSLBindingType.Interaction, [{ key: 'interaction', group: UNIFORM_GROUP_INDEX_INTERACTION, type: 'buffer', binding: UNIFORM_BINDING_INDEX_INTERACTION }]);\n }\n fragment(data = this._computeBasicData(), options) {\n this._computeBindGroupsAndReferences(data);\n const extra = {\n definitions: [], bindings: [], modifiers: []\n };\n const merge = (x) => {\n for (let definition of x.definitions ?? []) {\n if (extra.definitions.indexOf(definition) === -1) {\n extra.definitions.push(definition);\n }\n }\n if (!Utils.isNullOrEmpty(x.bindings)) {\n extra.bindings.push(...x.bindings);\n }\n if (!Utils.isNullOrEmpty(x.modifiers)) {\n extra.modifiers.push(...x.modifiers);\n }\n };\n /* TODO: consider injecting customizations (options.modifier) into `WGSLFragmentExtra`*/\n switch (data.shader) {\n case KnownShader.Basic:\n // texture\n if (data.hasTexture) {\n const materialGroupIndex = data.materialBindGroupIndex;\n const wgslTex = textureMap({ inputColor: VERTEX_COLOR_REFERENCE, outputColors: [VERTEX_COLOR_REFERENCE], uv: 'uv' }, materialGroupIndex);\n merge(wgslTex);\n }\n // lights\n let lightIndex = 0;\n const lights = this.#lights;\n for (let lightBuffer of lights) {\n const light = lightBuffer.item; // TODO: consider implementing Pacem.Drawing3D.WebGPU.Light interface (as of Materials)\n switch (light.type) {\n case 'direction':\n const dirLightExtra = directionalLight({ outputColor: LIGHTING_COLOR_REFERENCE, normal: 'normal' }, data.lightingBindGroupIndex, lightIndex);\n merge(dirLightExtra);\n break;\n case 'omni':\n const omniLightExtra = omniLight({ outputColor: LIGHTING_COLOR_REFERENCE, normal: 'normal', position: 'vertex', /*specularColor: MATERIAL_REFERENCE + '.specularColor', shininess: MATERIAL_REFERENCE + '.shininess'*/ }, data.lightingBindGroupIndex, lightIndex);\n merge(omniLightExtra);\n break;\n case 'ambient':\n const ambLightExtra = ambientLight({ inputColor: VERTEX_COLOR_REFERENCE, outputColor: AMBIENT_COLOR_REFERENCE }, data.lightingBindGroupIndex, lightIndex);\n merge(ambLightExtra);\n break;\n }\n lightIndex++;\n }\n return BasicMaterial.fragment(extra, options);\n }\n }\n}\nconst PipelineUtils = {\n writeBufferConditionally: (device, buffer) => {\n if (!buffer.fresh) {\n return;\n }\n device.queue.writeBuffer(buffer.buffer, 0, buffer.value);\n }\n};\nclass MeshRenderPipelineClass {\n constructor(_context, _builder, _cache = new RenderPipelineCache()) {\n this._context = _context;\n this._builder = _builder;\n this._cache = _cache;\n // #region fields and utils\n this._ensureU32idBindGroup = (item, buffer, refresh) => {\n return this._cache.ensureBindGroup(this._context, item, [buffer], refresh, this._pickBindGroupLayout, labelPrefix + 'mesh-colorpick-bind-group');\n };\n this._ensureMaterialBindGroup = (item, buffer, texture, refresh, layoutIndex = MATERIAL_GROUP_INDEX) => {\n const layout = this._bindGroupLayouts[layoutIndex], label = labelPrefix + 'material-bind-group';\n if (layout.label !== (labelPrefix + 'material-bind-group-layout')) {\n throw new Error('BindGroupLayout mismatch!');\n }\n return this._cache.ensureBindGroup(this._context, item, [buffer], refresh, layout, label, (descriptor) => {\n const { device } = this.context;\n const entries = descriptor.entries /* entries are build as array in the method */;\n if (texture) {\n entries.push({\n binding: SAMPLER_BINDING_INDEX, resource: device.createSampler({\n addressModeU: 'repeat',\n addressModeV: 'repeat',\n magFilter: 'linear',\n minFilter: 'linear',\n })\n }, {\n binding: TEXTURE_BINDING_INDEX, resource: texture.createView()\n });\n }\n });\n };\n this._ensureWorldTransformBindGroup = (item, buffer, refresh, layoutIndex = UNIFORM_GROUP_INDEX_TRANSFORM, raycasting = false) => {\n const layout = this._bindGroupLayouts[layoutIndex];\n if (layout.label !== (labelPrefix + 'mesh-transforms-bind-group-layout')) {\n throw new Error('BindGroupLayout mismatch!');\n }\n const key = item.key + '-' + (raycasting ? 1 : 0);\n const label = `${labelPrefix}${raycasting ? 'colorpick' : 'mesh'}-transforms-bind-group`;\n return this._cache.ensureBindGroup(this._context, key, [buffer], refresh, layout, label);\n };\n this._ensureCameraProjectionAndInteractionDataBindGroup = (item, viewBuffer, interactionBuffer, refresh, layoutIndex = UNIFORM_GROUP_INDEX_CAMERA, raycasting = false) => {\n const layout = this._bindGroupLayouts[layoutIndex];\n const key = item.key + '-' + (raycasting ? 1 : 0);\n const label = `${labelPrefix}${raycasting ? 'colorpick' : 'mesh'}-view-bind-group`;\n return this._cache.ensureBindGroup(this._context, key, [viewBuffer, interactionBuffer], refresh, layout, label);\n };\n this._ensureLightingBindGroup = (lights, refresh, layoutIndex = UNIFORM_GROUP_INDEX_LIGHTING) => {\n const layout = this._bindGroupLayouts[layoutIndex];\n const key = lights.map(l => l.id).join(':');\n const buffers = lights.map(l => l.buffer.buffer);\n return this._cache.ensureBindGroup(this._context, key, buffers, refresh, layout, labelPrefix + 'mesh-lighting-bind-group');\n };\n this._bindGroupLayouts = [];\n this._bindVertex = EMPTY_BIND_DELEGATE;\n this._bindPicker = EMPTY_BIND_DELEGATE;\n this._bindWorldTransform = EMPTY_BIND_DELEGATE;\n this._bindRaycastWorldTransform = EMPTY_BIND_DELEGATE;\n this._bindCameraProjectionAndInteractionData = EMPTY_BIND_DELEGATE;\n this._bindRaycastCameraProjectionAndInteractionData = EMPTY_BIND_DELEGATE;\n this._bindLighting = EMPTY_BIND_DELEGATE;\n this._bindMaterial = EMPTY_BIND_DELEGATE;\n // #endregion\n // #region implementation\n this.set = (pass) => {\n throw new Error('Deprecated.');\n };\n this.bind = (pass, ...buffers) => {\n throw new Error('Deprecated.');\n };\n this.draw = (pass, ...buffers) => {\n throw new Error('Deprecated.');\n };\n this.frame = (pass, interactionBuffer, meshBuffer, cameraBuffer, ...lightBuffers) => {\n // set\n pass.setPipeline(this._pipeline);\n try {\n // bind\n this._bindVertex(pass, meshBuffer);\n this._bindWorldTransform(pass, meshBuffer);\n this._bindMaterial(pass, meshBuffer);\n this._bindCameraProjectionAndInteractionData(pass, cameraBuffer, interactionBuffer);\n this._bindLighting(pass, ...lightBuffers);\n // draw\n const mesh = meshBuffer.item, geometry = mesh.geometry;\n pass.draw(geometry.triangleIndices?.length || geometry.positions.length);\n }\n catch (e) {\n console.error('Pacem.Drawing3D.FrameException', e);\n }\n };\n this.raycast = (pass, interactionBuffer, meshBuffer, cameraBuffer) => {\n // set\n pass.setPipeline(this._pickPipeline);\n try {\n // bind\n this._bindVertex(pass, meshBuffer);\n this._bindRaycastWorldTransform(pass, meshBuffer);\n this._bindRaycastCameraProjectionAndInteractionData(pass, cameraBuffer, interactionBuffer);\n this._bindPicker(pass, meshBuffer);\n // draw\n const mesh = meshBuffer.item, geometry = mesh.geometry;\n pass.draw(geometry.triangleIndices.length);\n }\n catch (e) { }\n };\n this._key = _builder.key;\n }\n get context() {\n return this._context;\n }\n get key() {\n return this._key;\n }\n build(pipelineOptions) {\n const options = Utils.extend({}, DefaultPipelineOptions, pipelineOptions ?? {});\n const builder = this._builder, wgsl = builder.build(options.modifiers);\n const ctx = Utils.extend({ pipeline: this }, this._context);\n const device = ctx.device;\n // #region VERTEX\n // build vertex state\n const vertex = {\n module: device.createShaderModule({ code: wgsl.vertex }),\n buffers: options.packedVertices ?\n [\n // packed\n BufferLayouts.createVertex(VERTEX_BUFFER_INDEX_MESH_POSITION, 3, 3, 2),\n ]\n : [\n // position\n BufferLayouts.createVertex(VERTEX_BUFFER_INDEX_MESH_POSITION, 3),\n // normal\n BufferLayouts.createVertex(VERTEX_BUFFER_INDEX_MESH_NORMAL, 3),\n // uv\n BufferLayouts.createVertex(VERTEX_BUFFER_INDEX_MESH_UV, 2)\n ]\n };\n // bind group layouts\n const viewBindGroupLayout = device.createBindGroupLayout({\n entries: [\n // camera matrices\n {\n binding: UNIFORM_BINDING_INDEX_CAMERA,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform'\n }\n },\n // interaction\n {\n binding: UNIFORM_BINDING_INDEX_INTERACTION,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform'\n }\n }\n ], label: labelPrefix + 'mesh-view-bind-group-layout'\n });\n const worldBindGroupLayout = device.createBindGroupLayout({\n entries: [\n {\n // world- and normalMatrix entry\n binding: UNIFORM_BINDING_INDEX_TRANSFORM,\n visibility: GPUShaderStage.VERTEX,\n buffer: {\n type: 'uniform'\n }\n }\n ], label: labelPrefix + 'mesh-transforms-bind-group-layout'\n });\n const bindGroupLayouts = [viewBindGroupLayout, worldBindGroupLayout];\n // #endregion\n // #region FRAGMENT\n // TODO: https://stackoverflow.com/questions/50720534/implementing-depth-testing-for-semi-transparent-objects\n // Weighted Blended Order-Independent Transparency https://jcgt.org/published/0002/02/09/\n // a-buffer: https://webgpu.github.io/webgpu-samples/?sample=a-buffer#composite.wgsl\n const fragment = {\n module: device.createShaderModule({\n code: wgsl.fragment\n }), targets: [\n {\n format: ctx.format,\n blend: {\n color: {\n srcFactor: 'src-alpha',\n dstFactor: 'one-minus-src-alpha'\n },\n alpha: {},\n }\n }\n ]\n };\n // material\n // material / material\n const materialGroupIndex = bindGroupLayouts.length;\n const materialBindGroupLayoutDescriptorEntries = [{\n // vertex colors entry\n binding: STORAGE_MATERIAL_INDEX,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'read-only-storage'\n }\n }];\n // material / texture\n const { mapCount } = wgsl.metadata, hasTex = mapCount > 0;\n if (hasTex) {\n materialBindGroupLayoutDescriptorEntries.push({ visibility: GPUShaderStage.FRAGMENT, binding: SAMPLER_BINDING_INDEX, sampler: {} }, ...Array(mapCount).keys().map(index => { return { visibility: GPUShaderStage.FRAGMENT, binding: SAMPLER_BINDING_INDEX + 1 + index, texture: {} }; }));\n }\n else {\n }\n const materialBindGroupLayoutDescriptor = {\n label: labelPrefix + 'material-bind-group-layout',\n entries: materialBindGroupLayoutDescriptorEntries\n };\n const materialBindGroupLayout = device.createBindGroupLayout(materialBindGroupLayoutDescriptor);\n bindGroupLayouts.push(materialBindGroupLayout);\n // lighting\n const lightingGroupIndex = bindGroupLayouts.length;\n const { lightCount } = wgsl.metadata, hasLighting = lightCount > 0;\n if (hasLighting) {\n const lightingBindGroupLayout = device.createBindGroupLayout({\n entries: [...Array(lightCount).keys()].map((_, index) => {\n return {\n visibility: GPUShaderStage.FRAGMENT, binding: index, buffer: {\n type: 'uniform'\n }\n };\n }),\n label: labelPrefix + 'lighting-bind-group-layout'\n });\n bindGroupLayouts.push(lightingBindGroupLayout);\n }\n // #endregion\n // #region PIPELINE\n // full pipeline descriptor\n const descriptor = {\n label: labelPrefix + 'mesh-render-pipeline',\n vertex,\n fragment,\n // pipeline-layout\n layout: device.createPipelineLayout({\n label: labelPrefix + 'mesh-render-pipeline-layout',\n bindGroupLayouts: (this._bindGroupLayouts = bindGroupLayouts)\n }),\n primitive: options.primitive\n };\n if (options.multisample) {\n descriptor.multisample = { count: 4 };\n descriptor.depthStencil = {\n depthCompare: 'less',\n format: 'depth24plus',\n depthWriteEnabled: true\n };\n }\n this._pipeline = device.createRenderPipeline(descriptor);\n // raycast pipeline descriptor\n const pickFragGroupLayout = this._pickBindGroupLayout = device.createBindGroupLayout({\n label: labelPrefix + 'mesh-colorpick-bind-group-layout',\n entries: [\n {\n visibility: GPUShaderStage.FRAGMENT,\n binding: 0,\n buffer: { type: 'uniform' }\n }\n ]\n });\n const pickDescriptor = {\n label: labelPrefix + 'mesh-colorpick-pipeline',\n vertex,\n fragment: {\n module: device.createShaderModule({\n code: getColorPickingFragmentWgsl(UNIFORM_GROUP_INDEX_COLORPICKING)\n }), targets: [\n { format: 'r32uint' }\n ]\n },\n layout: device.createPipelineLayout({\n label: labelPrefix + 'mesh-colorpick-pipeline-layout',\n bindGroupLayouts: [viewBindGroupLayout, worldBindGroupLayout, pickFragGroupLayout]\n }),\n primitive: options.primitive,\n depthStencil: {\n depthWriteEnabled: true,\n depthCompare: 'less',\n format: 'depth24plus',\n },\n };\n this._pickPipeline = device.createRenderPipeline(pickDescriptor);\n // #endregion\n // vertex buffers\n const bindVertexSplit = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing vertex buffers was provided.`);\n }\n const { buffer: positions } = meshBuffer.buffer(ctx, 'geometryPositions');\n const { buffer: normals } = meshBuffer.buffer(ctx, 'geometryNormals');\n const { buffer: uv } = meshBuffer.buffer(ctx, 'geometryTexCoords');\n pass.setVertexBuffer(VERTEX_BUFFER_INDEX_MESH_POSITION, positions);\n pass.setVertexBuffer(VERTEX_BUFFER_INDEX_MESH_NORMAL, normals);\n pass.setVertexBuffer(VERTEX_BUFFER_INDEX_MESH_UV, uv);\n };\n const bindVertexPacked = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing vertex buffers was provided.`);\n }\n const { buffer } = meshBuffer.buffer(ctx, 'geometry');\n pass.setVertexBuffer(VERTEX_BUFFER_INDEX_MESH_POSITION, buffer);\n };\n this._bindVertex = options.packedVertices ? bindVertexPacked : bindVertexSplit;\n // world transform\n const bindWorldTransform = (pass, meshBuffer, raycasting) => {\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing world transform buffer was provided.`);\n }\n const worldTransform = meshBuffer.buffer(ctx, 'objectWorldTransform'), worldTransformBuffer = worldTransform.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, worldTransform);\n const { group } = wgsl.bindings(WGSLBindingType.Mesh, 'objectWorldTransform', 0);\n const bindGroup = this._ensureWorldTransformBindGroup(meshBuffer.item, worldTransformBuffer, worldTransform.fresh /*false*/ /* persist the same bindGroup, given the constant size */, group, raycasting);\n pass.setBindGroup(group, bindGroup);\n };\n this._bindWorldTransform = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n bindWorldTransform(pass, meshBuffer, false);\n };\n this._bindRaycastWorldTransform = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n bindWorldTransform(pass, meshBuffer, true);\n };\n // camera matrices and interaction data\n const bindCameraProjectionAndInteractionData = (pass, cameraBuffer, interactionBuffer, raycasting) => {\n if (Utils.isNull(cameraBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing view projection buffers was provided.`);\n }\n // camera view\n const viewTransformBuffer = cameraBuffer.buffer(ctx, 'cameraViewTransform'), viewTransformBufferBuffer = viewTransformBuffer.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, viewTransformBuffer);\n // interaction\n if (Utils.isNull(interactionBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing interaction buffers was provided.`);\n }\n const interactionDataBuffer = interactionBuffer.buffer(ctx, 'interaction'), interactionDataBufferBuffer = interactionDataBuffer.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, interactionDataBuffer);\n const { group } = wgsl.bindings(WGSLBindingType.Camera, 'cameraViewTransform', 0);\n const { group: interactionGroup } = wgsl.bindings(WGSLBindingType.Interaction, 'interaction', 0);\n if (group !== interactionGroup) {\n throw new ReferenceError(`Layout bind group mismatch: ${group} vs ${interactionGroup}.`);\n }\n const bindGroup = this._ensureCameraProjectionAndInteractionDataBindGroup(cameraBuffer.item, viewTransformBufferBuffer, interactionDataBufferBuffer, \n // since fresh could mean also \"camera switched\" (e.g. from ortho to perspective and then back to ortho) there's risk\n // to target destroyed buffers, this refresh the bind group if either buffer is fresh.\n // Possibilities for fine-tuning in future.\n viewTransformBuffer.fresh || interactionDataBuffer.fresh, group, raycasting);\n pass.setBindGroup(group, bindGroup);\n };\n this._bindCameraProjectionAndInteractionData = (pass, ...buffers) => {\n const cameraBuffer = buffers.at(0);\n const interactionBuffer = buffers.at(1);\n bindCameraProjectionAndInteractionData(pass, cameraBuffer, interactionBuffer, false);\n };\n this._bindRaycastCameraProjectionAndInteractionData = (pass, ...buffers) => {\n const cameraBuffer = buffers.at(0);\n const interactionBuffer = buffers.at(1);\n bindCameraProjectionAndInteractionData(pass, cameraBuffer, interactionBuffer, true);\n };\n // vertexColors and textures\n this._bindMaterial = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing vertex colors was provided.`);\n }\n const vertexColorsBuffer = meshBuffer.buffer(ctx, 'material'), vertexColorsBufferBuffer = vertexColorsBuffer.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, vertexColorsBuffer);\n let tex = meshBuffer.texture(ctx);\n const texBmp = tex?.texture;\n const bindGroup = this._ensureMaterialBindGroup(meshBuffer.item, vertexColorsBufferBuffer, texBmp, vertexColorsBuffer.fresh, materialGroupIndex);\n pass.setBindGroup(materialGroupIndex, bindGroup);\n if (hasTex) {\n device.queue.copyExternalImageToTexture({ source: tex.source, flipY: true }, { texture: texBmp }, { width: texBmp.width, height: texBmp.height });\n }\n };\n // lights\n this._bindLighting = (pass, ...buffers) => {\n if (hasLighting) {\n const lightArray = Array.from(buffers);\n const lightBuffers = lightArray.map(l => { return { buffer: l.buffer(ctx, 'light'), id: l.item.key }; });\n const refresh = lightBuffers.some(b => b.buffer.fresh);\n const bindGroup = this._ensureLightingBindGroup(lightBuffers, refresh, lightingGroupIndex);\n for (let lightBuffer of lightBuffers) {\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, lightBuffer.buffer);\n }\n pass.setBindGroup(lightingGroupIndex, bindGroup);\n }\n };\n // picker\n this._bindPicker = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing world transform buffer was provided.`);\n }\n const u32id = meshBuffer.buffer(ctx, 'u32id'), u32idBuffer = u32id.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, u32id);\n const group = UNIFORM_GROUP_INDEX_COLORPICKING;\n const refresh = u32id.fresh;\n const bindGroup = this._ensureU32idBindGroup(meshBuffer.item, u32idBuffer, refresh /* reuse u32id.fresh*/);\n pass.setBindGroup(group, bindGroup);\n };\n }\n}\nclass LineWGSLBuilder {\n #line;\n #camera;\n #bindgroups = new Map();\n constructor(...objects) {\n this.add(...objects);\n }\n reset() {\n this.#line = null;\n this.#bindgroups.clear();\n }\n add(...objects) {\n for (let obj of objects ?? []) {\n if (isMesh(obj.item)) {\n if (Utils.isNull(this.#line)) {\n this.#line = obj;\n }\n else {\n throw new Error('Line already added.');\n }\n }\n else if (isCamera(obj.item)) {\n this.#camera ??= obj;\n }\n else if (isLight(obj.item)) {\n // ignore\n }\n else {\n throw new Error('Unknown object type.');\n }\n }\n }\n build() {\n const data = this._computeBasicData();\n const key = this.key, vertex = this.vertex(data), fragment = this.fragment(data), bindings = (...args) => LineWGSLBuilder.prototype.bindgroup.apply(this, args);\n return {\n vertex,\n fragment,\n key,\n bindings,\n metadata: { thickness: data.thickness, dashPattern: data.dashPattern }\n };\n }\n get key() {\n const fat = (this.#line?.item).material?.lineWidth > 1;\n return KnownShader.Line + (fat ? '-fat' : '');\n }\n bindgroup(type, key, index) {\n const set = this.#bindgroups;\n const arr = set.get(type);\n if (Utils.isNull(arr)) {\n return null;\n }\n if (Utils.isNullOrEmpty(key)) {\n return arr;\n }\n const filteredArr = arr.filter(i => i.key === key);\n if (isNaN(index)) {\n return filteredArr;\n }\n if (index >= 0 && index < arr.length) {\n return filteredArr[index];\n }\n return filteredArr;\n }\n vertex(data = this._computeBasicData()) {\n return data.thickness > 1 ? getFatLineVertexWgsl() : getDefaultLineVertexWgsl();\n }\n _computeBasicData() {\n const mesh = this.#line.item;\n const shader = Utils.isNull(mesh) ? KnownShader.Line : (mesh.material?.shader ?? KnownShader.Line);\n const material = mesh.material;\n const thickness = material?.lineWidth ?? 1;\n const dashPattern = material?.dashArray;\n return {\n shader,\n thickness, dashPattern,\n };\n }\n _computeBindGroupsAndReferences(data = this._computeBasicData()) {\n const bindgroups = this.#bindgroups;\n // build bindings\n // mesh + material\n const worldTransform = { key: 'objectWorldTransform', group: UNIFORM_GROUP_INDEX_TRANSFORM, binding: UNIFORM_BINDING_INDEX_TRANSFORM, type: 'buffer' };\n const material = { key: 'material', group: STORAGE_GROUP_INDEX_LINE + 1, binding: STORAGE_MATERIAL_INDEX, type: 'buffer' };\n const geometryPositions = { key: 'geometryPositions', group: STORAGE_GROUP_INDEX_LINE, binding: 0, type: 'buffer' };\n const line = { key: 'line', group: STORAGE_GROUP_INDEX_LINE, binding: 1, type: 'buffer' };\n bindgroups.set(WGSLBindingType.Mesh, [worldTransform, material, geometryPositions, line]);\n // camera\n bindgroups.set(WGSLBindingType.Camera, [\n { key: 'cameraViewTransform', group: UNIFORM_GROUP_INDEX_CAMERA, binding: UNIFORM_BINDING_INDEX_CAMERA, type: 'buffer' }\n ]);\n }\n fragment(data = this._computeBasicData()) {\n this._computeBindGroupsAndReferences(data);\n const extra = {\n definitions: [], bindings: [], modifiers: []\n };\n switch (data.shader) {\n case KnownShader.Line:\n return LineMaterial.fragment(extra);\n }\n }\n}\nclass LineRenderPipelineClass {\n #context;\n constructor(context, _lineBuilder, _cache = new RenderPipelineCache()) {\n this._lineBuilder = _lineBuilder;\n this._cache = _cache;\n // #region fields and utils\n this._ensureLineU32idBindGroup = (item, buffer, refresh) => {\n const ctx = this.context;\n return this._cache.ensureBindGroup(ctx, item, [buffer], refresh, this._pickLineBindGroupLayout, labelPrefix + 'line-colorpick-bind-group');\n };\n this._ensureLineMaterialBindGroup = (item, buffer, refresh, layoutIndex = MATERIAL_GROUP_INDEX) => {\n const layout = this._bindLineGroupLayouts[layoutIndex];\n if (layout.label !== (labelPrefix + 'line-material-bind-group-layout')) {\n throw new Error('BindGroupLayout mismatch!');\n }\n const ctx = this.context;\n return this._cache.ensureBindGroup(ctx, item, [buffer], refresh, layout, labelPrefix + 'line-material-bind-group');\n };\n this._ensureLinePositionsBindGroup = (item, buffers, refresh, layoutIndex) => {\n const layout = this._bindLineGroupLayouts[layoutIndex];\n if (layout.label !== (labelPrefix + 'line-positions-bind-group-layout')) {\n throw new Error('BindGroupLayout mismatch!');\n }\n const ctx = this.context;\n return this._cache.ensureBindGroup(ctx, item, buffers, refresh, layout, labelPrefix + 'line-positions-bind-group');\n };\n this._ensureLineWorldTransformBindGroup = (item, buffer, refresh, layoutIndex = UNIFORM_GROUP_INDEX_TRANSFORM, raycasting = false) => {\n const layout = this._bindLineGroupLayouts[layoutIndex];\n if (layout.label !== (labelPrefix + 'line-transforms-bind-group-layout')) {\n throw new Error('BindGroupLayout mismatch!');\n }\n const key = item.key + '-line-' + (raycasting ? 1 : 0);\n const label = `${labelPrefix}${raycasting ? 'colorpick' : ''}-line-transforms-bind-group`;\n const ctx = this.context;\n return this._cache.ensureBindGroup(ctx, key, [buffer], refresh, layout, label);\n };\n this._ensureLineCameraProjectionBindGroup = (item, viewBuffer, refresh, layoutIndex = UNIFORM_GROUP_INDEX_CAMERA, raycasting = false) => {\n const layout = this._bindLineGroupLayouts[layoutIndex];\n const key = item.key + '-line-' + (raycasting ? 1 : 0);\n const label = `${labelPrefix}${raycasting ? 'colorpick' : ''}-line-view-bind-group`;\n const ctx = this.context;\n return this._cache.ensureBindGroup(ctx, key, [viewBuffer], refresh, layout, label);\n };\n this._bindLineGroupLayouts = [];\n this._bindLinePositions = EMPTY_BIND_DELEGATE;\n this._bindLinePicker = EMPTY_BIND_DELEGATE;\n this._bindLineWorldTransform = EMPTY_BIND_DELEGATE;\n this._bindLineRaycastWorldTransform = EMPTY_BIND_DELEGATE;\n this._bindLineCameraProjection = EMPTY_BIND_DELEGATE;\n this._bindLineRaycastCameraProjection = EMPTY_BIND_DELEGATE;\n this._bindLineMaterial = EMPTY_BIND_DELEGATE;\n this._drawLine = EMPTY_BIND_DELEGATE;\n // #endregion\n // #region implementation\n this.set = (pass) => {\n throw new Error('Deprecated.');\n };\n this.bind = (pass, ...buffers) => {\n throw new Error('Deprecated.');\n };\n this.draw = (pass, ...buffers) => {\n throw new Error('Deprecated.');\n };\n this.frame = (pass, /* unused yet */ interactionBuffer, meshBuffer, cameraBuffer) => {\n // set\n pass.setPipeline(this._linePipeline);\n try {\n // bind\n this._bindLineWorldTransform(pass, meshBuffer);\n this._bindLineCameraProjection(pass, cameraBuffer);\n this._bindLinePositions(pass, meshBuffer);\n this._bindLineMaterial(pass, meshBuffer);\n // draw\n this._drawLine(pass, meshBuffer);\n }\n catch (e) {\n console.error('Pacem.Drawing3D.FrameException', e);\n }\n };\n this.raycast = (pass, /* unused yet */ interactionBuffer, meshBuffer, cameraBuffer) => {\n // set\n pass.setPipeline(this._pickLinePipeline);\n try {\n // bind\n this._bindLineRaycastWorldTransform(pass, meshBuffer);\n this._bindLineRaycastCameraProjection(pass, cameraBuffer);\n this._bindLinePositions(pass, meshBuffer);\n this._bindLinePicker(pass, meshBuffer);\n // draw\n this._drawLine(pass, meshBuffer);\n }\n catch (e) { }\n };\n this.#context = context;\n this._lineKey = _lineBuilder.key;\n }\n get context() {\n return this.#context;\n }\n get key() {\n return this._lineKey;\n }\n build(pipelineOptions) {\n const options = Utils.extend({}, DefaultPipelineOptions, pipelineOptions ?? {});\n const builder = this._lineBuilder, wgsl = builder.build();\n const ctx = Utils.extend({ pipeline: this }, this.#context);\n const device = ctx.device;\n // TODO: switch topology based on this flag\n const fatLines = wgsl.metadata.thickness > 1;\n // #region VERTEX\n // build vertex state\n const vertex = {\n module: device.createShaderModule({ code: wgsl.vertex }),\n buffers: []\n };\n // bind group layouts\n const worldBindGroupLayout = device.createBindGroupLayout({\n entries: [\n {\n // world- and normalMatrix entry\n binding: UNIFORM_BINDING_INDEX_TRANSFORM,\n visibility: GPUShaderStage.VERTEX,\n buffer: {\n type: 'uniform'\n }\n }\n ], label: labelPrefix + 'line-transforms-bind-group-layout'\n });\n const viewBindGroupLayout = device.createBindGroupLayout({\n entries: [\n // camera matrices\n {\n binding: UNIFORM_BINDING_INDEX_CAMERA,\n visibility: GPUShaderStage.VERTEX,\n buffer: {\n type: 'uniform'\n }\n },\n // interaction\n /*{\n binding: UNIFORM_BINDING_INDEX_INTERACTION,\n visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'uniform'\n }\n }*/\n ], label: labelPrefix + 'line-view-bind-group-layout'\n });\n const lineEntries = [\n // positions array\n {\n binding: 0,\n visibility: GPUShaderStage.VERTEX,\n buffer: {\n type: 'read-only-storage'\n }\n }\n ];\n if (fatLines) {\n lineEntries.push(\n // line properties (width, dash-array, lineCap, ...)\n {\n binding: 1,\n visibility: GPUShaderStage.VERTEX,\n buffer: {\n type: 'uniform'\n }\n });\n }\n const lineBindGroupLayout = device.createBindGroupLayout({\n entries: lineEntries, label: labelPrefix + 'line-positions-bind-group-layout'\n });\n const vertexBindGroupLayouts = [viewBindGroupLayout, worldBindGroupLayout, lineBindGroupLayout];\n const raycastLayoutIndex = vertexBindGroupLayouts.length;\n const bindGroupLayouts = vertexBindGroupLayouts.slice();\n // #endregion\n // #region FRAGMENT\n const fragment = {\n module: device.createShaderModule({\n code: wgsl.fragment\n }), targets: [\n {\n format: ctx.format,\n blend: {\n color: {\n srcFactor: 'src-alpha',\n dstFactor: 'one-minus-src-alpha'\n },\n alpha: {},\n }\n }\n ]\n };\n // material\n // material / material\n const materialGroupIndex = bindGroupLayouts.length;\n const materialBindGroupLayoutDescriptorEntries = [{\n // vertex colors entry\n binding: STORAGE_MATERIAL_INDEX,\n visibility: GPUShaderStage.FRAGMENT,\n buffer: {\n type: 'read-only-storage'\n }\n }];\n const materialBindGroupLayoutDescriptor = {\n label: labelPrefix + 'line-material-bind-group-layout',\n entries: materialBindGroupLayoutDescriptorEntries\n };\n const materialBindGroupLayout = device.createBindGroupLayout(materialBindGroupLayoutDescriptor);\n bindGroupLayouts.push(materialBindGroupLayout);\n // #endregion\n // #region PIPELINE\n const topology = fatLines ? options.primitive.topology : 'line-list';\n // full pipeline descriptor\n const descriptor = {\n label: labelPrefix + 'line-render-pipeline',\n vertex,\n fragment,\n // pipeline-layout\n layout: device.createPipelineLayout({\n label: labelPrefix + 'line-render-pipeline-layout',\n bindGroupLayouts: (this._bindLineGroupLayouts = bindGroupLayouts)\n }),\n primitive: Utils.extend({}, options.primitive, { topology }),\n };\n if (options.multisample) {\n descriptor.multisample = { count: 4 };\n descriptor.depthStencil = {\n depthCompare: 'less',\n format: 'depth24plus',\n depthWriteEnabled: true\n };\n }\n this._linePipeline = device.createRenderPipeline(descriptor);\n // raycast pipeline descriptor\n const pickFragGroupLayout = this._pickLineBindGroupLayout = device.createBindGroupLayout({\n label: labelPrefix + 'line-colorpick-bind-group-layout',\n entries: [\n {\n visibility: GPUShaderStage.FRAGMENT,\n binding: 0,\n buffer: { type: 'uniform' }\n }\n ]\n });\n const pickDescriptor = {\n label: labelPrefix + 'line-colorpick-pipeline',\n vertex,\n fragment: {\n module: device.createShaderModule({\n code: getColorPickingFragmentWgsl(raycastLayoutIndex)\n }), targets: [\n { format: 'r32uint' }\n ]\n },\n layout: device.createPipelineLayout({\n label: labelPrefix + 'line-colorpick-pipeline-layout',\n bindGroupLayouts: vertexBindGroupLayouts.concat(pickFragGroupLayout)\n }),\n primitive: Utils.extend({}, options.primitive, { topology }),\n depthStencil: {\n depthWriteEnabled: true,\n depthCompare: 'less',\n format: 'depth24plus',\n },\n };\n this._pickLinePipeline = device.createRenderPipeline(pickDescriptor);\n // #endregion\n // world transform\n const bindLineWorldTransform = (pass, meshBuffer, raycasting) => {\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing world transform buffer was provided.`);\n }\n const worldTransform = meshBuffer.buffer(ctx, 'objectWorldTransform'), worldTransformBuffer = worldTransform.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, worldTransform);\n const { group } = wgsl.bindings(WGSLBindingType.Mesh, 'objectWorldTransform', 0);\n const bindGroup = this._ensureLineWorldTransformBindGroup(meshBuffer.item, worldTransformBuffer, \n /*worldTransform.fresh*/ false /* persist the same bindGroup, given the constant size */, group, raycasting);\n pass.setBindGroup(group, bindGroup);\n };\n this._bindLineWorldTransform = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n bindLineWorldTransform(pass, meshBuffer, false);\n };\n this._bindLineRaycastWorldTransform = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n bindLineWorldTransform(pass, meshBuffer, true);\n };\n // camera matrices\n const bindLineCameraProjection = (pass, cameraBuffer, raycasting) => {\n if (Utils.isNull(cameraBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing view projection buffers was provided.`);\n }\n const viewTransformBuffer = cameraBuffer.buffer(ctx, 'cameraViewTransform'), viewTransformBufferBuffer = viewTransformBuffer.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, viewTransformBuffer);\n const { group } = wgsl.bindings(WGSLBindingType.Camera, 'cameraViewTransform', 0);\n const bindGroup = this._ensureLineCameraProjectionBindGroup(cameraBuffer.item, viewTransformBufferBuffer, \n /*viewTransformBuffer.fresh*/ false, group, raycasting);\n pass.setBindGroup(group, bindGroup);\n };\n this._bindLineCameraProjection = (pass, ...buffers) => {\n const cameraBuffer = buffers.at(0);\n bindLineCameraProjection(pass, cameraBuffer, false);\n };\n this._bindLineRaycastCameraProjection = (pass, ...buffers) => {\n const cameraBuffer = buffers.at(0);\n bindLineCameraProjection(pass, cameraBuffer, true);\n };\n // positions storage\n this._bindLinePositions = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing vertex buffers was provided as index 0.`);\n }\n // storage buffer\n const positionsBuffer = /* should have a storage buffer here */ meshBuffer.buffer(ctx, 'geometryPositions'), positionsBufferBuffer = positionsBuffer.buffer;\n let refresh = positionsBuffer.fresh;\n const buffersInput = [positionsBufferBuffer];\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, positionsBuffer);\n if (fatLines) {\n const lineBuffer = meshBuffer.buffer(ctx, 'line'), lineBufferBuffer = lineBuffer.buffer;\n refresh ||= lineBuffer.fresh;\n buffersInput.push(lineBufferBuffer);\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, lineBuffer);\n }\n const { group: groupIndex } = wgsl.bindings(WGSLBindingType.Mesh, 'line' /* or 'geometryPositions' */, 0);\n const bindGroup = this._ensureLinePositionsBindGroup(meshBuffer.item, buffersInput, refresh, groupIndex);\n pass.setBindGroup(groupIndex, bindGroup);\n };\n // vertexColors\n this._bindLineMaterial = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing vertex colors was provided.`);\n }\n const vertexColorsBuffer = meshBuffer.buffer(ctx, 'material'), vertexColorsBufferBuffer = vertexColorsBuffer.buffer;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, vertexColorsBuffer);\n const bindGroup = this._ensureLineMaterialBindGroup(meshBuffer.item, vertexColorsBufferBuffer, vertexColorsBuffer.fresh, materialGroupIndex);\n pass.setBindGroup(materialGroupIndex, bindGroup);\n };\n // picker\n this._bindLinePicker = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n if (Utils.isNull(meshBuffer)) {\n throw new ReferenceError(`Null ${RenderableBuffers.name} bringing world transform buffer was provided.`);\n }\n const u32id = meshBuffer.buffer(ctx, 'u32id'), u32idBuffer = u32id.buffer, u32idArray = u32id.value;\n // writes only if buffer is fresh\n PipelineUtils.writeBufferConditionally(device, u32id);\n const bindGroup = this._ensureLineU32idBindGroup(meshBuffer.item, u32idBuffer, /* reuse */ false /*u32id.fresh*/);\n pass.setBindGroup(raycastLayoutIndex, bindGroup);\n };\n this._drawLine = (pass, ...buffers) => {\n const meshBuffer = buffers.at(0);\n const mesh = meshBuffer.item, geometry = mesh.geometry /* as NodeGeometry*/;\n if (fatLines) {\n pass.draw(6, geometry.positions.length - 1, 0, 0);\n }\n else {\n pass.draw(geometry.positions.length);\n }\n };\n }\n}\n// #endregion\n","import { Utils } from '@pacem/pacem-core';\nimport { LABEL_PREFIX, GPUTextureUsage, GPUBufferUsage, GPUMapMode } from './constants';\nimport { RenderPipelines } from './pipelinefactory';\n//namespace Pacem.Drawing3D.WebGPU {\n/**\n * Factory/registry for {@link Raycaster}s: builds (or returns the memoized) color-picking {@link Raycaster} for a\n * given {@link Context}, used by the {@link Renderer}'s `raycast` implementation (`renderer.ts`) to hit-test pointer\n * clicks/hovers against rendered items. Raycasters are memoized per {@link Context} so their off-screen render\n * target/readback buffer are reused across calls instead of being reallocated every raycast.\n */\nexport class Raycasters {\n // learn from:\n // https://webglfundamentals.org/webgl/lessons/webgl-qna-how-to-get-the-3d-coordinates-of-a-mouse-click.html\n // https://github.com/mrdoob/three.js/blob/master/src/core/Raycaster.js\n // https://shi-yan.github.io/webgpuunleashed/Control/object_picking.html\n // https://gist.github.com/greggman/57c3c0d3cf1db14f1baad2d9b0094397 (color picking)\n static { this._memoizer = new WeakMap(); }\n /** Destroys and clears all {@link Raycaster}s memoized for `ctx` (e.g. on device loss/adapter teardown). */\n static dispose(ctx) {\n const memoizer = this._memoizer;\n if (memoizer.has(ctx)) {\n const cache = memoizer.get(ctx);\n for (let raycaster of cache.values()) {\n raycaster.destroy();\n }\n cache.clear();\n memoizer.delete(ctx);\n }\n }\n /** Creates a raycaster that uses color picking as a strategy to hit-test objects. */\n static createColorPicking(ctx) {\n const memoizer = this._memoizer;\n if (!memoizer.has(ctx)) {\n memoizer.set(ctx, new Map());\n }\n const cache = memoizer.get(ctx);\n const key = 'colorpick';\n if (cache.has(key)) {\n return cache.get(key);\n }\n const retval = new ColorPickingRaycaster(ctx);\n cache.set(key, retval);\n return retval;\n }\n}\nconst NUM_PIXELS = 1;\nclass ColorPickingRaycaster {\n constructor(_context) {\n this._context = _context;\n this._objects = new Map();\n this.frame = (interaction, ...buffers) => {\n if (Utils.isNull(this._encoder)) {\n throw new Error('Null encoder. Maybe you missed to call the \\'begin\\' method first.');\n }\n const objects = Array.from(buffers);\n const pipeline = RenderPipelines.createColorPicking(this._context, objects);\n pipeline?.frame(this._pass, interaction, ...buffers);\n for (let buffer of objects) {\n const item = buffer.item;\n if (item.inert) {\n continue;\n }\n //buffer.lock();\n this._objects.set(buffer.id, buffer);\n }\n };\n this.end = (pixel) => {\n if (!Utils.isNull(this._handle)) {\n return this._handle;\n }\n const pass = this._pass;\n const commandEncoder = this._encoder;\n const { device } = this._context;\n const { render } = this._textures;\n const pickTexture = render.texture;\n const pickBuffer = this._ensureBuffer();\n pass.end();\n commandEncoder.copyTextureToBuffer({\n texture: pickTexture,\n // mipLevel: 0,\n origin: {\n x: pixel.x,\n y: pixel.y,\n }\n }, {\n buffer: pickBuffer,\n bytesPerRow: ((NUM_PIXELS * 4 + 255) | 0) * 256,\n rowsPerImage: 1,\n }, {\n width: NUM_PIXELS,\n // height: 1,\n // depth: 1,\n });\n device.queue.submit([commandEncoder.finish()]);\n // remove\n this._encoder = null;\n const _this = this;\n const objects = _this._objects;\n const resetHandle = () => {\n _this._handle = null;\n };\n return this._handle = new Promise((resolve, _) => {\n pickBuffer.mapAsync(GPUMapMode.READ, 0, 4 * NUM_PIXELS).then(_ => {\n const ids = new Uint32Array(pickBuffer.getMappedRange(0, 4 * NUM_PIXELS));\n const id = ids[0];\n pickBuffer.unmap();\n // remove promise reference\n resetHandle();\n const buffer = objects.get(id);\n if (!buffer) {\n resolve([]);\n }\n else {\n resolve([buffer.item]);\n }\n // cleanup\n //pickBuffer.destroy();\n //pickTexture.destroy();\n //objects.values().forEach(b => b.unlock());\n });\n });\n };\n }\n _createTexture(format) {\n const { device, canvas } = this._context;\n const width = Math.min(device.limits.maxTextureDimension2D, canvas.clientWidth), height = Math.min(device.limits.maxTextureDimension2D, canvas.clientHeight);\n return device.createTexture({\n size: [width, height, 1],\n format,\n usage: GPUTextureUsage.COPY_SRC | GPUTextureUsage.RENDER_ATTACHMENT\n });\n }\n _ensureBuffer() {\n const buffer = this._buffer;\n if (!Utils.isNull(buffer)) {\n return buffer;\n }\n const { device } = this._context;\n return this._buffer = device.createBuffer({\n label: LABEL_PREFIX + 'colorpick-output-buffer',\n size: NUM_PIXELS * 4,\n usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n });\n }\n _ensureTextures() {\n const textures = this._textures;\n if (!Utils.isNull(textures)) {\n return textures;\n }\n const renderTex = this._createTexture('r32uint'), depthTex = this._createTexture('depth24plus');\n const render = { texture: renderTex, view: renderTex.createView() };\n const depth = { texture: depthTex, view: depthTex.createView() };\n return this._textures = { render, depth };\n }\n ;\n _destroyTexture(texture) {\n if (Utils.isNull(texture)) {\n return;\n }\n texture.texture?.destroy();\n }\n destroy() {\n const textures = this._textures, buffer = this._buffer;\n if (!Utils.isNullOrEmpty(textures)) {\n const { render, depth } = textures;\n this._destroyTexture(render);\n this._destroyTexture(depth);\n this._textures = null;\n }\n if (!Utils.isNull(buffer)) {\n buffer.destroy();\n this._buffer = null;\n }\n }\n begin() {\n const { device } = this._context;\n this._encoder = device.createCommandEncoder({ label: LABEL_PREFIX + 'colorpick-raycaster' });\n const { render, depth } = this._ensureTextures();\n const passDescriptor = {\n label: LABEL_PREFIX + 'colorpick-raycaster-pass',\n colorAttachments: [\n {\n view: render.view,\n clearValue: { r: 0, g: 0, b: 0, a: 0 },\n loadOp: 'clear',\n storeOp: 'store',\n },\n ],\n depthStencilAttachment: {\n view: depth.view, // Assigned later\n depthClearValue: 1,\n depthLoadOp: 'clear',\n depthStoreOp: 'store',\n },\n };\n this._pass = this._encoder.beginRenderPass(passDescriptor);\n this._objects.clear();\n }\n}\n","import { Utils, P, Logging } from '@pacem/pacem-core';\nimport { Colors } from '@pacem/pacem-foundation';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { StalePropertyFlag, isMesh, isCamera, isLight, isGroup } from '../../types';\nimport { AdapterUtils } from '../shared';\nimport { LABEL_PREFIX, GPUTextureUsage } from './constants';\nimport { RenderPipelines } from './pipelinefactory';\nimport { Raycasters } from './raycaster';\nimport { RenderableBuffers, RenderLooper, ManagedBuffers } from './renderablebuffer';\n//namespace Pacem.Drawing3D.WebGPU {\nconst Vector3D = Geometry.LinearAlgebra.Vector3D;\n/** Reason a WebGPU {@link Renderer} failed to initialize, as reported via a rejected {@link Renderers.create} promise (see {@link WebGPUIssue}). */\nexport var WebGPUIssueCause;\n(function (WebGPUIssueCause) {\n /** `navigator.gpu` is unavailable — the browser/OS doesn't support WebGPU at all. */\n WebGPUIssueCause[WebGPUIssueCause[\"NotSupported\"] = 0] = \"NotSupported\";\n /** WebGPU is supported, but no {@link GPUAdapter}/{@link GPUDevice} could be obtained (e.g. disabled via flags, denied, or hardware unsupported). */\n WebGPUIssueCause[WebGPUIssueCause[\"Disabled\"] = 1] = \"Disabled\";\n})(WebGPUIssueCause || (WebGPUIssueCause = {}));\n/**\n * Factory for the WebGPU {@link Renderer} consumed by {@link Pacem3DWebgpuAdapterElement}. Requests a\n * {@link GPUAdapter}/{@link GPUDevice}, configures the stage canvas's {@link GPUCanvasContext}, and wraps everything\n * in a {@link Renderer} implementation that owns: the per-frame render/raycast loop (via {@link RenderLooper}), the\n * mesh/geometry/material buffer caches ({@link RenderableBuffers}/{@link ManagedBuffers}), the multisample/depth\n * render targets, and pointer hit-testing ({@link Raycasters}).\n */\nexport class Renderers {\n /**\n * Creates and asynchronously initializes a WebGPU {@link Renderer} for `stage`'s canvas.\n * @param stage The owning `<pacem-3d>` element whose wrapper hosts the render canvas.\n * @param config Whether to enable per-frame WebGPU validation error scopes (a perf hog — debug builds only) and optional WGSL shader modifiers.\n * @returns A promise resolving to the ready {@link Renderer}, or rejecting with a {@link WebGPUIssue} if WebGPU isn't supported or no adapter/device could be obtained.\n */\n static create(stage, config) {\n return new Promise((resolve, reject) => {\n if (!navigator.gpu) {\n const message = \"WebGPU not supported.\";\n const issue = { message, cause: WebGPUIssueCause.NotSupported };\n reject(issue);\n }\n else {\n const retval = new RendererClass(stage);\n retval.init(config).then(_ => resolve(retval), error => {\n const message = typeof error === 'string' ? error : error.message;\n const issue = { message, cause: WebGPUIssueCause.Disabled };\n reject(issue);\n });\n }\n });\n }\n}\nfunction getDefaultCamera(stage) {\n return {\n bottom: -1, top: 1, left: -1, right: 1, near: .1, far: 200, lookAt: Vector3D.from(0, 0, 0), up: Vector3D.j(), position: Vector3D.from(0, 0, 1), type: \"orthographic\",\n flags: [], stage\n };\n}\nfunction destroyTextures(...textures) {\n for (let tex of textures || []) {\n tex?.destroy();\n }\n}\nclass RendererClass {\n #stage;\n #canvas;\n #context;\n #renderables;\n #geometries;\n #materials;\n #looper;\n #textures;\n #config;\n #disabled;\n // interaction buffer\n #interactionBuffer;\n // interaction buffer underlying data\n #interaction;\n constructor(stage) {\n this.#renderables = new WeakMap();\n this.#geometries = new WeakMap();\n this.#materials = new WeakMap();\n this.#config = { enableValidation: false };\n this.#disabled = false;\n this._logError = (evt) => {\n const stage = this.#stage, logger = stage.logger;\n if (!Utils.isNull(logger)) {\n const error = 'error' in evt ? evt.error : evt;\n logger.log(Logging.LogLevel.Error, error.message, 'WebGPU');\n }\n };\n this.#rebuildingContext = true;\n /** Whether the renderer is affected by vertex or fragment modifiers.\n * When true, the renderer must provide updated time, cursor position and canvas size to the pipeline's bind groups.\n */\n this.#hasModifiers = false;\n const wrapper = (this.#stage = stage).stage;\n const canvas = document.createElement('canvas');\n canvas.id = P + '_3d_stage_' + Utils.uniqueCode();\n // cleanup\n wrapper.innerHTML = '';\n wrapper.appendChild(this.#canvas = canvas);\n // interaction stuff\n this.#interactionBuffer = ManagedBuffers.create(this.#interaction = {\n time: performance.now(), cursor: { x: 0, y: 0 }, resolution: { width: 0, height: 0 }\n });\n }\n _buildPassDescriptor({ multisample, format }) {\n const { context, device } = this.#context;\n const canvasTexture = context.getCurrentTexture();\n let textures = this.#textures;\n if (Utils.isNull(textures)) {\n textures = {};\n if (multisample) {\n const renderTex = device.createTexture({\n label: LABEL_PREFIX + 'render-texture',\n format: format ?? canvasTexture.format,\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n size: [canvasTexture.width, canvasTexture.height],\n sampleCount: 4,\n });\n textures.render = {\n texture: renderTex, view: renderTex.createView({ label: LABEL_PREFIX + 'render-texture-view' })\n };\n const depthTex = device.createTexture({\n label: LABEL_PREFIX + 'depth-texture',\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n size: [canvasTexture.width, canvasTexture.height],\n sampleCount: 4,\n });\n textures.depth = {\n texture: depthTex, view: depthTex.createView({ label: LABEL_PREFIX + 'depth-texture-view' })\n };\n }\n this.#textures = textures;\n }\n const { transparent, background } = this.#stage;\n const backColor = transparent ? { r: 0, g: 0, b: 0, a: 0 } : background ? (typeof background === 'string' ? Colors.parse(background) : background) : { r: 0, g: 0, b: 0, a: 1 };\n const bgColor = AdapterUtils.flattenVectorArray([backColor]);\n const canvasTexView = canvasTexture.createView({ label: LABEL_PREFIX + 'canvas-texture-view' });\n const colorAttachment = {\n view: canvasTexView,\n clearValue: bgColor,\n loadOp: 'clear',\n storeOp: 'store',\n };\n const passDescriptor = {\n colorAttachments: [colorAttachment]\n };\n if (multisample) {\n const renderTexView = textures.render.view;\n const depthTexView = textures.depth.view;\n passDescriptor.depthStencilAttachment = {\n view: depthTexView,\n depthClearValue: 1,\n depthLoadOp: 'clear',\n depthStoreOp: 'store',\n stencilClearValue: 0,\n stencilReadOnly: true,\n };\n // override\n colorAttachment.view = renderTexView;\n colorAttachment.resolveTarget = canvasTexView;\n }\n return passDescriptor;\n }\n ;\n _buildContext(canvas = this.#canvas, size = this.#stage.size) {\n size ??= canvas;\n let w = size.width;\n let h = size.height;\n const devicePixelRatio = 1; // window.devicePixelRatio;\n canvas.width = w * devicePixelRatio;\n canvas.height = h * devicePixelRatio;\n const context = canvas.getContext('webgpu');\n const textureFormat = navigator.gpu.getPreferredCanvasFormat();\n return { context, textureFormat };\n }\n _buildUpContext(device, adapter, context, format) {\n const { transparent } = this.#stage;\n context.configure({\n alphaMode: transparent ? 'premultiplied' : 'opaque',\n device,\n format,\n });\n this.#context = { device, adapter, canvas: this.#canvas, context, format };\n this.#rebuildingContext = false;\n }\n async init(config) {\n this.#config = config;\n const adapter = await navigator.gpu.requestAdapter();\n if (Utils.isNull(adapter)) {\n throw new Error('WebGPU adapter unavalable or disabled.');\n }\n const device = await adapter.requestDevice();\n if (Utils.isNull(adapter)) {\n throw new Error('WebGPU device unavalable or disabled.');\n }\n device.addEventListener('uncapturederror', this._logError);\n // set flag for shader modifiers presence, this will be used to determine whether to update the interaction buffer on each render call\n this.#hasModifiers = !Utils.isNull(config.modifiers?.version) && !Utils.isNull(config.modifiers)\n && (!Utils.isNull(config.modifiers.vertexInput) || !Utils.isNull(config.modifiers.vertexOutput) || !Utils.isNull(config.modifiers.fragment));\n const { context, textureFormat: format } = this._buildContext();\n this._buildUpContext(device, adapter, context, format);\n }\n #rebuildingContext;\n /** Whether the renderer is affected by vertex or fragment modifiers.\n * When true, the renderer must provide updated time, cursor position and canvas size to the pipeline's bind groups.\n */\n #hasModifiers;\n /**\n * Render procedure.\n */\n render(interaction) {\n if (this.#rebuildingContext || Utils.isNull(this.#looper) || !(this.#canvas.width > 0) || !(this.#canvas.height > 0)) {\n return;\n }\n const context = this.#context, device = context.device, \n // looper\n looper = this.#looper;\n // enable validation scope? (perf hog)\n const validationScope = this.#config?.enableValidation ?? false;\n if (this.#hasModifiers) {\n // update underlying interaction data, this will trigger buffer update\n Utils.extend(this.#interaction, interaction);\n }\n const multisample = true;\n const passDescriptor = this._buildPassDescriptor({ multisample });\n // rendering zone\n const commandEncoder = device.createCommandEncoder({ label: LABEL_PREFIX + 'renderer' });\n const pass = commandEncoder.beginRenderPass(passDescriptor);\n // loop\n looper.loop((mesh, camera, lights) => {\n if (mesh.item.hide) {\n // this code branching is NOT NEEDED ANYMORE,\n // remove it safely\n return false;\n }\n if (validationScope) {\n device.pushErrorScope('validation');\n }\n const renderables = [mesh, camera, ...lights];\n // inject here (pipeline options) any global rendering data (time, cursor, etc.) that may be needed by the shader modifiers\n const pipeline = RenderPipelines.create(context, renderables, { multisample: true, modifiers: this.#config.modifiers });\n // render\n pipeline.frame(pass, this.#interactionBuffer, ...renderables);\n if (validationScope) {\n device.popErrorScope().then(error => {\n if (error) {\n this._logError(error);\n }\n });\n }\n return true;\n });\n pass.end();\n device.queue.submit([commandEncoder.finish()]);\n }\n set disabled(v) {\n this.#disabled = v;\n }\n get disabled() {\n return this.#disabled;\n }\n raycast(pixel) {\n if (this.#rebuildingContext || Utils.isNull(this.#looper)) {\n return Promise.resolve([]);\n }\n const context = this.#context, device = context.device, looper = this.#looper;\n // enable validation scope? (perf hog)\n const validationScope = this.#config?.enableValidation ?? false;\n // rendering zone\n const raycaster = Raycasters.createColorPicking(context);\n raycaster.begin();\n // loop\n looper.loop((mesh, camera) => {\n if (mesh.item.hide) {\n // TODO: remove unwraps and move to nested loops\n // in order to centralize hidden renderable skip logic\n return false;\n }\n if (validationScope) {\n device.pushErrorScope('validation');\n }\n raycaster.frame(this.#interactionBuffer, mesh, camera);\n if (validationScope) {\n device.popErrorScope().then(error => {\n if (error) {\n this._logError(error);\n }\n });\n }\n return true;\n });\n return raycaster.end(pixel);\n }\n _disposeRenderableJustInCase(item) {\n const store = this.#renderables;\n if (store.has(item)) {\n store.get(item)?.destroy();\n store.delete(item);\n }\n }\n _createOrYieldRenderable(item, geometries = this.#geometries, materials = this.#materials) {\n item.stage ??= this.#stage;\n const store = this.#renderables;\n let found = store.get(item);\n if (Utils.isNull(found)) {\n store.set(item, found = RenderableBuffers.create(item, geometries));\n }\n return found;\n }\n _createOrYieldGeometry(item) {\n const store = this.#geometries;\n let found = store.get(item);\n if (Utils.isNull(found)) {\n store.set(item, found = ManagedBuffers.create(item));\n }\n return found;\n }\n _createOrYieldMaterial(item) {\n const store = this.#materials;\n let found = store.get(item);\n if (Utils.isNull(found)) {\n store.set(item, found = ManagedBuffers.create(item));\n }\n return found;\n }\n _unwrapBuffers(grp, accumulator) {\n accumulator ??= { meshes: [], lights: [], cameras: [], groups: [] };\n for (let itemBuffer of grp.children) {\n itemBuffer.item.stage ??= this.#stage;\n if (isMesh(itemBuffer.item)) {\n accumulator.meshes.push(itemBuffer);\n }\n if (isCamera(itemBuffer.item)) {\n accumulator.cameras.push(itemBuffer);\n }\n if (isLight(itemBuffer.item)) {\n accumulator.lights.push(itemBuffer);\n }\n if (isGroup(itemBuffer.item)) {\n accumulator.groups.push(itemBuffer);\n this._unwrapBuffers(itemBuffer, accumulator);\n }\n }\n return accumulator;\n }\n ;\n _update(array) {\n const groupBuffers = [];\n const meshBuffers = [];\n const lightBuffers = [];\n const factory = i => this._createOrYieldRenderable(i);\n let camera;\n for (let item of array) {\n if (item.hide) {\n // remove stored renderable just in case\n this._disposeRenderableJustInCase(item);\n continue;\n }\n // ensure stage\n item.stage ??= this.#stage;\n // groups\n if (isGroup(item)) {\n const g = item;\n if (g.flags.includes(StalePropertyFlag.Children)) {\n this.#renderables.delete(g);\n }\n groupBuffers.push(factory(g));\n }\n // meshes\n if (isMesh(item) && item.geometry) {\n // build pipelines based on provided element wrappers (cached buffers)\n this._createOrYieldGeometry(item.geometry);\n if (!Utils.isNull(item.material)) {\n this._createOrYieldMaterial(item.material);\n }\n meshBuffers.push(factory(item));\n }\n // lights\n if (isLight(item)) {\n lightBuffers.push(factory(item));\n }\n if (isCamera(item)) {\n // pick the first only\n camera ??= item;\n }\n }\n // find first active camera\n camera ??= getDefaultCamera(this.#stage);\n const cameraBuffer = factory(camera);\n let accumulator = {\n meshes: meshBuffers, lights: lightBuffers, cameras: [cameraBuffer], groups: groupBuffers\n };\n for (let groupBuffer of groupBuffers) {\n accumulator = this._unwrapBuffers(groupBuffer, accumulator);\n }\n // destroy leftovers\n this.#looper?.items.meshes.forEach(buffer => {\n if (!meshBuffers.includes(buffer)) {\n buffer.destroy();\n }\n });\n this.#looper = new RenderLooper(accumulator);\n }\n update(...items) {\n this._update(Array.from(items));\n }\n dispose() {\n this.#looper = null;\n if (this._disposeContext()) {\n const { device } = this.#context;\n device.removeEventListener('uncapturederror', this._logError);\n device.destroy;\n }\n }\n _disposeContext() {\n const ctx = this.#context;\n if (Utils.isNull(ctx)) {\n return false;\n }\n // dispose associated raycasters, if any\n Raycasters.dispose(ctx);\n // dispose associated pipelines, if any\n RenderPipelines.dispose(ctx);\n // dispose textures\n const textures = this.#textures;\n this.#textures = null;\n if (!Utils.isNull(textures)) {\n const { render, depth } = textures;\n destroyTextures(render?.texture, depth?.texture);\n }\n // dispose context\n ctx.context.unconfigure();\n return true;\n }\n resize(size) {\n this.#rebuildingContext = true;\n if (this._disposeContext()) {\n const { device, adapter } = this.#context;\n const { context, textureFormat: format } = this._buildContext(this.canvas, size);\n this._buildUpContext(device, adapter, context, format);\n // interaction\n if (this.#hasModifiers) {\n Utils.extend(this.#interaction, { resolution: size });\n }\n }\n }\n get canvas() {\n return this.#canvas;\n }\n}\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElementUtils, CustomElement, P, Watch, PropertyConverters, PropertyChangeEvent, PropertyChangeEventName, Debounce, Utils, Logging, Components } from '@pacem/pacem-core';\nimport { Strings } from '@pacem/pacem-foundation';\nimport { Pacem3DAdapterElement, StalePropertyFlag } from '../../types';\nimport { Renderers, WebGPUIssueCause } from './renderer';\n//namespace Pacem.Components.Drawing3D {\nconst WEBGPU_RAYCAST_CALLBACK_PROP = 'WebGPURaycastCallback';\nconst WEBGPU_RAYCAST_PIXEL_PROP = 'WebGPURaycastPixel';\nconst GETVAL = CustomElementUtils.getAttachedPropertyValue, SETVAL = CustomElementUtils.setAttachedPropertyValue, DELVAL = CustomElementUtils.deleteAttachedPropertyValue;\n/** `<pacem-3d-wgsl-script>`: declares a WGSL snippet (vertex input/output or fragment stage) that a parent {@link Pacem3DWebgpuAdapterElement} splices into its render pipeline shaders, tracked via a content {@link version} hash. */\nlet Pacem3DWgslScriptElement = class Pacem3DWgslScriptElement extends Components.PacemItemElement {\n findContainer() {\n return CustomElementUtils.findAncestor(this, n => n instanceof Pacem3DWebgpuAdapterElement);\n }\n #version = '';\n /** @readonly Gets a hash of the current {@link wgsl} content, changing whenever it does. */\n get version() {\n return this.#version;\n }\n #observer = new MutationObserver(() => {\n this.wgsl = this.textContent;\n });\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.wgsl = this.textContent;\n this.#observer.observe(this, { characterData: true });\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'wgsl') {\n this._computeVersion(val);\n }\n }\n _computeVersion(wgsl = this.wgsl) {\n Strings.hash(wgsl).then(v => {\n if (v !== this.#version) {\n const old = this.#version;\n const val = v;\n this.#version = val;\n const evt = new PropertyChangeEvent({ propertyName: 'version', oldValue: old, currentValue: val, firstChange: Utils.isNullOrEmpty(old) });\n this.dispatchEvent(evt);\n }\n });\n }\n disconnectedCallback() {\n this.#observer.disconnect();\n super.disconnectedCallback();\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DWgslScriptElement.prototype, \"type\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], Pacem3DWgslScriptElement.prototype, \"wgsl\", void 0);\nPacem3DWgslScriptElement = __decorate([\n CustomElement({ tagName: P + '-3d-wgsl-script' })\n], Pacem3DWgslScriptElement);\nexport { Pacem3DWgslScriptElement };\n/**\n * `<pacem-3d-webgpu-adapter>`: {@link Pacem3DAdapterElement} rendering backend built directly on the browser's\n * WebGPU API. Manages one {@link Renderer} per stage it is assigned to, hosts child {@link Pacem3DWgslScriptElement}\n * shader customizations (via {@link modifiers}), and falls back gracefully (see {@link supported}/{@link active})\n * when WebGPU isn't available.\n */\nlet Pacem3DWebgpuAdapterElement = class Pacem3DWebgpuAdapterElement extends Pacem3DAdapterElement {\n constructor() {\n super(...arguments);\n this.#items = [];\n this._scriptVersionChangeHandler = (evt) => {\n const { propertyName: name } = evt.detail;\n if (name === 'version') {\n this._parseWgslModifiers(evt.detail.currentValue);\n }\n };\n this.#scenes = new Set();\n this.#renderers = new Map();\n this.#supported = true;\n this.#active = true;\n this.#sceneToUpdate = new WeakMap();\n }\n invalidateSize(stage, size = stage.size) {\n const renderer = this._ensureRenderer(stage);\n renderer?.resize(size);\n }\n #items;\n /** @readonly Gets the child {@link Pacem3DWgslScriptElement} shader-customization items currently registered. */\n get items() {\n return this.#items;\n }\n /** Registers a child {@link Pacem3DWgslScriptElement}, re-parsing the WGSL {@link modifiers} it contributes. */\n register(item) {\n const items = this.#items;\n if (item instanceof Pacem3DWgslScriptElement && !items.includes(item)) {\n item.addEventListener(PropertyChangeEventName, this._scriptVersionChangeHandler, false);\n items.push(item);\n this._parseWgslModifiers(this.modifiers?.version);\n return true;\n }\n return false;\n }\n /** Unregisters a previously-registered {@link Pacem3DWgslScriptElement}, re-parsing the WGSL {@link modifiers} accordingly. */\n unregister(item) {\n const items = this.#items;\n const ndx = items.indexOf(item);\n if (ndx >= 0) {\n item.removeEventListener(PropertyChangeEventName, this._scriptVersionChangeHandler, false);\n items.splice(ndx, 1);\n this._parseWgslModifiers(this.modifiers?.version);\n return true;\n }\n return false;\n }\n #scenes;\n #renderers;\n #supported;\n #active;\n /** @readonly Gets whether WebGPU is supported by the current browser/device. */\n get supported() {\n return this.#supported;\n }\n /** @readonly Gets whether the adapter is currently able to render (false once a {@link WebGPUIssue} disables it). */\n get active() {\n return this.#active;\n }\n _webGPUNotSupported(issue) {\n if (this.#supported && issue.cause === WebGPUIssueCause.NotSupported) {\n this.#supported = false;\n this.dispatchEvent(new PropertyChangeEvent({ propertyName: 'supported', oldValue: null, currentValue: false }));\n }\n if (this.#active) {\n this.#active = false;\n this.dispatchEvent(new PropertyChangeEvent({ propertyName: 'active', oldValue: null, currentValue: false }));\n }\n }\n initialize(scene) {\n const set = this.#renderers;\n const scenes = this.#scenes;\n if (!scenes.has(scene)) {\n scenes.add(scene);\n }\n return Renderers.create(scene, { enableValidation: this.enableValidation ?? false, modifiers: this.modifiers })\n .then(renderer => {\n set.get(scene)?.update( /* empty */);\n // update dictionary with the actual renderer\n set.set(scene, renderer);\n // assign datasource immediately\n this._updatePipeline(scene);\n return renderer.canvas;\n }, (issue) => {\n this.log(Logging.LogLevel.Error, issue.message);\n this._webGPUNotSupported(issue);\n return null;\n });\n }\n _parseWgslModifiers(val) {\n const scripts = this.#items, vertexGeometryScript = scripts.find(a => a.type == 'vertex-input'), vertexOutputScript = scripts.find(a => a.type == 'vertex-output'), fragmentScript = scripts.find(a => a.type == 'fragment');\n const vertexInput = vertexGeometryScript?.wgsl, vertexOutput = vertexOutputScript?.wgsl, fragment = fragmentScript?.wgsl;\n this.modifiers = { vertexInput, vertexOutput, fragment, version: val };\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (first) {\n return;\n }\n switch (name) {\n case 'modifiers':\n case 'enableValidation':\n // reinitialize\n this._reinitialize();\n break;\n }\n }\n disconnectedCallback() {\n const set = this.#renderers;\n for (let [_, renderer] of set) {\n renderer?.dispose();\n }\n set.clear();\n this.#scenes.clear();\n super.disconnectedCallback();\n }\n dispose(scene) {\n const renderers = this.#renderers, scenes = this.#scenes;\n ;\n if (renderers.has(scene)) {\n renderers.get(scene)?.dispose();\n renderers.delete(scene);\n }\n if (scenes.has(scene)) {\n scenes.delete(scene);\n }\n }\n _reinitialize() {\n for (let scene of this.#scenes.values()) {\n // rebuild renderer with new config in association to scene\n this.initialize(scene);\n }\n }\n _ensureRenderer(scene) {\n const set = this.#renderers;\n return set.get(scene);\n }\n _updatePipeline(scene) {\n const renderer = this._ensureRenderer(scene);\n renderer?.update(...scene.datasource);\n }\n #sceneToUpdate;\n /**\n * Called when scene datasource changes.\n * @param scene\n */\n render(scene) {\n // do not render hidden stages\n const width = scene.size?.width, height = scene.size?.height;\n if (!(width > 0) || !(height > 0)) {\n return;\n }\n // retrieve stage renderer\n const renderer = this._ensureRenderer(scene);\n if (Utils.isNull(renderer)) {\n return;\n }\n if (this.#sceneToUpdate.has(scene)) {\n this.#sceneToUpdate.delete(scene);\n this._itemsChangedExec(scene);\n }\n // draw\n const pixel = GETVAL(scene, WEBGPU_RAYCAST_PIXEL_PROP);\n renderer.render({ cursor: pixel, time: performance.now(), resolution: { width, height } });\n // raycast, just in case\n if (!scene.interactive) {\n return;\n }\n const callback = GETVAL(scene, WEBGPU_RAYCAST_CALLBACK_PROP);\n if (Utils.isNullOrEmpty(callback)) {\n return;\n }\n if (Utils.isNullOrEmpty(pixel)) {\n callback(null);\n return;\n }\n // draw again\n renderer.raycast(pixel).then(array => {\n if (Utils.isNullOrEmpty(array)) {\n callback(null);\n }\n else {\n const retval = {\n object: array[0], point: null\n };\n callback(retval);\n }\n });\n }\n snapshot(scene, background, type, quality) {\n const renderers = this.#renderers;\n if (!renderers.has(scene)) {\n return Promise.resolve(null);\n }\n const { canvas } = renderers.get(scene);\n const jpeg = !Utils.isNullOrEmpty(background), mime = type ?? (jpeg ? 'image/jpeg' : null), compression = quality ?? (jpeg ? .9 : null);\n return new Promise((resolve, _) => {\n this.render(scene);\n Utils.snapshotElement(canvas, background, mime, compression).then(resolve);\n });\n }\n raycast(stage, point, size, callback) {\n SETVAL(stage, WEBGPU_RAYCAST_CALLBACK_PROP, callback);\n if (point.x < 0 || point.y < 0 || point.x >= size.width || point.y >= size.height) {\n DELVAL(stage, WEBGPU_RAYCAST_PIXEL_PROP);\n }\n else {\n SETVAL(stage, WEBGPU_RAYCAST_PIXEL_PROP, point);\n }\n }\n _itemsChangedExec(stage) {\n this._updatePipeline(stage);\n }\n _itemsChanged(stage, _) {\n this.#sceneToUpdate.set(stage, true);\n }\n addItem(stage, item) {\n this._itemsChanged(stage, item);\n }\n removeItem(stage, item) {\n this._itemsChanged(stage, item);\n }\n updateItem(stage, item) {\n // if 'hide' property has changed or 'children' property (for groups)\n // then there's need to regenerate the tree view (camera switch, more/less meshes, ...)\n if (Utils.isNull(item)\n || item.flags.indexOf(StalePropertyFlag.Visibility) >= 0\n || item.flags.indexOf(StalePropertyFlag.Children) >= 0) {\n this._itemsChanged(stage, item);\n }\n }\n zoomFit(stage, ...items) {\n // TODO: implement on the renderer side\n return Promise.resolve();\n }\n project(stage, point3D) {\n // TODO: implement on the renderer side\n return { x: 0, y: 0 };\n }\n getScene(stage) {\n // no 3rd-party/proprietary scene objects to provide.\n return stage;\n }\n};\n__decorate([\n Debounce(100)\n], Pacem3DWebgpuAdapterElement.prototype, \"_parseWgslModifiers\", null);\n__decorate([\n Watch({ emit: false })\n], Pacem3DWebgpuAdapterElement.prototype, \"modifiers\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], Pacem3DWebgpuAdapterElement.prototype, \"enableValidation\", void 0);\nPacem3DWebgpuAdapterElement = __decorate([\n CustomElement({ tagName: P + '-3d-webgpu-adapter' })\n], Pacem3DWebgpuAdapterElement);\nexport { Pacem3DWebgpuAdapterElement };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, Watch, PropertyConverters, Utils, CustomEventUtils, avoidHandler, Behaviors, PropertyChangeEventName } from '@pacem/pacem-core';\nimport { Geometry } from '@pacem/pacem-numerical';\nimport { isCamera, StalePropertyFlag } from '../../../types';\nimport { TAG_MIDDLE_NAME } from '../../../constants';\nimport { BooleanOrNumberConverter } from '../../../converters';\n//namespace Pacem.Components.Drawing3D {\nconst Vector3D = Geometry.LinearAlgebra.Vector3D;\nconst Matrix3D = Geometry.LinearAlgebra.Matrix3D;\nconst Quaternion = Geometry.LinearAlgebra.Quaternion;\nconst Spherical = Geometry.LinearAlgebra.Spherical;\nfunction findCameraStage(element) {\n if (isCamera(element)) {\n return element.stage;\n }\n return null;\n}\nconst ROTATION_FACTOR = 1, ZOOM_FACTOR = 1, FRICTION_FACTOR = .05, EPSILON = 0.001;\nconst DEFAULT_CONFIGURATION = {\n maxAzimuth: 180, minAzimuth: -180, inertia: false, maxPolar: Infinity, minPolar: -Infinity,\n zoom: { enabled: true }, pan: { enabled: true, button: 2 }, rotation: { enabled: true, button: 0 }\n};\nexport class OrbitCameraBehavior {\n constructor(item, _config) {\n this._config = _config;\n /** State of the current configuration, obtained from the interaction inputs. */\n this._input = {\n /** Zoom/scale */\n rho: 0,\n /** Azimuth (rotation around x axis in webgpu) */\n theta: 0,\n /** Polar (rotation around y axis in webgpu) */\n phi: 0,\n /** pan/offset x*/\n x: 0,\n /** pan/offset y*/\n y: 0,\n };\n /** Sibling state of {@link _input} that comes helpful when inertia is involved. */\n this._progress = {\n rho: 0,\n theta: 0,\n phi: 0,\n x: 0,\n y: 0,\n };\n this._startHandler = (evt) => {\n const { rotation, pan } = this._config;\n const isMouse = evt.pointerType === 'mouse';\n const rotating = rotation.enabled && isMouse && evt.button === rotation.button && CustomEventUtils.matchModifiers(evt, rotation.modifiers);\n const panning = pan.enabled && isMouse && evt.button === pan.button && CustomEventUtils.matchModifiers(evt, pan.modifiers);\n if (!rotating && !panning) {\n return;\n }\n this.#rotating = rotating;\n if (this.#panning = panning) {\n // build current state from the current camera configuration\n this._currentState = OrbitCameraBehavior._buildState(this._camera);\n // reset pan offsets\n Utils.extend(this._input, Vector3D.zero());\n this._progress.x = this._progress.y = 0;\n }\n avoidHandler(evt);\n window.clearTimeout(this.#handle);\n window.addEventListener('pointerup', this._endHandler, false);\n window.addEventListener('pointermove', this._moveHandler, false);\n window.addEventListener('contextmenu', this._avoidHandler, false);\n };\n this._avoidHandler = (evt) => avoidHandler(evt);\n this._endHandler = (evt) => {\n avoidHandler(evt);\n // delay the listener removals a bit (~frame)\n this.#handle = window.setTimeout(() => {\n window.removeEventListener('pointerup', this._endHandler);\n window.removeEventListener('pointermove', this._moveHandler);\n window.removeEventListener('contextmenu', this._avoidHandler);\n }, 20);\n };\n this._zoomHandler = (evt) => {\n const { zoom } = this._config;\n const zooming = zoom.enabled && CustomEventUtils.matchModifiers(evt, zoom.modifiers);\n if (!zooming) {\n return;\n }\n avoidHandler(evt);\n const coords = this._input;\n coords.rho -= Math.sign(evt.deltaY);\n };\n this._moveHandler = (evt) => {\n avoidHandler(evt);\n const { height, width } = this._scene.size;\n const coords = this._input;\n const size = Math.min(height, width);\n if (this.#rotating) {\n // rotation\n const f0 = -ROTATION_FACTOR * 360 / size;\n const { phi, theta } = coords;\n const { maxPolar, minPolar, maxAzimuth, minAzimuth } = this._config;\n coords.phi = (phi + evt.movementX * f0).clamp(minPolar, maxPolar);\n coords.theta = (theta + evt.movementY * f0).clamp(minAzimuth, maxAzimuth);\n }\n else if (this.#panning) {\n // pan\n const f0 = this._currentState.radius / size;\n coords.x += -evt.movementX * f0;\n coords.y += evt.movementY * f0;\n }\n };\n this._renderHandler = (_) => {\n this._update();\n };\n const scene = this._scene = (this._camera = item).stage;\n this._initialState = this._currentState = OrbitCameraBehavior._buildState(item);\n const canvas = this._canvas = scene.stage;\n canvas.addEventListener('pointerdown', this._startHandler, false);\n canvas.addEventListener('wheel', this._zoomHandler, { passive: false });\n scene.addEventListener('render', this._renderHandler, false);\n }\n static _buildState(camera) {\n const vector = Vector3D.subtract(camera.position, camera.lookAt);\n const radius = Vector3D.mag(vector);\n return { target: camera.lookAt, versor: Vector3D.unit(vector), up: camera.up, radius, position: camera.position };\n }\n /**\n * Tries to attach a new {@link OrbitCameraBehavior} to the provided element, if the element is a proper renderable and it is ready.\n * @param element\n * @returns\n */\n static tryAttach(element, config) {\n config ??= DEFAULT_CONFIGURATION;\n const canvas = findCameraStage(element)?.stage;\n if (!Utils.isNull(canvas)) {\n const { position, lookAt } = element;\n if (Utils.isNull(position) || Utils.isNull(lookAt) || Vector3D.areClose(position, lookAt)) {\n return null;\n }\n return new OrbitCameraBehavior(element, config);\n }\n else {\n return null;\n }\n }\n get configuration() {\n return this._config;\n }\n set configuration(v) {\n this._config = v;\n }\n #panning;\n #rotating;\n #handle;\n _getSafeAzimuth({ theta }) {\n return OrbitCameraBehavior._modAngle(theta);\n }\n _getSafePolar({ phi }) {\n return OrbitCameraBehavior._modAngle(phi);\n }\n static _modAngle(deg) {\n while (deg < 0) {\n deg += 360;\n }\n return deg % 360;\n }\n static _getViewXYZ(state) {\n const { versor, up: initUp } = state;\n const right = Vector3D.cross(versor, initUp);\n const up = Vector3D.cross(right, versor);\n Vector3D.normalize(right);\n Vector3D.normalize(up);\n return { right, up, versor };\n }\n #updating;\n _update() {\n if (this.#updating) {\n return;\n }\n this.#updating = true;\n const camera = this._camera;\n const { radius, versor, target: initTarget, up: initUp } = this._initialState;\n const { target: trackedLookAt } = this._currentState;\n const { theta, phi, rho, x, y } = this._input;\n const progress = this._progress;\n const { theta: theta_, phi: phi_, rho: rho_, x: x_, y: y_ } = progress;\n const rotated = Math.abs(phi_ - phi) > EPSILON || Math.abs(theta_ - theta) > EPSILON, zoomed = Math.abs(rho_ - rho) > EPSILON, panned = Math.abs(x - x_) > EPSILON || Math.abs(y - y_) > EPSILON;\n if (zoomed || rotated || panned) {\n const inertia = typeof this._config.inertia === 'boolean' ? (this._config.inertia ? FRICTION_FACTOR : 0) : this._config.inertia;\n const inertiaSpecified = inertia > 0 && inertia < 1;\n const { right, up } = OrbitCameraBehavior._getViewXYZ(this._initialState);\n // setup position\n let newPosition = initTarget;\n let newUp = initUp;\n let newLookAt = trackedLookAt;\n //if (zoomed) { 2\n let rho0 = rho_;\n if (inertiaSpecified) {\n rho0 += (rho - rho_) * inertia;\n }\n else {\n rho0 = rho;\n }\n progress.rho = rho0;\n const scale = Math.pow(.95, rho0 * ZOOM_FACTOR);\n const zoom = Vector3D.scale(versor, -scale * radius);\n newPosition = Vector3D.add(newPosition, zoom);\n //}\n //if (rotated) { 3\n let phi0 = phi_;\n let theta0 = theta_;\n if (inertiaSpecified) {\n phi0 += (phi - phi_) * inertia;\n theta0 += (theta - theta_) * inertia;\n }\n else {\n phi0 = phi;\n theta0 = theta;\n }\n const PHI = this._getSafePolar({ phi: progress.phi = phi0 });\n const THETA = this._getSafeAzimuth({ theta: progress.theta = theta0 });\n // pivot of the rotation matrix should be the center of the bounding sphere\n const pivot = Vector3D.negate(initTarget);\n let m = Matrix3D.translate(Matrix3D.identity(), pivot);\n const qy = Quaternion.fromAxisAngle(up, PHI);\n const qx = Quaternion.fromAxisAngle(right, THETA);\n const rot = Matrix3D.multiply(Quaternion.toRotationMatrix(qx), Quaternion.toRotationMatrix(qy));\n m = Matrix3D.multiply(m, rot);\n m = Matrix3D.translate(m, Vector3D.negate(pivot));\n newPosition = Matrix3D.transform(newPosition, m);\n newUp = Matrix3D.transform(newUp, Matrix3D.clone(m, m0 => { m0.offsetX = m0.offsetY = m0.offsetZ = 0; }));\n //}\n //if (panned){ 1\n const x1 = x_, y1 = y_;\n let x0 = x1, y0 = y1;\n if (inertiaSpecified) {\n x0 += (x - x1) * inertia;\n y0 += (y - y1) * inertia;\n }\n else {\n x0 = x;\n y0 = y;\n }\n progress.x = x0;\n progress.y = y0;\n const { right: currentRight, up: currentUp } = OrbitCameraBehavior._getViewXYZ(this._currentState);\n const r = Vector3D.scale(currentRight, x0), u = Vector3D.scale(currentUp, y0);\n const offset = Vector3D.add(r, u);\n newLookAt = Vector3D.add(trackedLookAt, offset);\n camera.lookAt = newLookAt;\n camera.position = newPosition; // Vector3D.add(newPosition, Vector3D.subtract(initTarget, newLookAt));\n camera.up = newUp;\n // notify something has changed about the target renderable\n camera.flags.push(StalePropertyFlag.Camera);\n }\n this.#updating = false;\n }\n /** Detaches and removes handlers and resources. */\n dispose() {\n const canvas = this._canvas, scene = this._scene;\n if (!Utils.isNull(canvas)) {\n canvas.removeEventListener('pointerdown', this._startHandler);\n canvas.removeEventListener('wheel', this._zoomHandler);\n }\n scene.removeEventListener('render', this._renderHandler, false);\n }\n}\n/**\n * `<pacem-3d-orbit-camera>`: a behavior element that, applied to a {@link Pacem3DCameraElement}, attaches pointer/wheel\n * driven orbit (rotate/pan/zoom around a target) interaction by instantiating and configuring an\n * {@link OrbitCameraBehavior} for each decorated element.\n */\nlet PacemOrbitCameraBehaviorElement = class PacemOrbitCameraBehaviorElement extends Behaviors.PacemBehavior {\n constructor() {\n super(...arguments);\n this.#map = new Map();\n this._readyHandler = (evt) => {\n if (evt.detail.propertyName === 'isReady' && evt.detail.currentValue === true) {\n const element = evt.currentTarget;\n element.removeEventListener(PropertyChangeEventName, this._readyHandler);\n this._decorateCore(element);\n }\n };\n }\n #map;\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'maxAzimuth':\n case 'minAzimuth':\n case 'inertia':\n case 'zoomControl':\n case 'panControl':\n case 'rotationControl':\n const config = this._buildConfig();\n const items = this.#map;\n for (let tr of items.values()) {\n tr.configuration = config;\n }\n break;\n }\n }\n disconnectedCallback() {\n const items = this.#map;\n for (let tr of items.values()) {\n tr.dispose();\n }\n items.clear();\n super.disconnectedCallback();\n }\n _buildConfig() {\n return Utils.extend({}, DEFAULT_CONFIGURATION, {\n maxAzimuth: this.maxAzimuth ?? Infinity,\n minAzimuth: this.minAzimuth ?? -Infinity,\n minPolar: this.minPolar ?? -Infinity,\n maxPolar: this.maxPolar ?? Infinity,\n inertia: this.inertia ?? false,\n zoom: this.zoomControl ?? DEFAULT_CONFIGURATION.zoom,\n pan: this.panControl ?? DEFAULT_CONFIGURATION.pan,\n rotation: this.rotationControl ?? DEFAULT_CONFIGURATION.rotation,\n });\n }\n _decorateCore(element) {\n const behavior = OrbitCameraBehavior.tryAttach(element, this._buildConfig());\n if (!Utils.isNull(behavior)) {\n this.#map.set(element, behavior);\n }\n }\n decorate(element) {\n if (element.isConnected) {\n this._decorateCore(element);\n }\n else {\n element.addEventListener(PropertyChangeEventName, this._readyHandler, false);\n }\n }\n undecorate(element) {\n const map = this.#map;\n if (map.has(element)) {\n map.get(element).dispose();\n map.delete(element);\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"maxAzimuth\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"maxPolar\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"minAzimuth\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"minPolar\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"zoomControl\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"rotationControl\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemOrbitCameraBehaviorElement.prototype, \"panControl\", void 0);\n__decorate([\n Watch({ emit: false, converter: BooleanOrNumberConverter })\n], PacemOrbitCameraBehaviorElement.prototype, \"inertia\", void 0);\nPacemOrbitCameraBehaviorElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-orbit-camera' })\n], PacemOrbitCameraBehaviorElement);\nexport { PacemOrbitCameraBehaviorElement };\n","import { DeepMerger } from '@pacem/pacem-foundation';\nimport * as Output from './index';\nDeepMerger.merge(Output);\n"],"names":["Geometry","parseAsNumericalArray","Utils","__decorate","this","Components","PropertyChangeEventName","Logging","UI","Animations","ViewChild","PCSS","P","Watch","PropertyConverters","CustomElement","Defaults","CustomUIEvent","CustomElementUtils","PropertyChangeEvent","PacemEventTarget","Imaging","Point","Transformer","CustomEventUtils","Colors","adaptWGSLStringArray","adaptWGSLModifierStringArray","Vector3D","Matrix3D","Strings","Debounce","avoidHandler","Behaviors","DeepMerger"],"mappings":"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I,CAAC,sBAAsB,CAAC,WAAW,EAAE,IAAI,CAAC,wBAAwB,CAAC;AAChF,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,uBAAuB,CAAC;AAC9E,OAAO,EAAE,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,IAAI,CAAC,4BAA4B,CAAC;AACxF,OAAO,EAAE,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,IAAI,CAAC,6BAA6B,CAAC;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,EAAE,6BAA6B,CAAC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE,6BAA6B,CAAC;AAC3C;AACA;AACA;AACA;AACA,CAAC,CAAC;IACF;;IC5MA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,2BAA2B,CAAC,UAAU,GAAG,gCAAgC,EAAE;IAC3F,IAAI,OAAO,CAAC;AACZ;AACA;AACA;AACA,SAAS,EAAE,UAAU,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;IACH;;ICzBA;IACA,MAAM,2BAA2B,GAAG;IACpC,IAAI,EAAE,EAAE,IAAI;IACZ,CAAC;IACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,SAAS,UAAU,CAAC,UAAU,GAAG,2BAA2B,EAAE,KAAK,EAAE,OAAO,GAAG,qBAAqB,EAA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"}
|