@pacem/pacem-3d 1.0.0-abel

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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../esm/index-components.js", "../esm/index-components-drawing3d.js", "../esm/types.js", "../esm/converters.js", "../esm/stage.js", "../esm/constants.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/primitives/box.js", "../esm/geometry.js", "../esm/decorators.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/webgpuadapter.js", "../esm/adapters/webgpu/renderer.js", "../esm/adapters/webgpu/constants.js", "../esm/adapters/webgpu/pipelinefactory.js", "../esm/adapters/webgpu/abstractions.js", "../esm/adapters/webgpu/buffers.js", "../esm/adapters/webgpu/materials.js", "../esm/adapters/webgpu/wgsl/basic-material-fragment.js", "../esm/adapters/webgpu/wgsl/line-material-fragment.js", "../esm/adapters/webgpu/wgsl/mesh-vertex.js", "../esm/adapters/webgpu/wgsl/shared.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/renderablebuffer.js", "../esm/adapters/webgpu/cameras.js", "../esm/adapters/webgpu/raycaster.js", "../esm/adapters/webgpu/behaviors/orbit-camera.js", "../esm/index-drawing3d.js", "../esm/parsers/parser.js"],
4
+ "sourcesContent": ["export * as Drawing3D from './index-components-drawing3d';\n", "export * from './types';\nexport * from './detector';\nexport * from './materials/material';\nexport * from './materials/basic';\nexport * from './materials/lambert';\nexport * from './materials/line';\nexport * from './materials/phong';\nexport * from './materials/standard';\nexport * from './primitives/primitive';\nexport * from './primitives/box';\nexport * from './primitives/cone';\nexport * from './primitives/cylinder';\nexport * from './primitives/line';\nexport * from './primitives/plane';\nexport * from './primitives/polyhedra';\nexport * from './primitives/sphere';\nexport * from './primitives/torus';\nexport * from './adapters/shared';\nexport * from './adapters/threejsadapter';\nexport * from './adapters/webgpu/webgpuadapter';\nexport * from './adapters/webgpu/behaviors/orbit-camera';\nexport * from './stage';\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';\nexport function isStage(object) {\n return !Utils.isNull(object) && 'render' in object && typeof object['render'] === 'function';\n}\nexport function isRenderable(object) {\n return isStage(object?.stage);\n}\nexport function isUi3DObject(object) {\n return 'transformMatrix' in object && isRenderable(object);\n}\nexport function isCamera(object) {\n return 'type' in object && 'up' in object && 'lookAt' in object && isRenderable(object);\n}\nexport function isPerspectiveCamera(object) {\n return isCamera(object) && 'type' in object && object.type === 'perspective';\n}\nexport function isOrthographicCamera(object) {\n return isCamera(object) && 'type' in object && object.type === 'orthographic';\n}\nexport function isLight(object) {\n return 'type' in object && (object.type === 'ambient' || object.type === 'omni' || object.type === 'direction' || object.type == 'spot') && isRenderable(object);\n}\nexport function isMesh(object) {\n return 'geometry' in object && isUi3DObject(object);\n}\nexport function isGeometry(object) {\n return 'positions' in object && Utils.isArray(object.positions);\n}\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}\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}\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}\nexport class DragEvent extends UI3DEvent {\n}\nexport class RenderableEvent extends UI3DEvent {\n constructor(type, args, originalEvent, p) {\n super(type, { detail: args, bubbles: true, cancelable: true }, originalEvent, p);\n }\n}\nexport var StalePropertyFlag;\n(function (StalePropertyFlag) {\n StalePropertyFlag[\"Position\"] = \"position\";\n StalePropertyFlag[\"Transform\"] = \"transform\";\n StalePropertyFlag[\"Geometry\"] = \"geometry\";\n StalePropertyFlag[\"Children\"] = \"children\";\n StalePropertyFlag[\"Material\"] = \"material\";\n StalePropertyFlag[\"Light\"] = \"light\";\n StalePropertyFlag[\"Camera\"] = \"camera\";\n StalePropertyFlag[\"Visibility\"] = \"visibility\";\n})(StalePropertyFlag || (StalePropertyFlag = {}));\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};\nexport class RenderableElement extends Components.PacemCrossItemsContainerElement {\n constructor() {\n super(...arguments);\n this.position = Constants.DEFAULT_COORDS;\n this.#staleFlags = [];\n }\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 get stage() {\n return this['_scene'] = this['_scene'] || CustomElementUtils.findAncestorOfType(this, Pacem3DElement);\n }\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 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);\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);\nlet Pacem3DGroupElement = class Pacem3DGroupElement extends Ui3DElement {\n validate(child) {\n // overrides default denial\n return child instanceof RenderableElement;\n }\n #children = [];\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 };\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 };\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 };\nlet Pacem3DLightElement = class Pacem3DLightElement extends RenderableElement {\n constructor() {\n super(...arguments);\n this.intensity = .85;\n this.target = Constants.DEFAULT_COORDS;\n this.color = '#fff';\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 };\nexport class Pacem3DCameraElement extends RenderableElement {\n constructor() {\n super(...arguments);\n this.near = 0.1;\n this.far = 1000.0;\n this.up = Geometry.LinearAlgebra.Vector3D.j();\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 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);\nlet Pacem3DPerspectiveCameraElement = class Pacem3DPerspectiveCameraElement extends Pacem3DCameraElement {\n constructor() {\n super(...arguments);\n this.fov = 45;\n this.aspect = 1;\n }\n get type() {\n return \"perspective\";\n }\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 };\nlet Pacem3DOrthographicCameraElement = class Pacem3DOrthographicCameraElement extends Pacem3DCameraElement {\n constructor() {\n super(...arguments);\n this.top = 1;\n this.left = -1;\n this.bottom = -1;\n this.right = 1;\n }\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 };\nexport class Pacem3DAdapterElement extends PacemEventTarget {\n}\n", "import { Utils } from '@pacem/pacem-core';\nimport { parseAsNumericalArray } from '@pacem/pacem-foundation';\nimport { Geometry } from '@pacem/pacem-numerical';\n//namespace Pacem.Drawing3D {\nexport const Point3DConverter = {\n convert: (attr) => Geometry.LinearAlgebra.Vector3D.parse(attr),\n convertBack: (prop) => `${prop.x || 0} ${prop.y || 0} ${prop.z || 0}`\n};\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};\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};\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", "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 {\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 get stage() {\n return this._container;\n }\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 get size() {\n return this.#size;\n }\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", "export const TAG_MIDDLE_NAME = \"3d\";\nexport const DEG2RAD = Math.PI / 180;\n", "//namespace Pacem.Components.Drawing3D {\n/** @deprecated*/\nexport class Pacem3DDetector {\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 get info() {\n return this._detected.info;\n }\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 {\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 = {}));\nexport function isMaterial(obj) {\n return /*'color' in obj &&*/ 'shader' in obj;\n}\nexport function isBasicMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Basic;\n}\nexport function isLineMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Line;\n}\nexport function isLambertMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Lambert;\n}\nexport function isPhongMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Phong;\n}\nexport function isStandardMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Standard;\n}\nexport function isShaderMaterial(obj) {\n return isMaterial(obj) && obj.shader === KnownShader.Custom;\n}\n//namespace Pacem.Components.Drawing3D {\nexport class MaterialElement extends PacemEventTarget {\n constructor(shader) {\n super();\n this.#shader = shader;\n }\n #shader;\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 updateMaterial() {\n this.createMaterial().then(m => {\n this.material = Utils.extend(m, { flags: [StalePropertyFlag.Material] });\n });\n }\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 {\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 {\nlet LambertMaterialElement = class LambertMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Lambert);\n }\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 {\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 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 {\nlet PhongMaterialElement = class PhongMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Phong);\n }\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 {\nlet StandardMaterialElement = class StandardMaterialElement extends MaterialElement {\n constructor() {\n super(KnownShader.Standard);\n }\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 {\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 {\nlet PacemBoxElement = PacemBoxElement_1 = class PacemBoxElement extends Pacem3DPrimitiveElement {\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 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};\nimport { Utils } from '@pacem/pacem-core';\nimport { StalePropertyFlag } from './types';\nimport { NotifyChange } from './decorators';\nexport class NodeGeometry {\n constructor(positions = []) {\n this.positions = positions;\n }\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 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 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}\nexport class LineGeometry extends NodeGeometry {\n}\n__decorate([\n NotifyChange(setSelfAsDirty)\n], LineGeometry.prototype, \"positions\", void 0);\nexport class MeshGeometry extends NodeGeometry {\n #boundingBox;\n #boundingSphere;\n #barycenter;\n get barycenter() {\n return this.#barycenter ??= NodeGeometry.barycenter(this.positions);\n }\n set barycenter(point) {\n this.#barycenter = point;\n }\n get boundingBox() {\n return this.#boundingBox ??= NodeGeometry.boundingBox(this.positions);\n }\n set boundingBox(bbox) {\n this.#boundingBox = bbox;\n }\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", "import { Utils } from '@pacem/pacem-core';\n//namespace Pacem.Drawing3D {\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};\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 {\nlet PacemConeElement = PacemConeElement_1 = class PacemConeElement extends Pacem3DPrimitiveElement {\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 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 {\nlet PacemCylinderElement = PacemCylinderElement_1 = class PacemCylinderElement extends Pacem3DPrimitiveElement {\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 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 }];\nlet PacemLineElement = PacemLineElement_1 = class PacemLineElement extends Pacem3DPrimitiveElement {\n static createLineGeometry(positions) {\n return new LineGeometry(positions || DEFAULT_LINE);\n }\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 {\nlet PacemPlaneElement = PacemPlaneElement_1 = class PacemPlaneElement extends Pacem3DPrimitiveElement {\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 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;\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 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\nlet PacemTetrahedronElement = PacemTetrahedronElement_1 = class PacemTetrahedronElement extends PolyhedronElement {\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\nlet PacemOctahedronElement = PacemOctahedronElement_1 = class PacemOctahedronElement extends PolyhedronElement {\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\nlet PacemHexahedronElement = PacemHexahedronElement_1 = class PacemHexahedronElement extends PolyhedronElement {\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\nlet PacemIcosahedronElement = PacemIcosahedronElement_1 = class PacemIcosahedronElement extends PolyhedronElement {\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\nlet PacemDodecahedronElement = PacemDodecahedronElement_1 = class PacemDodecahedronElement extends PolyhedronElement {\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,\n 0.191292 0.808708, 0.191292 0.808708, 0.5 0.690792,\n 0.808708 0.808708, 0.000499517 0.5, 0.309208 0.5, 0.5 0.309208,\n 0.191292 0.191292, 0.191292 0.191292, 0.309208 0.5,\n 0.191292 0.191292, 0.5 0.000499517, 0.5 0.309208, 0.808708 0.191292,\n 0.000499517 0.5, 0.309208 0.5, 0.690792 0.5, 0.808708 0.808708,\n 0.5 0.999501, 0.690792 0.5, 0.5 0.999501, 0.191292 0.808708,\n 0.690792 0.5, 0.191292 0.808708, 0.309208 0.5, 0.309208 0.5,\n 0.191292 0.191292, 0.5 0.000499517, 0.309208 0.5, 0.5 0.000499517,\n 0.808708 0.191292, 0.309208 0.5, 0.808708 0.191292,\n 0.690792 0.5, 0.191292 0.808708, 0.309208 0.5, 0.690792 0.5,\n 0.191292 0.808708, 0.690792 0.5, 0.808708 0.808708,\n 0.191292 0.808708, 0.808708 0.808708, 0.808708 0.808708,\n 0.5 0.690792, 0.5 0.309208, 0.808708 0.808708, 0.5 0.309208,\n 0.808708 0.191292, 0.808708 0.191292, 0.9995 0.5, 0.191292 0.191292,\n 0.5 0.000499517, 0.808708 0.191292, 0.191292 0.191292,\n 0.808708 0.191292, 0.690792 0.5, 0.191292 0.191292,\n 0.690792 0.5, 0.191292 0.191292, 0.5 0.000499517, 0.808708 0.191292,\n 0.191292 0.191292, 0.808708 0.191292, 0.690792 0.5,\n 0.690792 0.5, 0.309208 0.5, 0.690792 0.5, 0.808708 0.808708,\n 0.5 0.999501, 0.690792 0.5, 0.5 0.999501, 0.191292 0.808708,\n 0.690792 0.5, 0.191292 0.808708, 0.5 0.000499517, 0.808708 0.191292,\n 0.690792 0.5, 0.5 0.000499517, 0.690792 0.5, 0.309208 0.5,\n 0.309208 0.5, 0.191292 0.191292, 0.9995 0.5, 0.808708 0.808708,\n 0.5 0.690792, 0.9995 0.5, 0.5 0.690792, 0.5 0.309208,\n 0.9995 0.5, 0.5 0.309208, 0.309208 0.5, 0.690792 0.5,\n 0.808708 0.808708, 0.309208 0.5, 0.808708 0.808708,\n 0.5 0.999501, 0.000499517 0.5, 0.5 0.309208, 0.000499517 0.5,\n 0.5 0.690792, 0.5 0.690792, 0.000499517 0.5, 0.5 0.690792,\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 {\nlet PacemSphereElement = PacemSphereElement_1 = class PacemSphereElement extends Pacem3DPrimitiveElement {\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 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 {\nlet PacemTorusElement = PacemTorusElement_1 = class PacemTorusElement extends Pacem3DPrimitiveElement {\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 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}\nexport class AdapterUtils {\n static isMeshGeometry(obj) {\n return 'positions' in obj && Utils.isArray(obj.positions)\n && 'triangleIndices' in obj && Utils.isArray(obj.triangleIndices);\n }\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 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 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 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}\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", "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;\nlet Pacem3DWgslScriptElement = class Pacem3DWgslScriptElement extends Components.PacemItemElement {\n findContainer() {\n return CustomElementUtils.findAncestor(this, n => n instanceof Pacem3DWebgpuAdapterElement);\n }\n #version = '';\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 };\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 get items() {\n return this.#items;\n }\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 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 get supported() {\n return this.#supported;\n }\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", "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;\nexport var WebGPUIssueCause;\n(function (WebGPUIssueCause) {\n WebGPUIssueCause[WebGPUIssueCause[\"NotSupported\"] = 0] = \"NotSupported\";\n WebGPUIssueCause[WebGPUIssueCause[\"Disabled\"] = 1] = \"Disabled\";\n})(WebGPUIssueCause || (WebGPUIssueCause = {}));\nexport class Renderers {\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", "//namespace Pacem.Drawing3D.WebGPU {\nexport const LABEL_PREFIX = 'pacem-3d-';\nexport const U32_MAX = 4_294_967_295;\n// #region vertex state\nexport const VERTEX_BUFFER_INDEX_MESH_POSITION = 0;\nexport const VERTEX_BUFFER_INDEX_MESH_NORMAL = 1;\nexport const VERTEX_BUFFER_INDEX_MESH_UV = 2;\nexport const VERTEX_OUTPUT_LOCATION_NORMAL = 0;\nexport const VERTEX_OUTPUT_LOCATION_VERTEX = 1;\nexport const VERTEX_OUTPUT_LOCATION_UV = 2;\nexport const VERTEX_OUTPUT_LOCATION_INDEX = 3;\nexport const VERTEX_OUTPUT_LOCATION_RAY = 4;\nexport const VERTEX_OUTPUT_LOCATION_INSTANCE = 5;\nexport const UNIFORM_GROUP_INDEX_TRANSFORM = 1;\nexport const UNIFORM_GROUP_INDEX_CAMERA = 0;\nexport const UNIFORM_GROUP_INDEX_INTERACTION = UNIFORM_GROUP_INDEX_CAMERA; // put it in camera same binding group\nexport const STORAGE_GROUP_INDEX_LINE = 2;\nexport const UNIFORM_GROUP_INDEX_COLORPICKING = 2;\nexport const UNIFORM_BINDING_INDEX_TRANSFORM = 0;\nexport const UNIFORM_BINDING_INDEX_CAMERA = 0;\nexport const UNIFORM_BINDING_INDEX_INTERACTION = 1;\n// #endregion\n// #region fragment state\nexport const MATERIAL_GROUP_INDEX = 2;\nexport const UNIFORM_GROUP_INDEX_LIGHTING = MATERIAL_GROUP_INDEX + 1;\nexport const STORAGE_MATERIAL_INDEX = 0;\nexport const SAMPLER_BINDING_INDEX = 1;\nexport const TEXTURE_BINDING_INDEX = 2;\nexport const MATERIAL_REFERENCE = 'material';\nexport const VERTEX_COLOR_REFERENCE = 'color';\nexport const AMBIENT_COLOR_REFERENCE = 'ambient';\nexport const LIGHTING_COLOR_REFERENCE = 'lighting';\n// #endregion\n// #region WGSL\nexport const WGSL_VERTEXINPUT_STRUCT_NAME = 'VertexInput';\nexport const WGSL_VERTEXOUTPUT_STRUCT_NAME = 'VertexOutput';\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:\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 = {}));\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 = {}));\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 = {}));\nexport var GPUMapMode;\n(function (GPUMapMode) {\n GPUMapMode[GPUMapMode[\"READ\"] = 1] = \"READ\";\n GPUMapMode[GPUMapMode[\"WRITE\"] = 2] = \"WRITE\";\n})(GPUMapMode || (GPUMapMode = {}));\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 = (_) => { };\nexport class RenderPipelines {\n static { this._memoizer = new WeakMap(); }\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 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 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, 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, 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 ], 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 = [worldBindGroupLayout, viewBindGroupLayout, 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", "export 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 {\nexport class Buffers {\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 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}\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 { 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 {\nexport class Materials {\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}\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 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 static { this.fragment = getBasicMaterialFragmentWgsl; }\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 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 texture(_) {\n return null;\n }\n static { this.fragment = getLineMaterialFragmentWgsl; }\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';\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};\nfunction adaptWGSLStringArray(array = []) {\n return array.join('\\r\\n');\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}\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\n\n${definitions}\n\n// bindings\n@group(${opts.storageMaterialGroupIndex}) @binding(${opts.storageMaterialBindingIndex}) var<storage, read> diffuseColor: vec4f;\n${bindings}\n\nconst empty = vec4f(0,0,0,0);\nconst white = vec4f(1,1,1,1);\n\n@fragment fn main (\n @builtin(position) position: vec4f, // clip-space position\n @location(${opts.outputNormalLocation}) normal: vec3f, // world-space normal\n @location(${opts.outputVertexLocation}) vertex: vec3f, // world-space position\n @location(${opts.outputUvLocation}) uv: vec2f,\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index: u32, // vertex index,\n @location(${opts.outputRayIndexLocation}) ray: vec3f, // ray (eye-to-vertex) vector\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\n) -> @location(0) vec4f {\n var ${color} = diffuseColor;\n var ${ambient}: vec4f = empty;\n var ${lighting}: vec4f = empty;\n\n // modifiers\n ${modifiers}\n\n ${lighting} = select(white, ${lighting}, ${lighting}.a > 0);\n return ${color} * ${lighting} + ${ambient};\n}`;\n}\n", "import { Utils } from '@pacem/pacem-core';\nimport { STORAGE_GROUP_INDEX_LINE, STORAGE_MATERIAL_INDEX } from '../constants';\nconst DefaultLineMaterialFragmentOptions = {\n outputInstanceIndexLocation: 0,\n outputVertexIndexLocation: 1,\n storageMaterialGroupIndex: STORAGE_GROUP_INDEX_LINE + 1,\n storageMaterialBindingIndex: STORAGE_MATERIAL_INDEX,\n};\nfunction adaptWGSLStringArray(array = []) {\n return array.join('\\r\\n');\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}\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\n${definitions}\n\n// bindings\n@group(${options.storageMaterialGroupIndex}) @binding(${options.storageMaterialBindingIndex}) var<storage, read> vertexColors: array<vec4f>;\n${bindings}\n\nfn getVertexColor(index: u32) -> vec4f {\n let numColors = arrayLength(&vertexColors);\n let vertexColorIndex = index % numColors;\n return vertexColors[vertexColorIndex];\n}\n\n@fragment fn main (\n @builtin(position) position: vec4f, // clip-space position\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance: u32, // instance index\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index: u32 // vertex index\n) -> @location(0) vec4f {\n var output = getVertexColor(index);\n\n // modifiers\n ${modifiers}\n\n return output;\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';\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};\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} {\n ${modifierBody}\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} {\n ${modifierBody}\n}`;\n }\n const opts = Utils.extend({}, DefaultMeshVertexOptions, options);\n return `struct ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\n @builtin(position) position : vec4f, // clip space position\n @location(${opts.outputNormalLocation}) normal: vec3f, // world space normal\n @location(${opts.outputVertexLocation}) vertex : vec3f, // world space position\n @location(${opts.outputUvLocation}) uv : vec2f, // texture coordinates\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index : u32, // vertex index\n @location(${opts.outputRayLocation}) ray : vec3f, // eye-to-point vector in world space\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\n}\n\nstruct ${WGSL_VERTEXINPUT_STRUCT_NAME} {\n @location(${opts.inputPositionLocation}) position: vec3f,\n @location(${opts.inputNormalLocation}) normal: vec3f,\n @location(${opts.inputUvLocation}) uv: vec2f,\n @builtin(vertex_index) index: u32,\n @builtin(instance_index) instance: u32,\n}\n\nstruct Transforms {\n world: mat4x4f,\n normal: mat3x3f,\n}\n\nstruct Camera {\n view: mat4x4f,\n projection: mat4x4f,\n position: vec3f,\n}\n\nstruct ${WGSL_INTERACTIONDATA_STRUCT_NAME} {\n // mouse coordinatges in NDC space ([-1,1], [-1,1])\n cursor: vec2f,\n // canvas size in pixels\n resolution: vec2f,\n // some phase timer (e.g. time since mouse down, or time since last click, etc.)\n time: f32,\n}\n\n${modifierFnInput}\n\n${modifierFnOutput}\n\n@group(${opts.uniformWorldGroupIndex}) @binding(${opts.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\n@group(${opts.uniformViewGroupIndex}) @binding(${opts.uniformViewBindingIndex}) var<uniform> camera: Camera;\n@group(${opts.uniformInteractionGroupIndex}) @binding(${opts.uniformInteractionBindingIndex}) var<uniform> interaction: ${WGSL_INTERACTIONDATA_STRUCT_NAME};\n\n@vertex fn main(vertexInput: ${WGSL_VERTEXINPUT_STRUCT_NAME}) -> ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\n let input = ${modifyInstructionInput};\n let position4 = vec4f(input.position, 1.0);\n let worldTransform = transforms.world;\n let viewProjectionTransform = camera.projection;\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\n let worldPosition = (worldTransform * position4).xyz;\n let output = ${WGSL_VERTEXOUTPUT_STRUCT_NAME}(\n worldViewProjectionTransform * position4,\n transforms.normal * input.normal,\n worldPosition,\n input.uv,\n input.index,\n normalize(worldPosition - camera.position),\n input.instance\n );\n return ${modifyInstructionOutput};\n}`;\n}\n", "import { WGSL_VERTEXINPUT_STRUCT_NAME, WGSL_VERTEXOUTPUT_STRUCT_NAME, WGSL_INTERACTIONDATA_STRUCT_NAME } from '../constants';\n//namespace Pacem.Drawing3D.WebGPU {\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//};\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_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';\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};\nfunction getVertexOutputStructDefinition(opts) {\n return `struct ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\n @builtin(position) position : vec4f, // clip space position\n @location(${opts.outputInstanceIndexLocation}) @interpolate(flat) instance : u32, // instance index\n @location(${opts.outputVertexIndexLocation}) @interpolate(flat) index : u32, // vertex index\n}`;\n}\nexport function getDefaultLineVertexWgsl(options = DefaultLineVertexOptions) {\n const opts = Utils.extend({}, DefaultLineVertexOptions, options);\n return `${getVertexOutputStructDefinition(opts)}\n\nstruct Transforms {\n world: mat4x4f,\n normal: mat3x3f,\n}\n\nstruct Camera {\n view: mat4x4f,\n projection: mat4x4f,\n position: vec3f\n}\n\n@group(${opts.uniformWorldGroupIndex}) @binding(${opts.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\n@group(${opts.uniformViewGroupIndex}) @binding(${opts.uniformViewBindingIndex}) var<uniform> camera: Camera;\n@group(${opts.storagePositionsGroupIndex}) @binding(${opts.storagePositionsBindingIndex}) var<storage, read> positions: array<f32>;\n\n@vertex fn main(@builtin(instance_index) instance: u32,\n @builtin(vertex_index) index: u32) -> ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\n\n let x = positions[3u * index + 0u];\n let y = positions[3u * index + 1u];\n let z = positions[3u * index + 2u];\n let position4 = vec4f(x, y, z, 1.0);\n let worldTransform = transforms.world;\n let viewProjectionTransform = camera.projection;\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\n let worldPosition = (worldTransform * position4).xyz;\n return ${WGSL_VERTEXOUTPUT_STRUCT_NAME}(\n worldViewProjectionTransform * position4,\n instance,\n index);\n}`;\n}\nexport function getFatLineVertexWgsl(options = DefaultLineVertexOptions) {\n const opts = Utils.extend({}, DefaultLineVertexOptions, options);\n return `${getVertexOutputStructDefinition(opts)}\n\nstruct Transforms {\n world: mat4x4f,\n normal: mat3x3f,\n}\n\nstruct Camera {\n view: mat4x4f,\n projection: mat4x4f,\n position: vec3f\n}\n\nstruct Pixels {\n viewportWidth: f32,\n viewportHeight: f32,\n halfLineWidth: f32\n}\n\n@group(${opts.uniformWorldGroupIndex}) @binding(${opts.uniformWorldBindingIndex}) var<uniform> transforms: Transforms;\n@group(${opts.uniformViewGroupIndex}) @binding(${opts.uniformViewBindingIndex}) var<uniform> camera: Camera;\n@group(${opts.storagePositionsGroupIndex}) @binding(${opts.storagePositionsBindingIndex}) var<storage, read> positions: array<f32>;\n@group(${opts.uniformDimensionsGroupIndex}) @binding(${opts.uniformDimensionsBindingIndex}) var<uniform> dimensions: Pixels;\n\nfn computeClipPosition(index: u32) -> vec4f {\n let x = positions[3u * index + 0u];\n let y = positions[3u * index + 1u];\n let z = positions[3u * index + 2u];\n let position4 = vec4f(x, y, z, 1.0);\n let worldTransform = transforms.world;\n let viewProjectionTransform = camera.projection;\n let worldViewProjectionTransform = viewProjectionTransform * worldTransform;\n return worldViewProjectionTransform * position4;\n}\n\nfn computeOffsetPosition(p0: vec4f, p1: vec4f, index: u32) -> vec4f {\n\n let viewportSize = vec2f(dimensions.viewportWidth, dimensions.viewportHeight);\n let normalizedSize = normalize(viewportSize);\n let halfThickness = dimensions.halfLineWidth / dimensions.viewportWidth;\n let p0ndc = p0.xyz / p0.w;\n let p1ndc = p1.xyz / p1.w;\n let dir = normalize((p1ndc - p0ndc).xy);\n let offsetX = halfThickness * 2.0 / normalizedSize.x;\n let offsetY = halfThickness * 2.0 / normalizedSize.y;\n\n // perp\n let perp0 = vec2f(-dir.y * offsetX, dir.x * offsetY);\n let perp1 = perp0;\n\n /*\n\n position0-0 -----*----- position0-1\n |\\\\ |\n | \\\\ |\n | \\\\ |\n | \\\\ |\n | \\\\ |\n | \\\\ |\n | \\\\ |\n | \\\\|\n position1-0 -----*----- position1-1\n\n indexes:\n ------------\n p0-0 -> 0, 3\n p0-1 -> 5\n p1-0 -> 1\n p1-1 -> 2, 4\n */\n\n var outPos: vec2f;\n var w = p0.w;\n var z = p0.z;\n if (index == 0 || index == 3){\n outPos = p0ndc.xy - perp0;\n }\n else if (index == 1){\n outPos = p1ndc.xy - perp1;\n w = p1.w;\n z = p1.z;\n }\n else if (index == 5){\n outPos = p0ndc.xy + perp0;\n }\n else { //if (index == 2 || index == 4)\n outPos = p1ndc.xy + perp1;\n w = p1.w;\n z = p1.z;\n }\n\n // return vec4f(outPos , 0, 1.0);\n return vec4f(outPos * w, z, w);\n}\n\n@vertex fn main(@builtin(instance_index) instance: u32,\n @builtin(vertex_index) index: u32) -> ${WGSL_VERTEXOUTPUT_STRUCT_NAME} {\n\n // vertex index starting at 1\n let position0 = computeClipPosition(instance);\n let position1 = computeClipPosition(instance + 1);\n\n // apply offset\n let position = computeOffsetPosition(position0, position1, index);\n\n return ${WGSL_VERTEXOUTPUT_STRUCT_NAME}(\n position,\n instance,\n index\n );\n}`;\n}\n", "import { UNIFORM_GROUP_INDEX_COLORPICKING } from '../constants';\n//namespace Pacem.Drawing3D.WebGPU {\n/**\n * Generate a WGSL piece of code that eases 3D picking using color strategy.\n */\nexport function getColorPickingFragmentWgsl(groupIndex = UNIFORM_GROUP_INDEX_COLORPICKING) {\n return `struct ColorPicker {\n id: u32,\n };\n\n @group(${groupIndex}) @binding(0) var<uniform> colorPicker: ColorPicker;\n\n @fragment\n fn main(@builtin(position) position: vec4f) -> @location(0) u32 {\n return colorPicker.id;\n }\n `;\n}\n", "import { Utils } from '@pacem/pacem-core';\nimport { SAMPLER_BINDING_INDEX } from '../constants';\nconst DefaultTextureMapReferences = {\n uv: 'uv',\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';\nconst DefaultDirectionalLightReferences = {\n normal: 'normal', inputColor: 'white'\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 {\n color: vec4f,\n direction: vec3f,\n intensity: f32\n}`, `fn computeDirectional(normal: vec3f, color: vec4f, light: DirectionalLight) -> vec4f {\n let n = normalize(normal);\n let d = normalize(light.direction);\n let factor = light.intensity * .5 * (1.0 + dot(n, -d));\n let output = color.rgb * light.color.rgb * factor;\n return vec4f(output, color.a);\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';\nconst DefaultOmniLightReferences = {\n normal: 'normal', position: 'vertex', ray: 'ray', inputColor: 'white', specularColor: 'empty', shininess: '0'\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 {\n color: vec4f,\n position: vec3f,\n intensity: f32\n}`, `fn computeOmni(position: vec3f, normal: vec3f, ray: vec3f, color: vec4f, specularColor: vec4f, shininess: f32, light: OmniLight) -> vec4f {\n\n // color\n let n = normalize(normal);\n let d = normalize(position - light.position);\n let factor = light.intensity * .5 * (1.0 + dot(n, -d));\n\n // specular\n let r = normalize(ray);\n let halfVector = normalize(d + r);\n let specular = specularColor.rgb * shininess * dot(n, -halfVector);\n\n let output = color.rgb * light.color.rgb * factor + specular;\n return vec4f(output, color.a);\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';\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 {\n color: vec4f,\n intensity: f32\n}`, `fn computeAmbient(color: vec4f, light: AmbientLight) -> vec4f {\n return vec4f(light.intensity * color.rgb * light.color.rgb, color.a);\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 { 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}\nexport class RenderLooper {\n constructor(_set) {\n this._set = _set;\n }\n /** @internal */\n get items() {\n return this._set;\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}\nexport class ManagedBuffers {\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}\nexport class RenderableBuffers {\n static create(item, ...args) {\n return createRenderableBuffer(item, null, ...args);\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 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 { 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 };\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}\nexport class OrthographicCamera {\n constructor(_camera) {\n this._camera = _camera;\n }\n static view(camera) {\n return view(camera.position, camera.lookAt, camera.up);\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 view() {\n return OrthographicCamera.view(this._camera);\n }\n projection(size) {\n return OrthographicCamera.projection(this._camera, size);\n }\n}\nexport class PerspectiveCamera {\n constructor(_camera) {\n this._camera = _camera;\n }\n static view(camera) {\n return view(camera.position, camera.lookAt, camera.up);\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 view() {\n return PerspectiveCamera.view(this._camera);\n }\n projection(size) {\n return PerspectiveCamera.projection(this._camera, size);\n }\n}\n", "import { Utils } from '@pacem/pacem-core';\nimport { LABEL_PREFIX, GPUTextureUsage, GPUBufferUsage, GPUMapMode } from './constants';\nimport { RenderPipelines } from './pipelinefactory';\n//namespace Pacem.Drawing3D.WebGPU {\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 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", "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.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 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 _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}\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", "export * from './types';\nexport * from './geometry';\nexport * from './decorators';\nexport * from './converters';\nexport * from './materials/material';\nexport * from './parsers/parser';\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 {\nclass OBJParser {\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}\nclass Parser3D {\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"],
5
+ "mappings": "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",
6
+ "names": ["Watch", "PropertyConverters", "CustomElement", "P", "Utils", "Components", "Geometry", "Utils", "Pacem3DElement", "Utils", "__decorate", "Utils", "Geometry", "StalePropertyFlag", "P", "Components", "Watch", "PropertyConverters", "Pacem3DGroupElement", "CustomElement", "Pacem3DMeshElement", "__decorate", "Watch", "PropertyConverters", "CustomElement", "Pacem3DObjectElement", "__decorate", "Watch", "PropertyConverters", "CustomElement", "Pacem3DLightElement", "__decorate", "Watch", "PropertyConverters", "CustomElement", "Geometry", "Utils", "__decorate", "Watch", "PropertyConverters", "Pacem3DPerspectiveCameraElement", "CustomElement", "Pacem3DOrthographicCameraElement", "__decorate", "Watch", "PropertyConverters", "CustomElement", "PacemEventTarget", "Utils", "Watch", "PropertyConverters", "PCSS", "__decorate", "KnownShader", "PacemEventTarget", "Utils", "PCSS", "Watch", "PropertyConverters", "CustomElement", "P", "__decorate", "BasicMaterialElement", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "Utils", "__decorate", "LambertMaterialElement", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "Utils", "__decorate", "LineMaterialElement", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "Utils", "__decorate", "PhongMaterialElement", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "Utils", "__decorate", "StandardMaterialElement", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "PacemEventTarget", "Watch", "PropertyConverters", "Utils", "__decorate", "CustomElement", "P", "Watch", "PropertyConverters", "Utils", "Utils", "__decorate", "Utils", "__decorate", "PacemBoxElement", "x", "y", "z", "i", "c_1", "c_2", "c_3", "c_4", "u", "v", "u_next", "v_next", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "__decorate", "PacemConeElement", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "__decorate", "PacemCylinderElement", "x", "z", "i", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "__decorate", "PacemLineElement", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "Geometry", "__decorate", "PacemPlaneElement", "Geometry", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "Geometry", "__decorate", "Geometry", "Watch", "PropertyConverters", "PacemTetrahedronElement", "CustomElement", "P", "PacemOctahedronElement", "__decorate", "CustomElement", "P", "PacemHexahedronElement", "__decorate", "CustomElement", "P", "PacemIcosahedronElement", "__decorate", "CustomElement", "P", "PacemDodecahedronElement", "__decorate", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "__decorate", "PacemSphereElement", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "__decorate", "PacemTorusElement", "Watch", "PropertyConverters", "CustomElement", "P", "Utils", "Utils", "CustomElement", "P", "Watch", "PropertyConverters", "Utils", "CustomElementUtils", "Geometry", "__decorate", "Utils", "vertices", "Pacem3DThreeAdapterElement", "Geometry", "point", "CustomElementUtils", "__decorate", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElementUtils", "CustomElement", "P", "Watch", "PropertyConverters", "PropertyChangeEvent", "PropertyChangeEventName", "Utils", "Logging", "Components", "Utils", "P", "Logging", "Colors", "Geometry", "GPUBufferUsage", "GPUTextureUsage", "GPUShaderStage", "GPUMapMode", "Utils", "WGSLBindingType", "Utils", "Colors", "Utils", "Utils", "Utils", "adaptWGSLStringArray", "adaptWGSLModifierStringArray", "Utils", "Utils", "Colors", "Utils", "Utils", "Utils", "Utils", "Utils", "Utils", "Utils", "Utils", "Utils", "Utils", "Colors", "Geometry", "Geometry", "Geometry", "Vector3D", "Geometry", "Matrix3D", "Utils", "retval", "view", "Colors", "Utils", "isMesh", "item", "Utils", "Utils", "_", "Vector3D", "Geometry", "WebGPUIssueCause", "stage", "Utils", "Logging", "P", "Colors", "__decorate", "CustomElementUtils", "Pacem3DWgslScriptElement", "Components", "PropertyChangeEvent", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "Pacem3DWebgpuAdapterElement", "PropertyChangeEventName", "PropertyChangeEvent", "Logging", "Utils", "__decorate", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "P", "Watch", "PropertyConverters", "Utils", "CustomEventUtils", "PropertyChangeEventName", "Geometry", "__decorate", "Vector3D", "Geometry", "Matrix3D", "CustomEventUtils", "Utils", "PacemOrbitCameraBehaviorElement", "PropertyChangeEventName", "Watch", "PropertyConverters", "CustomElement", "P", "Point", "__decorate", "Point"]
7
+ }