{ "version": 3, "sources": ["../src/data/Camera.ts", "../src/data/Color.ts", "../src/data/DynamicMaterial.ts", "../src/data/Light.ts", "../src/data/Matrix4x4.ts", "../src/data/Mesh.ts", "../src/data/Node.ts", "../src/data/Quaternion.ts", "../src/data/Scene.ts", "../src/data/Vector2.ts", "../src/data/Vector3.ts", "../src/data/Vector4.ts", "../src/_BinaryWriter.ts", "../src/geometry.ts", "../src/shader.ts", "../src/_Mapping.ts", "../src/resources/IndexBuffer.ts", "../src/resources/Material.ts", "../src/resources/Texture2D.ts", "../src/resources/VertexBuffer.ts", "../src/oktaeder.ts", "script.ts"], "sourcesContent": ["/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { Matrix4x4, Node } from \".\";\n\nexport type Camera = OrthographicCamera | PerspectiveCamera;\n\nexport interface OrthographicCameraProps {\n\treadonly name?: string;\n\n\treadonly halfVerticalSize: number;\n\treadonly nearPlane: number;\n\treadonly farPlane: number;\n}\n\nexport interface PerspectiveCameraProps {\n\treadonly name?: string;\n\n\treadonly verticalFovRad: number;\n\treadonly nearPlane: number;\n\treadonly farPlane: number;\n}\n\nexport class OrthographicCamera {\n\n\tdeclare readonly type: \"OrthographicCamera\";\n\n\t_name: string;\n\n\t_halfVerticalSize: number;\n\t_nearPlane: number;\n\t_farPlane: number;\n\n\t/** backreference */\n\t_node: Node | null;\n\n\tconstructor({\n\t\tname = \"\",\n\t\thalfVerticalSize,\n\t\tnearPlane,\n\t\tfarPlane,\n\t}: OrthographicCameraProps) {\n\t\tthis._name = name;\n\n\t\tthis._halfVerticalSize = halfVerticalSize;\n\t\tthis._nearPlane = nearPlane;\n\t\tthis._farPlane = farPlane;\n\n\t\tthis._node = null;\n\t}\n\n\tset name(value: string) { this._name = value; }\n\tget name(): string { return this._name; }\n\n\tset halfVerticalSize(value: number) { this._halfVerticalSize = value; }\n\tget halfVerticalSize(): number { return this._halfVerticalSize; }\n\n\tset nearPlane(value: number) { this._nearPlane = value; }\n\tget nearPlane(): number { return this._nearPlane; }\n\n\tset farPlane(value: number) { this._farPlane = value; }\n\tget farPlane(): number { return this._farPlane; }\n\n\tattach(node: Node): OrthographicCamera {\n\t\tif (this._node !== null) {\n\t\t\tthis._node._camera = null;\n\t\t}\n\n\t\tif (node._camera !== null) {\n\t\t\tnode._camera._node = null;\n\t\t}\n\n\t\tnode._camera = this;\n\t\tthis._node = node;\n\t\treturn this;\n\t}\n\n\tdetach(): OrthographicCamera {\n\t\tif (this._node === null) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._node._camera = null;\n\t\tthis._node = null;\n\t\treturn this;\n\t}\n\n\tcomputeProjectionMatrix(aspectRatio: number, res: Matrix4x4): Matrix4x4 {\n\t\tconst halfHorizontalSize = this._halfVerticalSize / aspectRatio;\n\t\treturn res.set(\n\t\t\t1 / halfHorizontalSize, 0, 0, 0,\n\t\t\t0, 1 / this._halfVerticalSize, 0, 0,\n\t\t\t0, 0, 1 / (this._nearPlane - this._farPlane), 0,\n\t\t\t0, 0, this._farPlane / (this._farPlane - this._nearPlane), 1,\n\t\t);\n\t}\n}\n\nexport class PerspectiveCamera {\n\n\tdeclare readonly type: \"PerspectiveCamera\";\n\n\t_name: string;\n\n\t_verticalFovRad: number;\n\t_nearPlane: number;\n\t_farPlane: number;\n\n\t/** backreference */\n\t_node: Node | null;\n\n\tconstructor({\n\t\tname = \"\",\n\t\tverticalFovRad,\n\t\tnearPlane,\n\t\tfarPlane,\n\t}: PerspectiveCameraProps) {\n\t\tthis._name = name;\n\n\t\tthis._verticalFovRad = verticalFovRad;\n\t\tthis._nearPlane = nearPlane;\n\t\tthis._farPlane = farPlane;\n\n\t\tthis._node = null;\n\t}\n\n\tset name(value: string) { this._name = value; }\n\tget name(): string { return this._name; }\n\n\tset nearPlane(value: number) { this._nearPlane = value; }\n\tget nearPlane(): number { return this._nearPlane; }\n\n\tset farPlane(value: number) { this._farPlane = value; }\n\tget farPlane(): number { return this._farPlane; }\n\n\tattach(node: Node): PerspectiveCamera {\n\t\tif (this._node !== null) {\n\t\t\tthis._node._camera = null;\n\t\t}\n\n\t\tif (node._camera !== null) {\n\t\t\tnode._camera._node = null;\n\t\t}\n\n\t\tnode._camera = this;\n\t\tthis._node = node;\n\t\treturn this;\n\t}\n\n\tdetach(): PerspectiveCamera {\n\t\tif (this._node === null) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._node._camera = null;\n\t\tthis._node = null;\n\t\treturn this;\n\t}\n\n\tcomputeProjectionMatrix(aspectRatio: number, res: Matrix4x4): Matrix4x4 {\n\t\tconst halfVerticalCotangent = 1 / Math.tan(0.5 * this._verticalFovRad);\n\t\tif (this._farPlane === Infinity) {\n\t\t\treturn res.set(\n\t\t\t\thalfVerticalCotangent / aspectRatio, 0, 0, 0,\n\t\t\t\t0, halfVerticalCotangent, 0, 0,\n\t\t\t\t0, 0, 0, 1,\n\t\t\t\t0, 0, this._nearPlane, 0,\n\t\t\t);\n\t\t} else {\n\t\t\treturn res.set(\n\t\t\t\thalfVerticalCotangent / aspectRatio, 0, 0, 0,\n\t\t\t\t0, halfVerticalCotangent, 0, 0,\n\t\t\t\t0, 0, this._nearPlane / (this._nearPlane - this._farPlane), 1,\n\t\t\t\t0, 0, this._nearPlane * this._farPlane / (this._farPlane - this._nearPlane), 0,\n\t\t\t);\n\t\t}\n\t}\n}\n\nObject.defineProperty(OrthographicCamera.prototype, \"type\", { value: \"OrthographicCamera\" });\n\nObject.defineProperty(PerspectiveCamera.prototype, \"type\", { value: \"PerspectiveCamera\" });\n\nexport function isOrthographicCamera(value: unknown): value is OrthographicCamera {\n\treturn Boolean(value) && (value as OrthographicCamera).type === \"OrthographicCamera\";\n}\n\nexport function isPerspectiveCamera(value: unknown): value is PerspectiveCamera {\n\treturn Boolean(value) && (value as PerspectiveCamera).type === \"PerspectiveCamera\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { Vector3Object } from \".\";\n\n/* Named colors\n * black #000000 (0, 0, 0, 1)\n * silver #C0C0C0 (192 / 255, 192 / 255, 192 / 255, 1)\n * gray #808080 (128 / 255, 128 / 255, 128 / 255, 1)\n * white #FFFFFF (1, 1, 1, 1)\n * maroon #800000 (128 / 255, 0, 0, 1)\n * red #FF0000 (1, 0, 0, 1)\n * purple #800080 (128 / 255, 0, 128 / 255, 1)\n * fuchsia #FF00FF (1, 0, 1, 1)\n * green #008000 (0, 128 / 255, 0, 1)\n * lime #00FF00 (0, 255, 0, 1)\n * olive #808000 (128 / 255, 128 / 255, 0, 1)\n * yellow #FFFF00 (1, 1, 0, 1)\n * navy #000080 (0, 0, 128 / 255, 1)\n * blue #0000FF (0, 0, 1, 1)\n * teal #008080 (0, 128 / 255, 128 / 255, 1)\n * aqua #00FFFF (0, 1, 1, 1)\n * orange #FFA500 (1, 165 / 255, 0, 1)\n */\n\nexport type ColorName =\n\t| \"black\"\n\t| \"silver\"\n\t| \"gray\"\n\t| \"white\"\n\t| \"maroon\"\n\t| \"red\"\n\t| \"purple\"\n\t| \"fuchsia\"\n\t| \"green\"\n\t| \"lime\"\n\t| \"olive\"\n\t| \"yellow\"\n\t| \"navy\"\n\t| \"blue\"\n\t| \"teal\"\n\t| \"aqua\"\n\t| \"orange\"\n\t;\n\nexport interface ColorObject {\n\treadonly r: number;\n\treadonly g: number;\n\treadonly b: number;\n}\n\nexport type ColorTuple = readonly [r: number, g: number, b: number];\n\nexport class Color {\n\n\tdeclare readonly type: \"Color\";\n\n\tr: number;\n\tg: number;\n\tb: number;\n\n\tconstructor(r: number, g: number, b: number) {\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\t}\n\n\tstatic fromObject(object: ColorObject): Color {\n\t\treturn new Color(object.r, object.g, object.b);\n\t}\n\n\tstatic fromTuple(tuple: ColorTuple): Color {\n\t\treturn new Color(...tuple);\n\t}\n\n\tstatic fromName(name: ColorName): Color {\n\t\tswitch (name) {\n\t\t\tcase \"black\": return new Color(0, 0, 0);\n\t\t\tcase \"silver\": return new Color(192 / 255, 192 / 255, 192 / 255);\n\t\t\tcase \"gray\": return new Color(128 / 255, 128 / 255, 128 / 255);\n\t\t\tcase \"white\": return new Color(1, 1, 1);\n\t\t\tcase \"maroon\": return new Color(128 / 255, 0, 0);\n\t\t\tcase \"red\": return new Color(1, 0, 0);\n\t\t\tcase \"purple\": return new Color(128 / 255, 0, 128 / 255);\n\t\t\tcase \"fuchsia\": return new Color(1, 0, 1);\n\t\t\tcase \"green\": return new Color(0, 128 / 255, 0);\n\t\t\tcase \"lime\": return new Color(0, 255, 0);\n\t\t\tcase \"olive\": return new Color(128 / 255, 128 / 255, 0);\n\t\t\tcase \"yellow\": return new Color(1, 1, 0);\n\t\t\tcase \"navy\": return new Color(0, 0, 128 / 255);\n\t\t\tcase \"blue\": return new Color(0, 0, 1);\n\t\t\tcase \"teal\": return new Color(0, 128 / 255, 128 / 255);\n\t\t\tcase \"aqua\": return new Color(0, 1, 1);\n\t\t\tcase \"orange\": return new Color(1, 165 / 255, 0);\n\t\t}\n\t}\n\n\tstatic fromVector3(vector: Vector3Object): Color {\n\t\treturn new Color(vector.x, vector.y, vector.z);\n\t}\n\n\tstatic white(): Color {\n\t\treturn new Color(1, 1, 1);\n\t}\n\n\tstatic black(): Color {\n\t\treturn new Color(0, 0, 0);\n\t}\n\n\tset(r: number, g: number, b: number): Color {\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\t\treturn this;\n\t}\n\n\tsetObject(object: ColorObject): Color {\n\t\tthis.r = object.r;\n\t\tthis.g = object.g;\n\t\tthis.b = object.b;\n\t\treturn this;\n\t}\n\n\tsetTuple(tuple: ColorTuple): Color {\n\t\tthis.r = tuple[0];\n\t\tthis.g = tuple[1];\n\t\tthis.b = tuple[2];\n\t\treturn this;\n\t}\n\n\tsetName(name: ColorName): Color {\n\t\tswitch (name) {\n\t\t\tcase \"black\":\n\t\t\t\tthis.r = 0;\n\t\t\t\tthis.g = 0;\n\t\t\t\tthis.b = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"silver\":\n\t\t\t\tthis.r = 192 / 255;\n\t\t\t\tthis.g = 192 / 255;\n\t\t\t\tthis.b = 192 / 255;\n\t\t\t\tbreak;\n\t\t\tcase \"gray\":\n\t\t\t\tthis.r = 128 / 255;\n\t\t\t\tthis.g = 128 / 255;\n\t\t\t\tthis.b = 128 / 255;\n\t\t\t\tbreak;\n\t\t\tcase \"white\":\n\t\t\t\tthis.r = 1;\n\t\t\t\tthis.g = 1;\n\t\t\t\tthis.b = 1;\n\t\t\t\tbreak;\n\t\t\tcase \"maroon\":\n\t\t\t\tthis.r = 128 / 255;\n\t\t\t\tthis.g = 0;\n\t\t\t\tthis.b = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"red\":\n\t\t\t\tthis.r = 1;\n\t\t\t\tthis.g = 0;\n\t\t\t\tthis.b = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"purple\":\n\t\t\t\tthis.r = 128 / 255;\n\t\t\t\tthis.g = 0;\n\t\t\t\tthis.b = 128 / 255;\n\t\t\t\tbreak;\n\t\t\tcase \"fuchsia\":\n\t\t\t\tthis.r = 1;\n\t\t\t\tthis.g = 0;\n\t\t\t\tthis.b = 1;\n\t\t\t\tbreak;\n\t\t\tcase \"green\":\n\t\t\t\tthis.r = 0;\n\t\t\t\tthis.g = 128 / 255;\n\t\t\t\tthis.b = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"lime\":\n\t\t\t\tthis.r = 0;\n\t\t\t\tthis.g = 255;\n\t\t\t\tthis.b = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"olive\":\n\t\t\t\tthis.r = 128 / 255;\n\t\t\t\tthis.g = 128 / 255;\n\t\t\t\tthis.b = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"yellow\":\n\t\t\t\tthis.r = 1;\n\t\t\t\tthis.g = 1;\n\t\t\t\tthis.b = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"navy\":\n\t\t\t\tthis.r = 0;\n\t\t\t\tthis.g = 0;\n\t\t\t\tthis.b = 128 / 255;\n\t\t\t\tbreak;\n\t\t\tcase \"blue\":\n\t\t\t\tthis.r = 0;\n\t\t\t\tthis.g = 0;\n\t\t\t\tthis.b = 1;\n\t\t\t\tbreak;\n\t\t\tcase \"teal\":\n\t\t\t\tthis.r = 0;\n\t\t\t\tthis.g = 128 / 255;\n\t\t\t\tthis.b = 128 / 255;\n\t\t\t\tbreak;\n\t\t\tcase \"aqua\":\n\t\t\t\tthis.r = 0;\n\t\t\t\tthis.g = 1;\n\t\t\t\tthis.b = 1;\n\t\t\t\tbreak;\n\t\t\tcase \"orange\":\n\t\t\t\tthis.r = 1;\n\t\t\t\tthis.g = 165 / 255;\n\t\t\t\tthis.b = 0;\n\t\t\t\tbreak;\n\t\t}\n\t\treturn this;\n\t}\n\n\tsetVector3(vector: Vector3Object): Color {\n\t\tthis.r = vector.x;\n\t\tthis.g = vector.y;\n\t\tthis.b = vector.z;\n\t\treturn this;\n\t}\n\n\tsetWhite(): Color {\n\t\tthis.r = 1;\n\t\tthis.g = 1;\n\t\tthis.b = 1;\n\t\treturn this;\n\t}\n\n\tsetBlack(): Color {\n\t\tthis.r = 0;\n\t\tthis.g = 0;\n\t\tthis.b = 0;\n\t\treturn this;\n\t}\n\n\tsetR(r: number): Color {\n\t\tthis.r = r;\n\t\treturn this;\n\t}\n\n\tsetG(g: number): Color {\n\t\tthis.g = g;\n\t\treturn this;\n\t}\n\n\tsetB(b: number): Color {\n\t\tthis.b = b;\n\t\treturn this;\n\t}\n}\n\nObject.defineProperty(Color.prototype, \"type\", { value: \"Color\" });\n\nexport function isColor(value: unknown): value is Color {\n\treturn Boolean(value) && (value as Color).type === \"Color\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { Color, ColorObject } from \".\";\nimport { Texture2D } from \"../resources\";\nimport { MaterialProps } from \"./MaterialProps\";\n\nexport class DynamicMaterial {\n\n\tdeclare readonly type: \"DynamicMaterial\";\n\n\t_name: string;\n\n\t_baseColor: Color;\n\t_partialCoverage: number;\n\t_occlusionTextureStrength: number;\n\t_metallic: number;\n\t_roughness: number;\n\t_normalScale: number;\n\t_emissive: Color;\n\t_transmission: Color;\n\t_collimation: number;\n\t_ior: number;\n\n\t_baseColorPartialCoverageTexture: Texture2D | null;\n\t_occlusionTexture: Texture2D | null;\n\t_roughnessMetallicTexture: Texture2D | null;\n\t_normalTexture: Texture2D | null;\n\t_emissiveTexture: Texture2D | null;\n\t_transmissionCollimationTexture: Texture2D | null;\n\n\t_transparent: boolean;\n\t_doubleSided: boolean;\n\n\tconstructor({\n\t\tname = \"\",\n\t\tbaseColor,\n\t\tpartialCoverage = 1,\n\t\tocclusionTextureStrength = 1,\n\t\tmetallic = 1,\n\t\troughness = 1,\n\t\tnormalScale = 1,\n\t\temissive,\n\t\ttransmission,\n\t\tcollimation = 1,\n\t\tior = 1.45,\n\t\tbaseColorPartialCoverageTexture = null,\n\t\tocclusionTexture = null,\n\t\troughnessMetallicTexture = null,\n\t\tnormalTexture = null,\n\t\temissiveTexture = null,\n\t\ttransmissionCollimationTexture = null,\n\t\ttransparent = false,\n\t\tdoubleSided = false,\n\t}: MaterialProps) {\n\t\tthis._name = name;\n\n\t\tthis._baseColor = baseColor !== undefined ? Color.fromObject(baseColor) : Color.white();\n\t\tthis._partialCoverage = partialCoverage;\n\t\tthis._occlusionTextureStrength = occlusionTextureStrength;\n\t\tthis._metallic = metallic;\n\t\tthis._roughness = roughness;\n\t\tthis._normalScale = normalScale;\n\t\tthis._emissive = emissive !== undefined ? Color.fromObject(emissive) : Color.black();\n\t\tthis._transmission = transmission !== undefined ? Color.fromObject(transmission) : Color.black();\n\t\tthis._collimation = collimation;\n\t\tthis._ior = ior;\n\n\t\tthis._baseColorPartialCoverageTexture = baseColorPartialCoverageTexture;\n\t\tthis._occlusionTexture = occlusionTexture;\n\t\tthis._roughnessMetallicTexture = roughnessMetallicTexture;\n\t\tthis._normalTexture = normalTexture;\n\t\tthis._emissiveTexture = emissiveTexture;\n\t\tthis._transmissionCollimationTexture = transmissionCollimationTexture;\n\n\t\tthis._transparent = transparent;\n\t\tthis._doubleSided = doubleSided;\n\t}\n\n\tset name(value: string) { this._name = value; }\n\tget name(): string { return this._name; }\n\n\tsetBaseColor(value: ColorObject): DynamicMaterial {\n\t\tthis._baseColor.setObject(value);\n\t\treturn this;\n\t}\n\tgetBaseColor(res: Color): Color {\n\t\treturn res.setObject(this._baseColor);\n\t}\n\n\tset partialCoverage(value: number) { this._partialCoverage = value; }\n\tget partialCoverage(): number { return this._partialCoverage; }\n\n\tset occlusionTextureStrength(value: number) { this._occlusionTextureStrength = value; }\n\tget occlusionTextureStrength(): number { return this._occlusionTextureStrength; }\n\n\tset metallic(value: number) { this._metallic = value; }\n\tget metallic(): number { return this._metallic; }\n\n\tset roughness(value: number) { this._roughness = value; }\n\tget roughness(): number { return this._roughness; }\n\n\tset normalScale(value: number) { this._normalScale = value; }\n\tget normalScale(): number { return this._normalScale; }\n\n\tsetEmissive(value: ColorObject): DynamicMaterial {\n\t\tthis._emissive.setObject(value);\n\t\treturn this;\n\t}\n\tgetEmissive(res: Color): Color {\n\t\treturn res.setObject(this._emissive);\n\t}\n\n\tsetTransmission(value: ColorObject): DynamicMaterial {\n\t\tthis._transmission.setObject(value);\n\t\treturn this;\n\t}\n\tgetTransmission(res: Color): Color {\n\t\treturn res.setObject(this._transmission);\n\t}\n\n\tset collimation(value: number) { this._collimation = value; }\n\tget collimation(): number { return this._collimation; }\n\n\tset ior(value: number) { this._ior = value; }\n\tget ior(): number { return this._ior; }\n\n\tset baseColorPartialCoverageTexture(value: Texture2D | null) { this._baseColorPartialCoverageTexture = value; }\n\tget baseColorPartialCoverageTexture(): Texture2D | null { return this._baseColorPartialCoverageTexture; }\n\n\tset occlusionTexture(value: Texture2D | null) { this._occlusionTexture = value; }\n\tget occlusionTexture(): Texture2D | null { return this._occlusionTexture; }\n\n\tset roughnessMetallicTexture(value: Texture2D | null) { this._roughnessMetallicTexture = value; }\n\tget roughnessMetallicTexture(): Texture2D | null { return this._roughnessMetallicTexture; }\n\n\tset normalTexture(value: Texture2D | null) { this._normalTexture = value; }\n\tget normalTexture(): Texture2D | null { return this._normalTexture; }\n\n\tset emissiveTexture(value: Texture2D | null) { this._emissiveTexture = value; }\n\tget emissiveTexture(): Texture2D | null { return this._emissiveTexture; }\n\n\tset transmissionCollimationTexture(value: Texture2D | null) { this._transmissionCollimationTexture = value; }\n\tget transmissionCollimationTexture(): Texture2D | null { return this._transmissionCollimationTexture; }\n\n\tset transparent(value: boolean) { this._transparent = value; }\n\tget transparent(): boolean { return this._transparent; }\n\n\tset doubleSided(value: boolean) { this._doubleSided = value; }\n\tget doubleSided(): boolean { return this._doubleSided; }\n}\n\nObject.defineProperty(DynamicMaterial.prototype, \"type\", { value: \"DynamicMaterial\" });\n\nexport function isDynamicMaterial(value: unknown): value is DynamicMaterial {\n\treturn Boolean(value) && (value as DynamicMaterial).type === \"DynamicMaterial\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { Color, ColorObject, Node } from \".\";\n\nexport type Light = DirectionalLight | PointLight;\n\nexport interface DirectionalLightProps {\n\treadonly name?: string;\n\n\treadonly color: ColorObject;\n}\n\nexport interface PointLightProps {\n\treadonly name?: string;\n\n\treadonly color: ColorObject;\n}\n\nexport class DirectionalLight {\n\n\tdeclare readonly type: \"DirectionalLight\";\n\n\t_name: string;\n\n\t_color: Color;\n\n\t/** backreference */\n\t_node: Node | null;\n\n\tconstructor({\n\t\tname = \"\",\n\t\tcolor,\n\t}: DirectionalLightProps) {\n\t\tthis._name = name;\n\n\t\tthis._color = Color.fromObject(color);\n\n\t\tthis._node = null;\n\t}\n\n\tset name(value: string) { this._name = value; }\n\tget name(): string { return this._name; }\n\n\tsetColor(value: ColorObject): DirectionalLight {\n\t\tthis._color.setObject(value);\n\t\treturn this;\n\t}\n\n\tgetColor(res: Color): Color {\n\t\treturn res.setObject(this._color);\n\t}\n\n\tattach(node: Node): DirectionalLight {\n\t\tif (this._node !== null) {\n\t\t\tthis._node._light = null;\n\t\t}\n\n\t\tif (node._light !== null) {\n\t\t\tnode._light._node = null;\n\t\t}\n\n\t\tnode._light = this;\n\t\tthis._node = node;\n\t\treturn this;\n\t}\n\n\tdetach(): DirectionalLight {\n\t\tif (this._node === null) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._node._light = null;\n\t\tthis._node = null;\n\t\treturn this;\n\t}\n}\n\nexport class PointLight {\n\n\tdeclare readonly type: \"PointLight\";\n\n\t_name: string;\n\n\t_color: Color;\n\n\t/** backreference */\n\t_node: Node | null;\n\n\tconstructor({\n\t\tname = \"\",\n\t\tcolor,\n\t}: PointLightProps) {\n\t\tthis._name = name;\n\n\t\tthis._color = Color.fromObject(color);\n\n\t\tthis._node = null;\n\t}\n\n\tset name(value: string) { this._name = value; }\n\tget name(): string { return this._name; }\n\n\tsetColor(value: ColorObject): PointLight {\n\t\tthis._color.setObject(value);\n\t\treturn this;\n\t}\n\n\tgetColor(res: Color): Color {\n\t\treturn res.setObject(this._color);\n\t}\n\n\tattach(node: Node): PointLight {\n\t\tif (this._node !== null) {\n\t\t\tthis._node._light = null;\n\t\t}\n\n\t\tif (node._light !== null) {\n\t\t\tnode._light._node = null;\n\t\t}\n\n\t\tnode._light = this;\n\t\tthis._node = node;\n\t\treturn this;\n\t}\n\n\tdetach(): PointLight {\n\t\tif (this._node === null) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._node._light = null;\n\t\tthis._node = null;\n\t\treturn this;\n\t}\n}\n\nObject.defineProperty(DirectionalLight.prototype, \"type\", { value: \"DirectionalLight\" });\n\nObject.defineProperty(PointLight.prototype, \"type\", { value: \"PointLight\" });\n\nexport function isDirectionalLight(value: unknown): value is DirectionalLight {\n\treturn Boolean(value) && (value as DirectionalLight).type === \"DirectionalLight\";\n}\n\nexport function isPointLight(value: unknown): value is PointLight {\n\treturn Boolean(value) && (value as PointLight).type === \"PointLight\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { QuaternionObject, Vector3Object } from \".\";\n\nexport interface Matrix4x4Object {\n\treadonly ix: number;\n\treadonly iy: number;\n\treadonly iz: number;\n\treadonly iw: number;\n\treadonly jx: number;\n\treadonly jy: number;\n\treadonly jz: number;\n\treadonly jw: number;\n\treadonly kx: number;\n\treadonly ky: number;\n\treadonly kz: number;\n\treadonly kw: number;\n\treadonly tx: number;\n\treadonly ty: number;\n\treadonly tz: number;\n\treadonly tw: number;\n}\n\nexport type Matrix4x4Tuple = readonly [\n\tix: number, iy: number, iz: number, iw: number,\n\tjx: number, jy: number, jz: number, jw: number,\n\tkx: number, ky: number, kz: number, kw: number,\n\ttx: number, ty: number, tz: number, tw: number,\n];\n\nexport class Matrix4x4 {\n\n\tdeclare readonly type: \"Matrix4x4\";\n\n\tix: number;\n\tiy: number;\n\tiz: number;\n\tiw: number;\n\tjx: number;\n\tjy: number;\n\tjz: number;\n\tjw: number;\n\tkx: number;\n\tky: number;\n\tkz: number;\n\tkw: number;\n\ttx: number;\n\tty: number;\n\ttz: number;\n\ttw: number;\n\n\tconstructor(\n\t\tix: number, iy: number, iz: number, iw: number,\n\t\tjx: number, jy: number, jz: number, jw: number,\n\t\tkx: number, ky: number, kz: number, kw: number,\n\t\ttx: number, ty: number, tz: number, tw: number\n\t) {\n\t\tthis.ix = ix;\n\t\tthis.iy = iy;\n\t\tthis.iz = iz;\n\t\tthis.iw = iw;\n\t\tthis.jx = jx;\n\t\tthis.jy = jy;\n\t\tthis.jz = jz;\n\t\tthis.jw = jw;\n\t\tthis.kx = kx;\n\t\tthis.ky = ky;\n\t\tthis.kz = kz;\n\t\tthis.kw = kw;\n\t\tthis.tx = tx;\n\t\tthis.ty = ty;\n\t\tthis.tz = tz;\n\t\tthis.tw = tw;\n\t}\n\n\tstatic fromObject(object: Matrix4x4Object): Matrix4x4 {\n\t\treturn new Matrix4x4(\n\t\t\tobject.ix, object.iy, object.iz, object.iw,\n\t\t\tobject.jx, object.jy, object.jz, object.jw,\n\t\t\tobject.kx, object.ky, object.kz, object.kw,\n\t\t\tobject.tx, object.ty, object.tz, object.tw,\n\t\t);\n\t}\n\n\tstatic fromTuple(tuple: Matrix4x4Tuple): Matrix4x4 {\n\t\treturn new Matrix4x4(...tuple);\n\t}\n\n\tstatic identity(): Matrix4x4 {\n\t\treturn new Matrix4x4(\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1,\n\t\t)\n\t}\n\n\tstatic fromTranslation(translation: Vector3Object): Matrix4x4 {\n\t\treturn new Matrix4x4(\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\ttranslation.x, translation.y, translation.z, 1,\n\t\t);\n\t}\n\n\tstatic fromQuaternion(quaternion: QuaternionObject): Matrix4x4 {\n\t\tconst xx = quaternion.x * quaternion.x;\n\t\tconst xy = quaternion.x * quaternion.y;\n\t\tconst xz = quaternion.x * quaternion.z;\n\t\tconst xw = quaternion.x * quaternion.w;\n\t\tconst yy = quaternion.y * quaternion.y;\n\t\tconst yz = quaternion.y * quaternion.z;\n\t\tconst yw = quaternion.y * quaternion.w;\n\t\tconst zz = quaternion.z * quaternion.z;\n\t\tconst zw = quaternion.z * quaternion.w;\n\n\t\treturn new Matrix4x4(\n\t\t\t1 - 2 * (yy + zz), 2 * (xy + zw), 2 * (xz - yw), 0,\n\t\t\t2 * (xy - zw), 1 - 2 * (xx + zz), 2 * (yz + xw), 0,\n\t\t\t2 * (xz + yw), 2 * (yz - xw), 1 - 2 * (xx + yy), 0,\n\t\t\t0, 0, 0, 1,\n\t\t);\n\t}\n\n\tstatic fromScale(scale: Vector3Object): Matrix4x4 {\n\t\treturn new Matrix4x4(\n\t\t\tscale.x, 0, 0, 0,\n\t\t\t0, scale.y, 0, 0,\n\t\t\t0, 0, scale.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\t}\n\n\tstatic fromTranslationRotationScale(translation: Vector3Object, rotation: QuaternionObject, scale: Vector3Object): Matrix4x4 {\n\t\tconst xx = rotation.x * rotation.x;\n\t\tconst xy = rotation.x * rotation.y;\n\t\tconst xz = rotation.x * rotation.z;\n\t\tconst xw = rotation.x * rotation.w;\n\t\tconst yy = rotation.y * rotation.y;\n\t\tconst yz = rotation.y * rotation.z;\n\t\tconst yw = rotation.y * rotation.w;\n\t\tconst zz = rotation.z * rotation.z;\n\t\tconst zw = rotation.z * rotation.w;\n\n\t\treturn new Matrix4x4(\n\t\t\tscale.x * (1 - 2 * (yy + zz)), scale.x * 2 * (xy + zw), scale.x * 2 * (xz - yw), 0,\n\t\t\tscale.y * 2 * (xy - zw), scale.y * (1 - 2 * (xx + zz)), scale.y * 2 * (yz + xw), 0,\n\t\t\tscale.z * 2 * (xz + yw), scale.z * 2 * (yz - xw), scale.z * (1 - 2 * (xx + yy)), 0,\n\t\t\ttranslation.x, translation.y, translation.z, 1,\n\t\t);\n\t}\n\n\tset(\n\t\tix: number, iy: number, iz: number, iw: number,\n\t\tjx: number, jy: number, jz: number, jw: number,\n\t\tkx: number, ky: number, kz: number, kw: number,\n\t\ttx: number, ty: number, tz: number, tw: number,\n\t): Matrix4x4 {\n\t\tthis.ix = ix;\n\t\tthis.iy = iy;\n\t\tthis.iz = iz;\n\t\tthis.iw = iw;\n\t\tthis.jx = jx;\n\t\tthis.jy = jy;\n\t\tthis.jz = jz;\n\t\tthis.jw = jw;\n\t\tthis.kx = kx;\n\t\tthis.ky = ky;\n\t\tthis.kz = kz;\n\t\tthis.kw = kw;\n\t\tthis.tx = tx;\n\t\tthis.ty = ty;\n\t\tthis.tz = tz;\n\t\tthis.tw = tw;\n\t\treturn this;\n\t}\n\n\tsetObject(object: Matrix4x4Object): Matrix4x4 {\n\t\tthis.ix = object.ix;\n\t\tthis.iy = object.iy;\n\t\tthis.iz = object.iz;\n\t\tthis.iw = object.iw;\n\t\tthis.jx = object.jx;\n\t\tthis.jy = object.jy;\n\t\tthis.jz = object.jz;\n\t\tthis.jw = object.jw;\n\t\tthis.kx = object.kx;\n\t\tthis.ky = object.ky;\n\t\tthis.kz = object.kz;\n\t\tthis.kw = object.kw;\n\t\tthis.tx = object.tx;\n\t\tthis.ty = object.ty;\n\t\tthis.tz = object.tz;\n\t\tthis.tw = object.tw;\n\t\treturn this;\n\t}\n\n\tsetTuple(tuple: Matrix4x4Tuple): Matrix4x4 {\n\t\tthis.ix = tuple[0];\n\t\tthis.iy = tuple[1];\n\t\tthis.iz = tuple[2];\n\t\tthis.iw = tuple[3];\n\t\tthis.jx = tuple[4];\n\t\tthis.jy = tuple[5];\n\t\tthis.jz = tuple[6];\n\t\tthis.jw = tuple[7];\n\t\tthis.kx = tuple[8];\n\t\tthis.ky = tuple[9];\n\t\tthis.kz = tuple[10];\n\t\tthis.kw = tuple[11];\n\t\tthis.tx = tuple[12];\n\t\tthis.ty = tuple[13];\n\t\tthis.tz = tuple[14];\n\t\tthis.tw = tuple[15];\n\t\treturn this;\n\t}\n\n\tsetIdentity(): Matrix4x4 {\n\t\tthis.ix = 1;\n\t\tthis.iy = 0;\n\t\tthis.iz = 0;\n\t\tthis.iw = 0;\n\t\tthis.jx = 0;\n\t\tthis.jy = 1;\n\t\tthis.jz = 0;\n\t\tthis.jw = 0;\n\t\tthis.kx = 0;\n\t\tthis.ky = 0;\n\t\tthis.kz = 1;\n\t\tthis.kw = 0;\n\t\tthis.tx = 0;\n\t\tthis.ty = 0;\n\t\tthis.tz = 0;\n\t\tthis.tw = 1;\n\t\treturn this;\n\t}\n\n\tsetTranslation(translation: Vector3Object): Matrix4x4 {\n\t\tthis.ix = 1;\n\t\tthis.iy = 0;\n\t\tthis.iz = 0;\n\t\tthis.iw = 0;\n\t\tthis.jx = 0;\n\t\tthis.jy = 1;\n\t\tthis.jz = 0;\n\t\tthis.jw = 0;\n\t\tthis.kx = 0;\n\t\tthis.ky = 0;\n\t\tthis.kz = 1;\n\t\tthis.kw = 0;\n\t\tthis.tx = translation.x;\n\t\tthis.ty = translation.y;\n\t\tthis.tz = translation.z;\n\t\tthis.tw = 1;\n\t\treturn this;\n\t}\n\n\tsetQuaternion(quaternion: QuaternionObject): Matrix4x4 {\n\t\tconst xx = quaternion.x * quaternion.x;\n\t\tconst xy = quaternion.x * quaternion.y;\n\t\tconst xz = quaternion.x * quaternion.z;\n\t\tconst xw = quaternion.x * quaternion.w;\n\t\tconst yy = quaternion.y * quaternion.y;\n\t\tconst yz = quaternion.y * quaternion.z;\n\t\tconst yw = quaternion.y * quaternion.w;\n\t\tconst zz = quaternion.z * quaternion.z;\n\t\tconst zw = quaternion.z * quaternion.w;\n\n\t\tthis.ix = 1 - 2 * (yy + zz);\n\t\tthis.iy = 2 * (xy + zw);\n\t\tthis.iz = 2 * (xz - yw);\n\t\tthis.iw = 0;\n\t\tthis.jx = 2 * (xy - zw);\n\t\tthis.jy = 1 - 2 * (xx + zz);\n\t\tthis.jz = 2 * (yz + xw);\n\t\tthis.jw = 0;\n\t\tthis.kx = 2 * (xz + yw);\n\t\tthis.ky = 2 * (yz - xw);\n\t\tthis.kz = 1 - 2 * (xx + yy);\n\t\tthis.kw = 0;\n\t\tthis.tx = 0;\n\t\tthis.ty = 0;\n\t\tthis.tz = 0;\n\t\tthis.tw = 1;\n\t\treturn this;\n\t}\n\n\tsetScale(scale: Vector3Object): Matrix4x4 {\n\t\tthis.ix = scale.x;\n\t\tthis.iy = 0;\n\t\tthis.iz = 0;\n\t\tthis.iw = 0;\n\t\tthis.jx = 0;\n\t\tthis.jy = scale.y;\n\t\tthis.jz = 0;\n\t\tthis.jw = 0;\n\t\tthis.kx = 0;\n\t\tthis.ky = 0;\n\t\tthis.kz = scale.z;\n\t\tthis.kw = 0;\n\t\tthis.tx = 0;\n\t\tthis.ty = 0;\n\t\tthis.tz = 0;\n\t\tthis.tw = 1;\n\t\treturn this;\n\t}\n\n\tsetTranslationRotationScale(translation: Vector3Object, rotation: QuaternionObject, scale: Vector3Object): Matrix4x4 {\n\t\tconst xx = rotation.x * rotation.x;\n\t\tconst xy = rotation.x * rotation.y;\n\t\tconst xz = rotation.x * rotation.z;\n\t\tconst xw = rotation.x * rotation.w;\n\t\tconst yy = rotation.y * rotation.y;\n\t\tconst yz = rotation.y * rotation.z;\n\t\tconst yw = rotation.y * rotation.w;\n\t\tconst zz = rotation.z * rotation.z;\n\t\tconst zw = rotation.z * rotation.w;\n\n\t\tthis.ix = scale.x * (1 - 2 * (yy + zz));\n\t\tthis.iy = scale.x * 2 * (xy + zw);\n\t\tthis.iz = scale.x * 2 * (xz - yw);\n\t\tthis.iw = 0;\n\t\tthis.jx = scale.y * 2 * (xy - zw);\n\t\tthis.jy = scale.y * (1 - 2 * (xx + zz));\n\t\tthis.jz = scale.y * 2 * (yz + xw);\n\t\tthis.jw = 0;\n\t\tthis.kx = scale.z * 2 * (xz + yw);\n\t\tthis.ky = scale.z * 2 * (yz - xw);\n\t\tthis.kz = scale.z * (1 - 2 * (xx + yy));\n\t\tthis.kw = 0;\n\t\tthis.tx = translation.x;\n\t\tthis.ty = translation.y;\n\t\tthis.tz = translation.z;\n\t\tthis.tw = 1;\n\t\treturn this;\n\t}\n\n\taddMatrix(m: Matrix4x4): Matrix4x4 {\n\t\tthis.ix += m.ix;\n\t\tthis.iy += m.iy;\n\t\tthis.iz += m.iz;\n\t\tthis.iw += m.iw;\n\t\tthis.jx += m.jx;\n\t\tthis.jy += m.jy;\n\t\tthis.jz += m.jz;\n\t\tthis.jw += m.jw;\n\t\tthis.kx += m.kx;\n\t\tthis.ky += m.ky;\n\t\tthis.kz += m.kz;\n\t\tthis.kw += m.kw;\n\t\tthis.tx += m.tx;\n\t\tthis.ty += m.ty;\n\t\tthis.tz += m.tz;\n\t\tthis.tw += m.tw;\n\t\treturn this;\n\t}\n\n\taddMatrices(a: Matrix4x4, b: Matrix4x4): Matrix4x4 {\n\t\tthis.ix = a.ix + b.ix;\n\t\tthis.iy = a.iy + b.iy;\n\t\tthis.iz = a.iz + b.iz;\n\t\tthis.iw = a.iw + b.iw;\n\t\tthis.jx = a.jx + b.jx;\n\t\tthis.jy = a.jy + b.jy;\n\t\tthis.jz = a.jz + b.jz;\n\t\tthis.jw = a.jw + b.jw;\n\t\tthis.kx = a.kx + b.kx;\n\t\tthis.ky = a.ky + b.ky;\n\t\tthis.kz = a.kz + b.kz;\n\t\tthis.kw = a.kw + b.kw;\n\t\tthis.tx = a.tx + b.tx;\n\t\tthis.ty = a.ty + b.ty;\n\t\tthis.tz = a.tz + b.tz;\n\t\tthis.tw = a.tw + b.tw;\n\t\treturn this;\n\t}\n\n\tsubMatrix(m: Matrix4x4): Matrix4x4 {\n\t\tthis.ix -= m.ix;\n\t\tthis.iy -= m.iy;\n\t\tthis.iz -= m.iz;\n\t\tthis.iw -= m.iw;\n\t\tthis.jx -= m.jx;\n\t\tthis.jy -= m.jy;\n\t\tthis.jz -= m.jz;\n\t\tthis.jw -= m.jw;\n\t\tthis.kx -= m.kx;\n\t\tthis.ky -= m.ky;\n\t\tthis.kz -= m.kz;\n\t\tthis.kw -= m.kw;\n\t\tthis.tx -= m.tx;\n\t\tthis.ty -= m.ty;\n\t\tthis.tz -= m.tz;\n\t\tthis.tw -= m.tw;\n\t\treturn this;\n\t}\n\n\tsubMatrices(a: Matrix4x4, b: Matrix4x4): Matrix4x4 {\n\t\tthis.ix = a.ix - b.ix;\n\t\tthis.iy = a.iy - b.iy;\n\t\tthis.iz = a.iz - b.iz;\n\t\tthis.iw = a.iw - b.iw;\n\t\tthis.jx = a.jx - b.jx;\n\t\tthis.jy = a.jy - b.jy;\n\t\tthis.jz = a.jz - b.jz;\n\t\tthis.jw = a.jw - b.jw;\n\t\tthis.kx = a.kx - b.kx;\n\t\tthis.ky = a.ky - b.ky;\n\t\tthis.kz = a.kz - b.kz;\n\t\tthis.kw = a.kw - b.kw;\n\t\tthis.tx = a.tx - b.tx;\n\t\tthis.ty = a.ty - b.ty;\n\t\tthis.tz = a.tz - b.tz;\n\t\tthis.tw = a.tw - b.tw;\n\t\treturn this;\n\t}\n\n\tnegate(): Matrix4x4 {\n\t\tthis.ix = -this.ix;\n\t\tthis.iy = -this.iy;\n\t\tthis.iz = -this.iz;\n\t\tthis.iw = -this.iw;\n\t\tthis.jx = -this.jx;\n\t\tthis.jy = -this.jy;\n\t\tthis.jz = -this.jz;\n\t\tthis.jw = -this.jw;\n\t\tthis.kx = -this.kx;\n\t\tthis.ky = -this.ky;\n\t\tthis.kz = -this.kz;\n\t\tthis.kw = -this.kw;\n\t\tthis.tx = -this.tx;\n\t\tthis.ty = -this.ty;\n\t\tthis.tz = -this.tz;\n\t\tthis.tw = -this.tw;\n\t\treturn this;\n\t}\n\n\tmulScalar(k: number): Matrix4x4 {\n\t\tthis.ix *= k;\n\t\tthis.iy *= k;\n\t\tthis.iz *= k;\n\t\tthis.iw *= k;\n\t\tthis.jx *= k;\n\t\tthis.jy *= k;\n\t\tthis.jz *= k;\n\t\tthis.jw *= k;\n\t\tthis.kx *= k;\n\t\tthis.ky *= k;\n\t\tthis.kz *= k;\n\t\tthis.kw *= k;\n\t\tthis.tx *= k;\n\t\tthis.ty *= k;\n\t\tthis.tz *= k;\n\t\tthis.tw *= k;\n\t\treturn this;\n\t}\n\n\tmulMatrix(m: Matrix4x4): Matrix4x4 {\n\t\tconst ix = this.ix * m.ix + this.jx * m.iy + this.kx * m.iz + this.tx * m.iw;\n\t\tconst iy = this.iy * m.ix + this.jy * m.iy + this.ky * m.iz + this.ty * m.iw;\n\t\tconst iz = this.iz * m.ix + this.jz * m.iy + this.kz * m.iz + this.tz * m.iw;\n\t\tconst iw = this.iw * m.ix + this.jw * m.iy + this.kw * m.iz + this.tw * m.iw;\n\t\tconst jx = this.ix * m.jx + this.jx * m.jy + this.kx * m.jz + this.tx * m.jw;\n\t\tconst jy = this.iy * m.jx + this.jy * m.jy + this.ky * m.jz + this.ty * m.jw;\n\t\tconst jz = this.iz * m.jx + this.jz * m.jy + this.kz * m.jz + this.tz * m.jw;\n\t\tconst jw = this.iw * m.jx + this.jw * m.jy + this.kw * m.jz + this.tw * m.jw;\n\t\tconst kx = this.ix * m.kx + this.jx * m.ky + this.kx * m.kz + this.tx * m.kw;\n\t\tconst ky = this.iy * m.kx + this.jy * m.ky + this.ky * m.kz + this.ty * m.kw;\n\t\tconst kz = this.iz * m.kx + this.jz * m.ky + this.kz * m.kz + this.tz * m.kw;\n\t\tconst kw = this.iw * m.kx + this.jw * m.ky + this.kw * m.kz + this.tw * m.kw;\n\t\tconst tx = this.ix * m.tx + this.jx * m.ty + this.kx * m.tz + this.tx * m.tw;\n\t\tconst ty = this.iy * m.tx + this.jy * m.ty + this.ky * m.tz + this.ty * m.tw;\n\t\tconst tz = this.iz * m.tx + this.jz * m.ty + this.kz * m.tz + this.tz * m.tw;\n\t\tconst tw = this.iw * m.tx + this.jw * m.ty + this.kw * m.tz + this.tw * m.tw;\n\t\tthis.ix = ix;\n\t\tthis.iy = iy;\n\t\tthis.iz = iz;\n\t\tthis.iw = iw;\n\t\tthis.jx = jx;\n\t\tthis.jy = jy;\n\t\tthis.jz = jz;\n\t\tthis.jw = jw;\n\t\tthis.kx = kx;\n\t\tthis.ky = ky;\n\t\tthis.kz = kz;\n\t\tthis.kw = kw;\n\t\tthis.tx = tx;\n\t\tthis.ty = ty;\n\t\tthis.tz = tz;\n\t\tthis.tw = tw;\n\t\treturn this;\n\t}\n\n\tpremulMatrix(m: Matrix4x4): Matrix4x4 {\n\t\tconst ix = m.ix * this.ix + m.jx * this.iy + m.kx * this.iz + m.tx * this.iw;\n\t\tconst iy = m.iy * this.ix + m.jy * this.iy + m.ky * this.iz + m.ty * this.iw;\n\t\tconst iz = m.iz * this.ix + m.jz * this.iy + m.kz * this.iz + m.tz * this.iw;\n\t\tconst iw = m.iw * this.ix + m.jw * this.iy + m.kw * this.iz + m.tw * this.iw;\n\t\tconst jx = m.ix * this.jx + m.jx * this.jy + m.kx * this.jz + m.tx * this.jw;\n\t\tconst jy = m.iy * this.jx + m.jy * this.jy + m.ky * this.jz + m.ty * this.jw;\n\t\tconst jz = m.iz * this.jx + m.jz * this.jy + m.kz * this.jz + m.tz * this.jw;\n\t\tconst jw = m.iw * this.jx + m.jw * this.jy + m.kw * this.jz + m.tw * this.jw;\n\t\tconst kx = m.ix * this.kx + m.jx * this.ky + m.kx * this.kz + m.tx * this.kw;\n\t\tconst ky = m.iy * this.kx + m.jy * this.ky + m.ky * this.kz + m.ty * this.kw;\n\t\tconst kz = m.iz * this.kx + m.jz * this.ky + m.kz * this.kz + m.tz * this.kw;\n\t\tconst kw = m.iw * this.kx + m.jw * this.ky + m.kw * this.kz + m.tw * this.kw;\n\t\tconst tx = m.ix * this.tx + m.jx * this.ty + m.kx * this.tz + m.tx * this.tw;\n\t\tconst ty = m.iy * this.tx + m.jy * this.ty + m.ky * this.tz + m.ty * this.tw;\n\t\tconst tz = m.iz * this.tx + m.jz * this.ty + m.kz * this.tz + m.tz * this.tw;\n\t\tconst tw = m.iw * this.tx + m.jw * this.ty + m.kw * this.tz + m.tw * this.tw;\n\t\tthis.ix = ix;\n\t\tthis.iy = iy;\n\t\tthis.iz = iz;\n\t\tthis.iw = iw;\n\t\tthis.jx = jx;\n\t\tthis.jy = jy;\n\t\tthis.jz = jz;\n\t\tthis.jw = jw;\n\t\tthis.kx = kx;\n\t\tthis.ky = ky;\n\t\tthis.kz = kz;\n\t\tthis.kw = kw;\n\t\tthis.tx = tx;\n\t\tthis.ty = ty;\n\t\tthis.tz = tz;\n\t\tthis.tw = tw;\n\t\treturn this;\n\t}\n\n\tinverseAffine(): Matrix4x4 {\n\t\tconst ix = this.ix;\n\t\tconst iy = this.iy;\n\t\tconst iz = this.iz;\n\t\tconst jx = this.jx;\n\t\tconst jy = this.jy;\n\t\tconst jz = this.jz;\n\t\tconst kx = this.kx;\n\t\tconst ky = this.ky;\n\t\tconst kz = this.kz;\n\t\tconst tx = this.tx;\n\t\tconst ty = this.ty;\n\t\tconst tz = this.tz;\n\n\t\tconst det = ix * jy * kz + iy * jz * kx + iz * jx * ky\n\t\t\t- ix * jz * ky - iy * jx * kz - iz * jy * kx;\n\t\tconst invDet = 1 / det;\n\n\t\tthis.ix = invDet * (jy * kz - jz * ky);\n\t\tthis.iy = invDet * (iz * ky - iy * kz);\n\t\tthis.iz = invDet * (iy * jz - iz * jy);\n\t\tthis.jx = invDet * (jz * kx - jx * kz);\n\t\tthis.jy = invDet * (ix * kz - iz * kx);\n\t\tthis.jz = invDet * (iz * jx - ix * jz);\n\t\tthis.kx = invDet * (jx * ky - jy * kx);\n\t\tthis.ky = invDet * (iy * kx - ix * ky);\n\t\tthis.kz = invDet * (ix * jy - iy * jx);\n\t\tthis.tx = -(this.ix * tx + this.jx * ty + this.kx * tz);\n\t\tthis.ty = -(this.iy * tx + this.jy * ty + this.ky * tz);\n\t\tthis.tz = -(this.iz * tx + this.jz * ty + this.kz * tz);\n\n\t\treturn this;\n\t}\n\n\tinverseTransposeAffine(): Matrix4x4 {\n\t\tconst ix = this.ix;\n\t\tconst iy = this.iy;\n\t\tconst iz = this.iz;\n\t\tconst jx = this.jx;\n\t\tconst jy = this.jy;\n\t\tconst jz = this.jz;\n\t\tconst kx = this.kx;\n\t\tconst ky = this.ky;\n\t\tconst kz = this.kz;\n\t\tconst tx = this.tx;\n\t\tconst ty = this.ty;\n\t\tconst tz = this.tz;\n\n\t\tconst det = ix * jy * kz + iy * jz * kx + iz * jx * ky\n\t\t\t- ix * jz * ky - iy * jx * kz - iz * jy * kx;\n\t\tconst invDet = 1 / det;\n\n\t\tthis.ix = invDet * (jy * kz - jz * ky);\n\t\tthis.iy = invDet * (jz * kx - jx * kz);\n\t\tthis.iz = invDet * (jx * ky - jy * kx);\n\t\tthis.jx = invDet * (iz * ky - iy * kz);\n\t\tthis.jy = invDet * (ix * kz - iz * kx);\n\t\tthis.jz = invDet * (iy * kx - ix * ky);\n\t\tthis.kx = invDet * (iy * jz - iz * jy);\n\t\tthis.ky = invDet * (iz * jx - ix * jz);\n\t\tthis.kz = invDet * (ix * jy - iy * jx);\n\t\tthis.tx = -(this.ix * tx + this.iy * ty + this.iz * tz);\n\t\tthis.ty = -(this.jx * tx + this.jy * ty + this.jz * tz);\n\t\tthis.tz = -(this.kx * tx + this.ky * ty + this.kz * tz);\n\n\t\treturn this;\n\t}\n}\n\nObject.defineProperty(Matrix4x4.prototype, \"type\", { value: \"Matrix4x4\" });\n\nexport function isMatrix4x4(value: unknown): value is Matrix4x4 {\n\treturn Boolean(value) && (value as Matrix4x4).type === \"Matrix4x4\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { IndexBuffer, VertexBuffer } from \"../resources\";\n\nexport type Submesh = {\n\tstart: number,\n\tlength: number,\n};\n\nexport interface MeshProps {\n\treadonly name?: string;\n\n\treadonly vertexBuffer: VertexBuffer;\n\treadonly indexBuffer: IndexBuffer;\n\treadonly submeshes: Submesh[];\n}\n\nexport class Mesh {\n\n\treadonly type!: \"Mesh\"\n\n\t_name: string;\n\n\t_vertexBuffer: VertexBuffer;\n\t_indexBuffer: IndexBuffer;\n\t_submeshes: Submesh[];\n\n\tconstructor({\n\t\tname = \"\",\n\t\tvertexBuffer,\n\t\tindexBuffer,\n\t\tsubmeshes,\n\t}: MeshProps) {\n\t\tthis._name = name;\n\n\t\tthis._vertexBuffer = vertexBuffer;\n\t\tthis._indexBuffer = indexBuffer\n\t\tthis._submeshes = submeshes;\n\t}\n\n\tget submeshCount(): number {\n\t\treturn this._submeshes.length;\n\t}\n\n\tset name(value: string) { this._name = value; }\n\tget name(): string { return this._name; }\n\n\tset vertexBuffer(value: VertexBuffer) { this._vertexBuffer = value; }\n\tget vertexBuffer(): VertexBuffer { return this._vertexBuffer; }\n\n\tset indexBuffer(value: IndexBuffer) { this._indexBuffer = value; }\n\tget indexBuffer(): IndexBuffer { return this._indexBuffer; }\n\n\tsetSubmeshes(value: readonly Submesh[]): Mesh {\n\t\tthis._submeshes.length = 0;\n\t\tthis._submeshes.push(...value);\n\t\treturn this;\n\t}\n\n\tgetMaterials(res: Submesh[]): Submesh[] {\n\t\tres.length = 0;\n\t\tres.push(...this._submeshes);\n\t\treturn res;\n\t}\n}\n\nObject.defineProperty(Mesh.prototype, \"type\", { value: \"Mesh\" });\n\nexport function isMesh(value: unknown): value is Mesh {\n\treturn Boolean(value) && (value as Mesh).type === \"Mesh\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { Camera, DynamicMaterial, Light, Matrix4x4, Mesh, Quaternion, QuaternionObject, Vector3, Vector3Object } from \".\";\nimport { Material } from \"../resources\";\n\nexport interface NodeProps {\n\treadonly name?: string;\n\n\treadonly translation?: Vector3Object;\n\treadonly rotation?: QuaternionObject;\n\treadonly scale?: Vector3Object;\n\n\treadonly camera?: Camera | null;\n\treadonly light?: Light | null;\n\treadonly mesh?: Mesh | null;\n\treadonly materials?: (Material | DynamicMaterial)[];\n\n\treadonly children?: Node[];\n}\n\nexport class Node {\n\n\tdeclare readonly type: \"Node\";\n\n\t_name: string;\n\n\t_translation: Vector3;\n\t_rotation: Quaternion;\n\t_scale: Vector3;\n\n\t/** unique */\n\t_camera: Camera | null;\n\t/** unique */\n\t_light: Light | null;\n\t/** shared */\n\t_mesh: Mesh | null;\n\t/** shared */\n\t_materials: (Material | DynamicMaterial)[];\n\n\t/** unique */\n\t_children: Node[];\n\n\t/** backreference */\n\t_parent: Node | null;\n\n\t_localMatrixNeedsUpdate: boolean;\n\t_localMatrix: Matrix4x4;\n\n\t_worldMatrixNeedsUpdate: boolean;\n\t_worldMatrix: Matrix4x4;\n\n\tconstructor({\n\t\tname = \"\",\n\t\ttranslation,\n\t\trotation,\n\t\tscale,\n\t\tcamera = null,\n\t\tlight = null,\n\t\tmesh = null,\n\t\tmaterials = [],\n\t\tchildren = [],\n\t}: NodeProps) {\n\t\tthis._name = name;\n\n\t\tthis._translation = translation !== undefined ? Vector3.fromObject(translation) : Vector3.zero();\n\t\tthis._rotation = rotation !== undefined ? Quaternion.fromObject(rotation) : Quaternion.identity();\n\t\tthis._scale = scale !== undefined ? Vector3.fromObject(scale) : Vector3.one();\n\n\t\tthis._camera = camera;\n\t\tthis._light = light;\n\t\tthis._mesh = mesh;\n\t\tthis._materials = materials;\n\n\t\tthis._children = children;\n\n\t\tthis._parent = null;\n\n\t\tthis._localMatrixNeedsUpdate = true;\n\t\tthis._localMatrix = new Matrix4x4(\n\t\t\tNaN, NaN, NaN, NaN,\n\t\t\tNaN, NaN, NaN, NaN,\n\t\t\tNaN, NaN, NaN, NaN,\n\t\t\tNaN, NaN, NaN, NaN,\n\t\t);\n\n\t\tthis._worldMatrixNeedsUpdate = true;\n\t\tthis._worldMatrix = new Matrix4x4(\n\t\t\tNaN, NaN, NaN, NaN,\n\t\t\tNaN, NaN, NaN, NaN,\n\t\t\tNaN, NaN, NaN, NaN,\n\t\t\tNaN, NaN, NaN, NaN,\n\t\t);\n\n\t\tif (this._camera !== null) {\n\t\t\tthis._camera._node = this;\n\t\t}\n\n\t\tif (this._light !== null) {\n\t\t\tthis._light._node = this;\n\t\t}\n\n\t\tif (this._children !== null) {\n\t\t\tfor (const child of this._children) {\n\t\t\t\tchild._parent = this;\n\t\t\t}\n\t\t}\n\t}\n\n\tset name(value: string) { this._name = value; }\n\tget name(): string { return this._name; }\n\n\tsetTranslation(value: Vector3Object): Node {\n\t\tthis._translation.setObject(value);\n\t\tthis._localMatrixNeedsUpdate = true;\n\t\tthis._setWorldMatrixNeedsUpdateRecursive(true);\n\t\treturn this;\n\t}\n\n\tgetTranslation(res: Vector3): Vector3 {\n\t\treturn res.setObject(this._translation);\n\t}\n\n\tsetRotation(value: QuaternionObject): Node {\n\t\tthis._rotation.setObject(value);\n\t\tthis._localMatrixNeedsUpdate = true;\n\t\tthis._setWorldMatrixNeedsUpdateRecursive(true);\n\t\treturn this;\n\t}\n\n\tgetRotation(res: Quaternion): Quaternion {\n\t\treturn res.setObject(this._rotation);\n\t}\n\n\tsetScale(value: Vector3Object): Node {\n\t\tthis._scale.setObject(value);\n\t\tthis._localMatrixNeedsUpdate = true;\n\t\tthis._setWorldMatrixNeedsUpdateRecursive(true);\n\t\treturn this;\n\t}\n\n\tgetScale(res: Vector3): Vector3 {\n\t\treturn res.setObject(this._scale);\n\t}\n\n\tset camera(value: Camera | null) {\n\t\tif (value !== null) {\n\t\t\tthis.attachCamera(value);\n\t\t} else {\n\t\t\tthis.detachCamera();\n\t\t}\n\t}\n\tget camera(): Camera | null { return this._camera; }\n\n\tattachCamera(camera: Camera): Node {\n\t\tif (this._camera !== null) {\n\t\t\tthis._camera._node = null;\n\t\t}\n\n\t\tthis._camera = camera;\n\n\t\tif (camera._node !== null) {\n\t\t\tcamera._node._camera = null;\n\t\t}\n\n\t\tcamera._node = this;\n\t\tthis._camera = camera;\n\t\treturn this;\n\t}\n\n\tdetachCamera(): Node {\n\t\tif (this._camera === null) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._camera._node = null;\n\t\tthis._camera = null;\n\t\treturn this;\n\t}\n\n\tset light(value: Light | null) {\n\t\tif (value !== null) {\n\t\t\tthis.attachLight(value);\n\t\t} else {\n\t\t\tthis.detachLight();\n\t\t}\n\t}\n\tget light(): Light | null { return this._light; }\n\n\tattachLight(light: Light): Node {\n\t\tif (this._light !== null) {\n\t\t\tthis._light._node = null;\n\t\t}\n\n\t\tthis._light = light;\n\n\t\tif (light._node !== null) {\n\t\t\tlight._node._light = null;\n\t\t}\n\n\t\tlight._node = this;\n\t\tthis._light = light;\n\t\treturn this;\n\t}\n\n\tdetachLight(): Node {\n\t\tif (this._light === null) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._light._node = null;\n\t\tthis._light = null;\n\t\treturn this;\n\t}\n\n\tset mesh(value: Mesh | null) { this._mesh = value; }\n\tget mesh(): Mesh | null { return this._mesh; }\n\n\tsetMaterials(value: readonly (Material | DynamicMaterial)[]): Node {\n\t\tthis._materials.length = 0;\n\t\tthis._materials.push(...value);\n\t\treturn this;\n\t}\n\n\tgetMaterials(res: (Material | DynamicMaterial)[]): (Material | DynamicMaterial)[] {\n\t\tres.length = 0;\n\t\tres.push(...this._materials);\n\t\treturn res;\n\t}\n\n\t// TODO children\n\n\tset parent(value: Node | null) {\n\t\tif (value !== null) {\n\t\t\tthis.attach(value);\n\t\t} else {\n\t\t\tthis.detach();\n\t\t}\n\t}\n\tget parent(): Node | null { return this._parent; }\n\n\tattach(node: Node): Node {\n\t\tif (this._parent !== null) {\n\t\t\tthis._parent._children.splice(this._parent._children.indexOf(this), 1);\n\t\t}\n\n\t\tnode._children.push(this);\n\t\tthis._parent = node;\n\t\tthis._setWorldMatrixNeedsUpdateRecursive(true);\n\t\treturn this;\n\t}\n\n\tdetach(): Node {\n\t\tif (this._parent === null) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._parent._children.splice(this._parent._children.indexOf(this), 1);\n\t\tthis._parent = null;\n\t\tthis._setWorldMatrixNeedsUpdateRecursive(true);\n\t\treturn this;\n\t}\n\n\tgetLocalMatrix(res: Matrix4x4): Matrix4x4 {\n\t\tthis._updateLocalMatrix();\n\t\tres.setObject(this._localMatrix);\n\t\treturn res;\n\t}\n\n\tgetWorldMatrix(res: Matrix4x4): Matrix4x4 {\n\t\tthis._updateWorldMatrix();\n\t\tres.setObject(this._worldMatrix);\n\t\treturn res;\n\t}\n\n\t_updateLocalMatrix(): Node {\n\t\tif (!this._localMatrixNeedsUpdate) {\n\t\t\treturn this;\n\t\t}\n\t\tthis._localMatrix.setTranslationRotationScale(this._translation, this._rotation, this._scale);\n\t\tthis._localMatrixNeedsUpdate = false;\n\t\treturn this;\n\t}\n\n\t_updateWorldMatrix(): Node {\n\t\tif (!this._worldMatrixNeedsUpdate) {\n\t\t\treturn this;\n\t\t}\n\t\tthis._updateLocalMatrix();\n\t\tif (this._parent !== null) {\n\t\t\tthis._parent.getWorldMatrix(this._worldMatrix);\n\t\t\tthis._worldMatrix.premulMatrix(this._localMatrix);\n\t\t} else {\n\t\t\tthis._worldMatrix.setObject(this._localMatrix);\n\t\t}\n\t\treturn this;\n\t}\n\n\t_setWorldMatrixNeedsUpdateRecursive(value: boolean): Node {\n\t\tthis._localMatrixNeedsUpdate = true;\n\t\tfor (const child of this._children) {\n\t\t\tchild._setWorldMatrixNeedsUpdateRecursive(value);\n\t\t}\n\t\treturn this;\n\t}\n}\n\nObject.defineProperty(Node.prototype, \"type\", { value: \"Node\" });\n\nexport function isNode(value: unknown): value is Node {\n\treturn Boolean(value) && (value as Node).type === \"Node\";\n}\n\nexport function* preOrder(nodes: Iterable): Generator {\n\tfor (const node of nodes) {\n\t\tyield node;\n\t\tyield* node._children;\n\t}\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nexport interface QuaternionObject {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly z: number;\n\treadonly w: number;\n}\n\nexport type QuaternionTuple = readonly [x: number, y: number, z: number, w: number];\n\nexport class Quaternion {\n\n\tdeclare readonly type: \"Quaternion\";\n\n\tx: number;\n\ty: number;\n\tz: number;\n\tw: number;\n\n\tconstructor(x: number, y: number, z: number, w: number) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\t}\n\n\tstatic fromObject(object: QuaternionObject): Quaternion {\n\t\treturn new Quaternion(object.x, object.y, object.z, object.w);\n\t}\n\n\tstatic fromTuple(tuple: QuaternionTuple): Quaternion {\n\t\treturn new Quaternion(...tuple);\n\t}\n\n\tstatic identity(): Quaternion {\n\t\treturn new Quaternion(0, 0, 0, 1);\n\t}\n\n\tstatic fromRotationXY(angleRad: number): Quaternion {\n\t\tconst halfAngleRad = 0.5 * angleRad;\n\t\tconst c = Math.cos(halfAngleRad);\n\t\tconst s = Math.sin(halfAngleRad);\n\t\treturn new Quaternion(0, 0, s, c);\n\t}\n\n\tstatic fromRotationYZ(angleRad: number): Quaternion {\n\t\tconst halfAngleRad = 0.5 * angleRad;\n\t\tconst c = Math.cos(halfAngleRad);\n\t\tconst s = Math.sin(halfAngleRad);\n\t\treturn new Quaternion(s, 0, 0, c);\n\t}\n\n\tstatic fromRotationZX(angleRad: number): Quaternion {\n\t\tconst halfAngleRad = 0.5 * angleRad;\n\t\tconst c = Math.cos(halfAngleRad);\n\t\tconst s = Math.sin(halfAngleRad);\n\t\treturn new Quaternion(0, s, 0, c);\n\t}\n\n\tsetObject(object: QuaternionObject): Quaternion {\n\t\tthis.x = object.x;\n\t\tthis.y = object.y;\n\t\tthis.z = object.z;\n\t\tthis.w = object.w;\n\t\treturn this;\n\t}\n\n\tsetTuple(tuple: QuaternionTuple): Quaternion {\n\t\tthis.x = tuple[0];\n\t\tthis.y = tuple[1];\n\t\tthis.z = tuple[2];\n\t\tthis.w = tuple[3];\n\t\treturn this;\n\t}\n\n\tsetIdentity(): Quaternion {\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\t\tthis.z = 0;\n\t\tthis.w = 1;\n\t\treturn this;\n\t}\n\n\tsetRotationXY(angleRad: number): Quaternion {\n\t\tconst halfAngleRad = 0.5 * angleRad;\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\t\tthis.z = Math.sin(halfAngleRad);\n\t\tthis.w = Math.cos(halfAngleRad);\n\t\treturn this;\n\t}\n\n\tsetRotationYZ(angleRad: number): Quaternion {\n\t\tconst halfAngleRad = 0.5 * angleRad;\n\t\tthis.x = Math.sin(halfAngleRad);\n\t\tthis.y = 0;\n\t\tthis.z = 0;\n\t\tthis.w = Math.cos(halfAngleRad);\n\t\treturn this;\n\t}\n\n\tsetRotationZX(angleRad: number): Quaternion {\n\t\tconst halfAngleRad = 0.5 * angleRad;\n\t\tthis.x = 0;\n\t\tthis.y = Math.sin(halfAngleRad);\n\t\tthis.z = 0;\n\t\tthis.w = Math.cos(halfAngleRad);\n\t\treturn this;\n\t}\n}\n\nObject.defineProperty(Quaternion.prototype, \"type\", { value: \"Quaternion\" });\n\nexport function isQuaternion(value: unknown): value is Quaternion {\n\treturn Boolean(value) && (value as Quaternion).type === \"Quaternion\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { Color, ColorObject, Node } from \".\";\n\nexport interface SceneProps {\n\treadonly name?: string;\n\n\treadonly nodes?: Node[];\n\n\treadonly ambientLight?: ColorObject;\n}\n\nexport class Scene {\n\n\tdeclare readonly type: \"Scene\";\n\n\t_name: string;\n\n\t_nodes: Node[];\n\n\t_ambientLight: Color;\n\n\tconstructor({\n\t\tname = \"\",\n\t\tnodes = [],\n\t\tambientLight,\n\t}: SceneProps) {\n\t\tthis._name = name;\n\n\t\tthis._nodes = nodes;\n\n\t\tthis._ambientLight = ambientLight !== undefined ? Color.fromObject(ambientLight) : Color.black();\n\t}\n\n\tset name(value: string) { this._name = value; }\n\tget name(): string { return this._name; }\n\n\tsetAmbientLight(value: ColorObject): Scene {\n\t\tthis._ambientLight.setObject(value);\n\t\treturn this;\n\t}\n\n\tgetAmbientLight(res: Color): Color {\n\t\treturn res.setObject(this._ambientLight);\n\t}\n}\n\nObject.defineProperty(Scene.prototype, \"type\", { value: \"Scene\" });\n\nexport function isScene(value: unknown): value is Scene {\n\treturn Boolean(value) && (value as Scene).type === \"Scene\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nexport interface Vector2Object {\n\treadonly x: number;\n\treadonly y: number;\n}\n\nexport type Vector2Tuple = readonly [x: number, y: number];\n\nexport class Vector2 {\n\n\tdeclare readonly type: \"Vector2\";\n\n\tx: number;\n\ty: number;\n\n\tconstructor(x: number, y: number) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t}\n\n\tstatic fromObject(object: Vector2Object): Vector2 {\n\t\treturn new Vector2(object.x, object.y);\n\t}\n\n\tstatic fromTuple(tuple: Vector2Tuple): Vector2 {\n\t\treturn new Vector2(...tuple);\n\t}\n\n\tstatic zero(): Vector2 {\n\t\treturn new Vector2(0, 0);\n\t}\n\n\tstatic one(): Vector2 {\n\t\treturn new Vector2(1, 1);\n\t}\n\n\tset(x: number, y: number): Vector2 {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\treturn this;\n\t}\n\n\tsetObject(object: Vector2Object): Vector2 {\n\t\tthis.x = object.x;\n\t\tthis.y = object.y;\n\t\treturn this;\n\t}\n\n\tsetTuple(tuple: Vector2Tuple): Vector2 {\n\t\tthis.x = tuple[0];\n\t\tthis.y = tuple[1];\n\t\treturn this;\n\t}\n\n\tsetZero(): Vector2 {\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\t\treturn this;\n\t}\n\n\tsetOne(): Vector2 {\n\t\tthis.x = 1;\n\t\tthis.y = 1;\n\t\treturn this;\n\t}\n\n\tsetX(x: number): Vector2 {\n\t\tthis.x = x;\n\t\treturn this;\n\t}\n\n\tsetY(y: number): Vector2 {\n\t\tthis.y = y;\n\t\treturn this;\n\t}\n\n\tnormalize(): Vector2 {\n\t\tconst l = Math.sqrt(this.x * this.x + this.y * this.y);\n\t\tthis.x /= l;\n\t\tthis.y /= l;\n\t\treturn this;\n\t}\n}\n\nObject.defineProperty(Vector2.prototype, \"type\", { value: \"Vector2\" });\n\nexport function isVector2(value: unknown): value is Vector2 {\n\treturn Boolean(value) && (value as Vector2).type === \"Vector2\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nexport interface Vector3Object {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly z: number;\n}\n\nexport type Vector3Tuple = readonly [x: number, y: number, z: number];\n\nexport class Vector3 {\n\n\tdeclare readonly type: \"Vector3\";\n\n\tx: number;\n\ty: number;\n\tz: number;\n\n\tconstructor(x: number, y: number, z: number) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t}\n\n\tstatic fromObject(object: Vector3Object): Vector3 {\n\t\treturn new Vector3(object.x, object.y, object.z);\n\t}\n\n\tstatic fromTuple(tuple: Vector3Tuple): Vector3 {\n\t\treturn new Vector3(...tuple);\n\t}\n\n\tstatic zero(): Vector3 {\n\t\treturn new Vector3(0, 0, 0);\n\t}\n\n\tstatic one(): Vector3 {\n\t\treturn new Vector3(1, 1, 1);\n\t}\n\n\tset(x: number, y: number, z: number): Vector3 {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\treturn this;\n\t}\n\n\tsetObject(object: Vector3Object): Vector3 {\n\t\tthis.x = object.x;\n\t\tthis.y = object.y;\n\t\tthis.z = object.z;\n\t\treturn this;\n\t}\n\n\tsetTuple(tuple: Vector3Tuple): Vector3 {\n\t\tthis.x = tuple[0];\n\t\tthis.y = tuple[1];\n\t\tthis.z = tuple[2];\n\t\treturn this;\n\t}\n\n\tsetZero(): Vector3 {\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\t\tthis.z = 0;\n\t\treturn this;\n\t}\n\n\tsetOne(): Vector3 {\n\t\tthis.x = 1;\n\t\tthis.y = 1;\n\t\tthis.z = 1;\n\t\treturn this;\n\t}\n\n\tsetX(x: number): Vector3 {\n\t\tthis.x = x;\n\t\treturn this;\n\t}\n\n\tsetY(y: number): Vector3 {\n\t\tthis.y = y;\n\t\treturn this;\n\t}\n\n\tsetZ(z: number): Vector3 {\n\t\tthis.z = z;\n\t\treturn this;\n\t}\n\n\tnormalize(): Vector3 {\n\t\tconst l = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n\t\tthis.x /= l;\n\t\tthis.y /= l;\n\t\tthis.z /= l;\n\t\treturn this;\n\t}\n}\n\nObject.defineProperty(Vector3.prototype, \"type\", { value: \"Vector3\" });\n\nexport function isVector3(value: unknown): value is Vector3 {\n\treturn Boolean(value) && (value as Vector3).type === \"Vector3\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nexport interface Vector4Object {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly z: number;\n\treadonly w: number;\n}\n\nexport type Vector4Tuple = readonly [x: number, y: number, z: number, w: number];\n\nexport class Vector4 {\n\n\tdeclare readonly type: \"Vector4\";\n\n\tx: number;\n\ty: number;\n\tz: number;\n\tw: number;\n\n\tconstructor(x: number, y: number, z: number, w: number) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\t}\n\n\tstatic fromObject(object: Vector4Object): Vector4 {\n\t\treturn new Vector4(object.x, object.y, object.z, object.w);\n\t}\n\n\tstatic fromTuple(tuple: Vector4Tuple): Vector4 {\n\t\treturn new Vector4(...tuple);\n\t}\n\n\tstatic zero(): Vector4 {\n\t\treturn new Vector4(0, 0, 0, 0);\n\t}\n\n\tstatic one(): Vector4 {\n\t\treturn new Vector4(1, 1, 1, 1);\n\t}\n\n\tset(x: number, y: number, z: number, w: number): Vector4 {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\t\treturn this;\n\t}\n\n\tsetObject(object: Vector4Object): Vector4 {\n\t\tthis.x = object.x;\n\t\tthis.y = object.y;\n\t\tthis.z = object.z;\n\t\tthis.w = object.w;\n\t\treturn this;\n\t}\n\n\tsetTuple(tuple: Vector4Tuple): Vector4 {\n\t\tthis.x = tuple[0];\n\t\tthis.y = tuple[1];\n\t\tthis.z = tuple[2];\n\t\tthis.w = tuple[3];\n\t\treturn this;\n\t}\n\n\tsetZero(): Vector4 {\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\t\tthis.z = 0;\n\t\tthis.w = 0;\n\t\treturn this;\n\t}\n\n\tsetOne(): Vector4 {\n\t\tthis.x = 1;\n\t\tthis.y = 1;\n\t\tthis.z = 1;\n\t\tthis.w = 1;\n\t\treturn this;\n\t}\n\n\tsetX(x: number): Vector4 {\n\t\tthis.x = x;\n\t\treturn this;\n\t}\n\n\tsetY(y: number): Vector4 {\n\t\tthis.y = y;\n\t\treturn this;\n\t}\n\n\tsetZ(z: number): Vector4 {\n\t\tthis.z = z;\n\t\treturn this;\n\t}\n\n\tsetW(w: number): Vector4 {\n\t\tthis.w = w;\n\t\treturn this;\n\t}\n\n\tnormalize(): Vector4 {\n\t\tconst l = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n\t\tthis.x /= l;\n\t\tthis.y /= l;\n\t\tthis.z /= l;\n\t\tthis.w /= l;\n\t\treturn this;\n\t}\n}\n\nObject.defineProperty(Vector4.prototype, \"type\", { value: \"Vector4\" });\n\nexport function isVector4(value: unknown): value is Vector4 {\n\treturn Boolean(value) && (value as Vector4).type === \"Vector4\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { ColorObject, Matrix4x4Object, Vector2Object, Vector3Object, Vector4Object } from \"./data\";\n\nexport class _BinaryWriter {\n\n\tstatic readonly DEFAULT_CAPACITY = 16;\n\n\t_buffer: ArrayBuffer;\n\t_dataView: DataView;\n\t_typedArray: Uint8Array;\n\t_length: number;\n\n\tget subarray(): Uint8Array { return new Uint8Array(this._buffer, 0, this._length); }\n\n\tconstructor(capacity = _BinaryWriter.DEFAULT_CAPACITY) {\n\t\tcapacity = Math.max(capacity, 1);\n\t\tthis._buffer = new ArrayBuffer(capacity);\n\t\tthis._dataView = new DataView(this._buffer);\n\t\tthis._typedArray = new Uint8Array(this._buffer);\n\t\tthis._length = 0;\n\t}\n\n\tclear(): _BinaryWriter {\n\t\tthis._length = 0;\n\t\treturn this;\n\t}\n\n\tensureCapacity(desiredCapacity: number): _BinaryWriter {\n\t\tif (this._buffer.byteLength >= desiredCapacity) {\n\t\t\treturn this;\n\t\t}\n\n\t\tlet newCapacity = this._buffer.byteLength * 2;\n\t\twhile (newCapacity < desiredCapacity) {\n\t\t\tnewCapacity *= 2;\n\t\t}\n\n\t\tconst newBuffer = new ArrayBuffer(newCapacity);\n\t\tconst newDataView = new DataView(newBuffer);\n\t\tconst newTypedArray = new Uint8Array(newBuffer);\n\n\t\tnewTypedArray.set(this.subarray);\n\n\t\tthis._buffer = newBuffer;\n\t\tthis._dataView = newDataView;\n\t\tthis._typedArray = newTypedArray;\n\t\treturn this;\n\t}\n\n\tensureUnusedCapacity(desiredUnusedCapacity: number): _BinaryWriter {\n\t\treturn this.ensureCapacity(this._length + desiredUnusedCapacity);\n\t}\n\n\twriteU32(value: number): _BinaryWriter {\n\t\tthis.ensureUnusedCapacity(4);\n\t\tthis._dataView.setUint32(this._length, value, true);\n\t\tthis._length += 4;\n\t\treturn this;\n\t}\n\n\twriteF32(value: number): _BinaryWriter {\n\t\tthis.ensureUnusedCapacity(4);\n\t\tthis._dataView.setFloat32(this._length, value, true);\n\t\tthis._length += 4;\n\t\treturn this;\n\t}\n\n\twriteVector2(value: Vector2Object): _BinaryWriter {\n\t\tthis.writeF32(value.x);\n\t\tthis.writeF32(value.y);\n\t\treturn this;\n\t}\n\n\twriteVector3(value: Vector3Object): _BinaryWriter {\n\t\tthis.writeF32(value.x);\n\t\tthis.writeF32(value.y);\n\t\tthis.writeF32(value.z);\n\t\treturn this;\n\t}\n\n\twriteVector4(value: Vector4Object): _BinaryWriter {\n\t\tthis.writeF32(value.x);\n\t\tthis.writeF32(value.y);\n\t\tthis.writeF32(value.z);\n\t\tthis.writeF32(value.w);\n\t\treturn this;\n\t}\n\n\twriteMatrix4x4(value: Matrix4x4Object): _BinaryWriter {\n\t\tthis.writeF32(value.ix);\n\t\tthis.writeF32(value.iy);\n\t\tthis.writeF32(value.iz);\n\t\tthis.writeF32(value.iw);\n\t\tthis.writeF32(value.jx);\n\t\tthis.writeF32(value.jy);\n\t\tthis.writeF32(value.jz);\n\t\tthis.writeF32(value.jw);\n\t\tthis.writeF32(value.kx);\n\t\tthis.writeF32(value.ky);\n\t\tthis.writeF32(value.kz);\n\t\tthis.writeF32(value.kw);\n\t\tthis.writeF32(value.tx);\n\t\tthis.writeF32(value.ty);\n\t\tthis.writeF32(value.tz);\n\t\tthis.writeF32(value.tw);\n\t\treturn this;\n\t}\n\n\twriteColorF32(value: ColorObject): _BinaryWriter {\n\t\tthis.writeF32(value.r);\n\t\tthis.writeF32(value.g);\n\t\tthis.writeF32(value.b);\n\t\treturn this;\n\t}\n\n\tpadToAlign(alignment: number): _BinaryWriter {\n\t\tconst alignedLength = (this._length + alignment - 1) & ~(alignment - 1);\n\t\tconst padding = alignedLength - this._length;\n\t\tif (padding === 0) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.ensureUnusedCapacity(padding);\n\t\tthis._typedArray.fill(0, this._length, alignedLength);\n\t\tthis._length = alignedLength;\n\t\treturn this;\n\t}\n\n\talloc(byteLength: number): DataView {\n\t\tthis.ensureUnusedCapacity(byteLength);\n\t\tconst dataView = new DataView(this._buffer, this._length, byteLength);\n\t\tthis._length += byteLength;\n\t\treturn dataView;\n\t}\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nexport function degToRad(angleDeg: number): number {\n\treturn angleDeg * Math.PI / 180;\n}\n\nexport function radToDeg(angleRad: number): number {\n\treturn angleRad * 180 / Math.PI;\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { Renderer } from \"./oktaeder\";\n\n// 152 bytes padded to 256\nexport const GLOBAL_UNIFORMS_SIZE = 256;\n// 64 bytes padded to 256\nexport const MATERIAL_UNIFORMS_SIZE = 256;\n// 128 bytes padded to 256\nexport const OBJECT_UNIFORMS_SIZE = 256;\n\nexport type ShaderFlagKey = number;\n\nexport interface ShaderFlags {\n\treadonly texCoord: boolean;\n\treadonly lightTexCoord: boolean;\n\treadonly normal: boolean;\n\treadonly tangent: boolean;\n}\n\nexport function _shaderFlagsKey({\n\ttexCoord,\n\tlightTexCoord,\n\tnormal,\n\ttangent,\n}: ShaderFlags): ShaderFlagKey {\n\tlet key = 0;\n\tkey |= Number(texCoord) << 0;\n\tkey |= Number(lightTexCoord) << 1;\n\tkey |= Number(normal) << 2;\n\tkey |= Number(tangent) << 3;\n\treturn key;\n}\n\nexport function _createPipeline(renderer: Renderer, {\n\ttexCoord,\n\tlightTexCoord,\n\tnormal,\n\ttangent,\n}: ShaderFlags): GPURenderPipeline {\n\tconst shaderCode = _createShaderCode({ texCoord, lightTexCoord, normal, tangent });\n\n\tconst shaderModule = renderer._device.createShaderModule({\n\t\tcode: shaderCode,\n\t\tcompilationHints: [\n\t\t\t{ entryPoint: \"vert\", layout: renderer._pipelineLayout },\n\t\t\t{ entryPoint: \"frag\", layout: renderer._pipelineLayout },\n\t\t],\n\t});\n\n\tlet vertexLocation = 0;\n\n\tconst pipeline = renderer._device.createRenderPipeline({\n\t\tlayout: renderer._pipelineLayout,\n\t\tvertex: {\n\t\t\tentryPoint: \"vert\",\n\t\t\tmodule: shaderModule,\n\t\t\tbuffers: [\n\t\t\t\t{\n\t\t\t\t\tarrayStride: 12,\n\t\t\t\t\tattributes: [{\n\t\t\t\t\t\tshaderLocation: vertexLocation++,\n\t\t\t\t\t\tformat: \"float32x3\",\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t}],\n\t\t\t\t},\n\t\t\t\t...(texCoord ? [{\n\t\t\t\t\tarrayStride: 8,\n\t\t\t\t\tattributes: [{\n\t\t\t\t\t\tshaderLocation: vertexLocation++,\n\t\t\t\t\t\tformat: \"float32x2\",\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t}],\n\t\t\t\t} satisfies GPUVertexBufferLayout] : []),\n\t\t\t\t...(lightTexCoord ? [{\n\t\t\t\t\tarrayStride: 8,\n\t\t\t\t\tattributes: [{\n\t\t\t\t\t\tshaderLocation: vertexLocation++,\n\t\t\t\t\t\tformat: \"float32x2\",\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t}],\n\t\t\t\t} satisfies GPUVertexBufferLayout] : []),\n\t\t\t\t...(normal ? [{\n\t\t\t\t\tarrayStride: 12,\n\t\t\t\t\tattributes: [{\n\t\t\t\t\t\tshaderLocation: vertexLocation++,\n\t\t\t\t\t\tformat: \"float32x3\",\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t}],\n\t\t\t\t} satisfies GPUVertexBufferLayout] : []),\n\t\t\t\t...(tangent ? [{\n\t\t\t\t\tarrayStride: 16,\n\t\t\t\t\tattributes: [{\n\t\t\t\t\t\tshaderLocation: vertexLocation++,\n\t\t\t\t\t\tformat: \"float32x4\",\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t}],\n\t\t\t\t} satisfies GPUVertexBufferLayout] : []),\n\t\t\t],\n\t\t},\n\t\tfragment: {\n\t\t\tentryPoint: \"frag\",\n\t\t\tmodule: shaderModule,\n\t\t\ttargets: [{\n\t\t\t\tformat: renderer._format,\n\t\t\t\tblend: {\n\t\t\t\t\tcolor: {\n\t\t\t\t\t\toperation: \"add\",\n\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t},\n\t\t\t\t\talpha: {\n\t\t\t\t\t\toperation: \"add\",\n\t\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\t\tdstFactor: \"one-minus-src-alpha\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\twriteMask: GPUColorWrite.ALL,\n\t\t\t}],\n\t\t},\n\t\tdepthStencil: {\n\t\t\tdepthCompare: \"greater\",\n\t\t\tdepthWriteEnabled: true,\n\t\t\tformat: \"depth32float\",\n\t\t},\n\t\tprimitive: {\n\t\t\tcullMode: \"back\",\n\t\t\tfrontFace: \"ccw\",\n\t\t\ttopology: \"triangle-list\",\n\t\t},\n\t});\n\n\treturn pipeline;\n}\n\nexport function _createShaderCode({\n\ttexCoord,\n\tlightTexCoord,\n\tnormal,\n\ttangent,\n}: ShaderFlags): string {\n\treturn `\nstruct Vertex {\n\t@location(0) positionOS: vec3,\n\t${texCoord ? `@location(1) texCoord: vec2,` : \"\"}\n\t${lightTexCoord ? `@location(2) lightTexCoord: vec2,` : \"\"}\n\t${normal ? `@location(3) normalOS: vec3,` : \"\"}\n\t${normal && tangent ? `@location(4) tangentOS: vec4,` : \"\"}\n}\n\nstruct Varyings {\n\t@builtin(position) positionCS: vec4,\n\t@location(0) positionVS: vec3,\n\t${texCoord ? `@location(1) texCoord: vec2,` : \"\"}\n\t${lightTexCoord ? `@location(2) lightTexCoord: vec2,` : \"\"}\n\t${normal ? `@location(3) normalVS: vec3,` : \"\"}\n\t${normal && tangent ? `@location(4) tangentVS: vec3,` : \"\"}\n\t${normal && tangent ? `@location(5) bitangentVS: vec3,` : \"\"}\n}\n\nstruct PointLight {\n\tpositionWS: vec3,\n\tcolor: vec3,\n}\n\nstruct DirectionalLight {\n\tdirectionWS: vec3,\n\tcolor: vec3,\n}\n\nstruct GlobalUniforms {\n\tmatrixWStoVS: mat4x4,\n\tmatrixVStoCS: mat4x4,\n\tambientLight: vec3,\n\tpointLightCount: u32,\n\tdirectionalLightCount: u32,\n}\n\nstruct MaterialUniforms {\n\tbaseColor: vec3,\n\tpartialCoverage: f32,\n\ttransmission: vec3,\n\tcollimation: f32,\n\tocclusionTextureStrength: f32,\n\troughness: f32,\n\tmetallic: f32,\n\tnormalScale: f32,\n\temissive: vec3,\n\tior: f32,\n}\n\nstruct ObjectUniforms {\n\tmatrixOStoWS: mat4x4,\n\tmatrixOStoWSNormal: mat4x4,\n}\n\n@group(0) @binding(0) var _Global: GlobalUniforms;\n@group(1) @binding(0) var _Material: MaterialUniforms;\n@group(2) @binding(0) var _Object: ObjectUniforms;\n\n@group(0) @binding(1) var _PointLights: array;\n@group(0) @binding(2) var _DirectionalLights: array;\n\n@group(1) @binding(1) var _Sampler: sampler;\n@group(1) @binding(2) var _BaseColorPartialCoverageTexture: texture_2d;\n@group(1) @binding(3) var _OcclusionTexture: texture_2d;\n@group(1) @binding(4) var _RoughnessMetallicTexture: texture_2d;\n@group(1) @binding(5) var _NormalTexture: texture_2d;\n@group(1) @binding(6) var _EmissiveTexture: texture_2d;\n@group(1) @binding(7) var _TransmissionCollimationTexture: texture_2d;\n\nconst INV_PI: f32 = 0.31830987;\n\nfn fresnelSchlick(dotVH: f32, f0: vec3) -> vec3 {\n\tconst f90 = vec3(1.0);\n\treturn f0 + (f90 - f0) * pow(1.0 - dotVH, 5.0);\n}\n\nfn visibilityGGX(dotNL: f32, dotNV: f32, alpha: f32) -> f32 {\n\tlet alphaSquared = alpha * alpha;\n\n\tlet vGGX = dotNL * sqrt(dotNV * dotNV * (1.0 - alphaSquared) + alphaSquared);\n\tlet lGGX = dotNV * sqrt(dotNL * dotNL * (1.0 - alphaSquared) + alphaSquared);\n\tlet GGX = vGGX + lGGX;\n\treturn select(0.0, 0.5 / GGX, GGX > 0.0);\n}\n\nfn distributionGGX(dotNH: f32, alpha: f32) -> f32 {\n\tlet alphaSquared = alpha * alpha;\n\tlet tmp = dotNH * dotNH * (alphaSquared - 1.0) + 1.0;\n\treturn alphaSquared * INV_PI / (tmp * tmp);\n}\n\nfn toneMapAcesNarkowicz(color: vec3) -> vec3 {\n\tconst A: f32 = 2.51;\n\tconst B: f32 = 0.03;\n\tconst C: f32 = 2.43;\n\tconst D: f32 = 0.59;\n\tconst E: f32 = 0.14;\n\treturn saturate((color * (A * color + B)) / (color * (C * color + D) + E));\n}\n\nfn lightOutgoingRadiance(\n\tviewDirectionVS: vec3, actualNormalVS: vec3, dotNV: f32,\n\tbaseColor: vec3, alpha: f32, metallic: f32, f0: vec3,\n\tincomingRadiance: vec3, lightDirectionVS: vec3,\n) -> vec3 {\n\tlet halfVectorVS = normalize(lightDirectionVS + viewDirectionVS);\n\tlet dotVH = saturate(dot(viewDirectionVS, halfVectorVS));\n\tlet dotNH = saturate(dot(actualNormalVS, halfVectorVS));\n\tlet dotNL = saturate(dot(actualNormalVS, lightDirectionVS));\n\n\tlet fresnel = fresnelSchlick(dotVH, f0);\n\tlet visibility = visibilityGGX(dotNL, dotNV, alpha);\n\tlet distribution = distributionGGX(dotNH, alpha);\n\n\tlet scatteredFactor = (1.0 - fresnel) * (1.0 - metallic) * baseColor * INV_PI;\n\tlet reflectedFactor = fresnel * visibility * distribution;\n\n\treturn (scatteredFactor + reflectedFactor) * incomingRadiance * dotNL;\n}\n\nfn screenSpaceMatrixTStoVS(positionVS: vec3, normalVS: vec3, texCoord: vec2) -> mat3x3 {\n\tlet q0 = dpdx(positionVS);\n\tlet q1 = dpdy(positionVS);\n\tlet uv0 = dpdx(texCoord);\n\tlet uv1 = dpdy(texCoord);\n\n\tlet q1perp = cross(q1, normalVS);\n\tlet q0perp = cross(normalVS, q0);\n\n\tlet tangentVS = q1perp * uv0.x + q0perp * uv1.x;\n\tlet bitangentVS = q1perp * uv0.y + q0perp * uv1.y;\n\n\tlet det = max(dot(tangentVS, tangentVS), dot(bitangentVS, bitangentVS));\n\tlet scale = select(0.0, inverseSqrt(det), det != 0.0);\n\n\treturn mat3x3(tangentVS * scale, bitangentVS * scale, normalVS);\n}\n\n@vertex\nfn vert(vertex: Vertex) -> Varyings {\n\tvar output: Varyings;\n\tlet positionWS = (_Object.matrixOStoWS * vec4(vertex.positionOS, 1.0)).xyz;\n\tlet positionVS = (_Global.matrixWStoVS * vec4(positionWS, 1.0)).xyz;\n\tlet positionCS = _Global.matrixVStoCS * vec4(positionVS, 1.0);\n\toutput.positionCS = positionCS;\n\toutput.positionVS = positionVS;\n\t${normal ? `\n\t\tlet normalWS = normalize((_Object.matrixOStoWSNormal * vec4(vertex.normalOS, 0.0)).xyz);\n\t\tlet normalVS = normalize((_Global.matrixWStoVS * vec4(normalWS, 0.0)).xyz);\n\t\toutput.normalVS = normalVS;\n\t\t${tangent ? `\n\t\t\tlet tangentWS = normalize((_Object.matrixOStoWS * vec4(vertex.tangentOS.xyz, 0.0)).xyz);\n\t\t\tlet tangentVS = normalize((_Global.matrixWStoVS * vec4(tangentWS, 0.0)).xyz);\n\t\t\tlet bitangentVS = vertex.tangentOS.w * normalize(cross(normalVS, tangentVS));\n\t\t\toutput.tangentVS = tangentVS;\n\t\t\toutput.bitangentVS = bitangentVS;\n\t\t` : \"\"}\n\t` : \"\"}\n\t${texCoord ? \"output.texCoord = vertex.texCoord;\" : \"\"}\n\t${lightTexCoord ? \"output.lightTexCoord = vertex.lightTexCoord;\" : \"\"}\n\treturn output;\n}\n\n@fragment\nfn frag(fragment: Varyings) -> @location(0) vec4 {\n\tvar baseColor = _Material.baseColor;\n\tvar partialCoverage = _Material.partialCoverage;\n\tvar occlusion = 1.0;\n\tvar roughness = _Material.roughness;\n\tvar metallic = _Material.metallic;\n\tvar normalScale = _Material.normalScale;\n\tvar emissive = _Material.emissive;\n\tvar ior = _Material.ior;\n\t${texCoord ? `\n\t\tlet baseColorPartialCoverageTexel = textureSample(_BaseColorPartialCoverageTexture, _Sampler, fragment.texCoord);\n\t\tbaseColor *= baseColorPartialCoverageTexel.rgb;\n\t\tpartialCoverage *= baseColorPartialCoverageTexel.a;\n\t\tlet roughnessMetallicTexel = textureSample(_RoughnessMetallicTexture, _Sampler, fragment.texCoord);\n\t\troughness *= roughnessMetallicTexel.g;\n\t\tmetallic *= roughnessMetallicTexel.b;\n\t\tlet emissiveTexel = textureSample(_EmissiveTexture, _Sampler, fragment.texCoord);\n\t\temissive *= emissiveTexel.rgb;\n\t` : \"\"}\n\t${lightTexCoord ? `\n\t\tlet occlusionTexel = textureSample(_OcclusionTexture, _Sampler, fragment.lightTexCoord);\n\t\tocclusion += _Material.occlusionTextureStrength * (occlusionTexel.r - 1.0);\n\t` : \"\"}\n\n\tlet positionVS = fragment.positionVS;\n\t${normal ? `\n\t\tlet geometricNormalVS = fragment.normalVS;\n\t` : `\n\t\tlet dPositionVSdx = dpdx(positionVS);\n\t\tlet dPositionVSdy = dpdy(positionVS);\n\t\tlet geometricNormalVS = normalize(cross(dPositionVSdx, dPositionVSdy));\n\t`}\n\t${texCoord ? `\n\t\t${tangent ? `\n\t\t\tlet tangentVS = normalize(fragment.tangentVS);\n\t\t\tlet bitangentVS = normalize(fragment.bitangentVS);\n\t\t\tlet matrixTStoVS = mat3x3(tangentVS, bitangentVS, geometricNormalVS);\n\t\t` : `\n\t\t\tlet matrixTStoVS = screenSpaceMatrixTStoVS(positionVS, geometricNormalVS, fragment.texCoord);\n\t\t`}\n\t\tlet normalTextureTexel = textureSample(_NormalTexture, _Sampler, fragment.texCoord);\n\t\tvar normalTS = normalTextureTexel.xyz * 2.0 - 1.0;\n\t\tnormalTS = vec3(normalTS.xy * _Material.normalScale, normalTS.z);\n\t\tlet actualNormalVS = normalize(matrixTStoVS * normalTS);\n\t` : `\n\t\tlet actualNormalVS = geometricNormalVS;\n\t`}\n\n\tlet viewDirectionVS = normalize(-positionVS);\n\tlet dotNV = saturate(dot(actualNormalVS, viewDirectionVS));\n\tlet alpha = roughness * roughness;\n\n\tvar f0 = vec3(pow((ior - 1.0) / (ior + 1.0), 2.0));\n\tf0 = mix(f0, baseColor, metallic);\n\n\tvar outgoingRadiance = vec3(0.0);\n\n\tfor (var i: u32 = 0; i < _Global.pointLightCount; i++) {\n\t\tlet light = _PointLights[i];\n\n\t\tlet lightPositionVS = (_Global.matrixWStoVS * vec4(light.positionWS, 1.0)).xyz;\n\t\tlet lightDirectionVS = normalize(lightPositionVS - positionVS);\n\t\tlet lightDistance = distance(positionVS, lightPositionVS);\n\t\tlet lightAttenuation = 1.0 / (lightDistance * lightDistance);\n\t\tlet incomingRadiance = light.color * lightAttenuation;\n\n\t\toutgoingRadiance += lightOutgoingRadiance(\n\t\t\tviewDirectionVS, actualNormalVS, dotNV,\n\t\t\tbaseColor, alpha, metallic, f0,\n\t\t\tincomingRadiance, lightDirectionVS,\n\t\t);\n\t}\n\n\tfor (var i: u32 = 0; i < _Global.directionalLightCount; i++) {\n\t\tlet light = _DirectionalLights[i];\n\n\t\tlet lightDirectionVS = normalize((_Global.matrixWStoVS * vec4(light.directionWS, 0.0)).xyz);\n\t\tlet incomingRadiance = light.color;\n\n\t\toutgoingRadiance += lightOutgoingRadiance(\n\t\t\tviewDirectionVS, actualNormalVS, dotNV,\n\t\t\tbaseColor, alpha, metallic, f0,\n\t\t\tincomingRadiance, lightDirectionVS,\n\t\t);\n\t}\n\n\toutgoingRadiance += _Global.ambientLight * baseColor * occlusion;\n\n\tlet toneMappedLinearColor = toneMapAcesNarkowicz(outgoingRadiance);\n\tlet toneMappedSrgbColor = pow(toneMappedLinearColor, vec3(1.0 / 2.2));\n\n\treturn vec4(toneMappedSrgbColor, 1.0);\n}`;\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nexport class _Mapping {\n\ttable: T[];\n\tmap: Map;\n\n\tconstructor() {\n\t\tthis.table = [];\n\t\tthis.map = new Map();\n\t}\n\n\tadd(item: T) {\n\t\tif (this.map.has(item)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst id = this.table.length;\n\t\tthis.table.push(item);\n\t\tthis.map.set(item, id);\n\t}\n\n\tget(item: T): number | undefined {\n\t\treturn this.map.get(item);\n\t}\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { Renderer } from \"../oktaeder\";\n\nexport interface IndexBufferProps {\n\treadonly name?: string;\n\n\treadonly indexFormat: \"uint16\" | \"uint32\";\n\treadonly indexCount: number;\n}\n\nexport interface IndexBufferResizeProps {\n\treadonly indexFormat?: \"uint16\" | \"uint32\";\n\treadonly indexCount?: number;\n}\n\nexport class IndexBuffer {\n\n\tdeclare readonly type: \"IndexBuffer\";\n\t_renderer: Renderer;\n\n\t_name: string;\n\n\t_buffer: GPUBuffer;\n\t_indexFormat: \"uint16\" | \"uint32\";\n\n\tconstructor(renderer: Renderer, {\n\t\tname = \"\",\n\t\tindexFormat,\n\t\tindexCount,\n\t}: IndexBufferProps) {\n\t\tthis._renderer = renderer;\n\n\t\tthis._name = name;\n\n\t\tthis._buffer = renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.INDEX,\n\t\t\tsize: indexCount * indexSize(indexFormat),\n\t\t\tlabel: name,\n\t\t});\n\t\tthis._indexFormat = indexFormat;\n\t}\n\n\t/**\n\t * Destroys owned GPU resources. The index buffer should not be used after\n\t * calling this method.\n\t * @returns `this` for chaining\n\t */\n\tdispose(): IndexBuffer {\n\t\tthis._buffer.destroy();\n\t\treturn this;\n\t}\n\n\tget indexCount(): number {\n\t\treturn this._buffer.size / indexSize(this._indexFormat) | 0;\n\t}\n\n\twriteArray(offset: number, indices: readonly number[]): IndexBuffer {\n\t\tconst array = this._indexFormat === \"uint16\" ? new Uint16Array(indices) : new Uint32Array(indices);\n\t\treturn this.writeTypedArray(offset, array);\n\t}\n\n\twriteTypedArray(offset: number, indices: Uint16Array | Uint32Array): IndexBuffer {\n\t\tif (\n\t\t\tthis._indexFormat === \"uint16\" && !(indices instanceof Uint16Array)\n\t\t\t|| this._indexFormat === \"uint32\" && !(indices instanceof Uint32Array)\n\t\t) {\n\t\t\tthrow new Error(`Cannot write typed array to a mismatched index type. Typed array is of type ${indices.constructor.name}. Index buffer [${this._name}] uses format ${this._indexFormat}`);\n\t\t}\n\t\tthis._renderer._device.queue.writeBuffer(this._buffer, offset * indexSize(this._indexFormat) | 0, indices);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resize the index buffer, discarding currently stored data.\n\t * @param props Desired buffer properties. Any unspecified property will\n\t * stay unchanged.\n\t * @returns `this` for chaining\n\t */\n\tresizeDiscard({\n\t\tindexFormat = this._indexFormat,\n\t\tindexCount = this.indexCount,\n\t}: IndexBufferResizeProps): IndexBuffer {\n\t\tthis._buffer.destroy();\n\n\t\tthis._buffer = this._renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.INDEX,\n\t\t\tsize: indexCount * indexSize(indexFormat),\n\t\t\tlabel: this._name,\n\t\t});\n\t\tthis._indexFormat = indexFormat;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resize the index buffer if it can't hold provided number of indices or\n\t * its index format is smaller than provided, potentially discarding\n\t * currently stored data.\n\t * @param props Desired buffer properties. Any unspecified property will\n\t * be ignored.\n\t * @returns `this` for chaining\n\t */\n\tensureSizeDiscard({\n\t\tindexFormat = this._indexFormat,\n\t\tindexCount = this.indexCount,\n\t}: IndexBufferResizeProps): IndexBuffer {\n\t\tif (this.indexCount >= indexCount && indexSize(this._indexFormat) >= indexSize(indexFormat)) {\n\t\t\treturn this;\n\t\t}\n\t\treturn this.resizeDiscard({\n\t\t\tindexFormat,\n\t\t\tindexCount,\n\t\t});\n\t}\n\n\tget indexFormat(): \"uint16\" | \"uint32\" { return this._indexFormat; }\n\tget indexSize(): number { return indexSize(this._indexFormat); }\n}\n\nObject.defineProperty(IndexBuffer.prototype, \"type\", { value: \"IndexBuffer\" });\n\nexport function isIndexBuffer(value: unknown): value is IndexBuffer {\n\treturn Boolean(value) && (value as IndexBuffer).type === \"IndexBuffer\";\n}\n\nfunction indexSize(indexFormat: \"uint16\" | \"uint32\"): number {\n\tswitch (indexFormat) {\n\t\tcase \"uint16\": return 2;\n\t\tcase \"uint32\": return 4;\n\t}\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { Texture2D } from \".\";\nimport { Color, MaterialProps } from \"../data\";\nimport { Renderer, _BinaryWriter } from \"../oktaeder\";\n\nexport class Material {\n\n\tdeclare readonly type: \"Material\";\n\t_renderer: Renderer;\n\n\t_uniformBuffer: GPUBuffer;\n\t_bindGroup: GPUBindGroup;\n\n\t_name: string;\n\n\treadonly _baseColor: Color;\n\treadonly _partialCoverage: number;\n\treadonly _occlusionTextureStrength: number;\n\treadonly _metallic: number;\n\treadonly _roughness: number;\n\treadonly _normalScale: number;\n\treadonly _emissive: Color;\n\treadonly _transmission: Color;\n\treadonly _collimation: number;\n\treadonly _ior: number;\n\n\treadonly _baseColorPartialCoverageTexture: Texture2D | null;\n\treadonly _occlusionTexture: Texture2D | null;\n\treadonly _roughnessMetallicTexture: Texture2D | null;\n\treadonly _normalTexture: Texture2D | null;\n\treadonly _emissiveTexture: Texture2D | null;\n\treadonly _transmissionCollimationTexture: Texture2D | null;\n\n\treadonly _transparent: boolean;\n\treadonly _doubleSided: boolean;\n\n\tconstructor(renderer: Renderer, {\n\t\tname = \"\",\n\t\tbaseColor,\n\t\tpartialCoverage = 1,\n\t\tocclusionTextureStrength = 1,\n\t\tmetallic = 1,\n\t\troughness = 1,\n\t\tnormalScale = 1,\n\t\temissive,\n\t\ttransmission,\n\t\tcollimation = 1,\n\t\tior = 1.45,\n\t\tbaseColorPartialCoverageTexture = null,\n\t\tocclusionTexture = null,\n\t\troughnessMetallicTexture = null,\n\t\tnormalTexture = null,\n\t\temissiveTexture = null,\n\t\ttransmissionCollimationTexture = null,\n\t\ttransparent = false,\n\t\tdoubleSided = false,\n\t}: MaterialProps) {\n\t\tthis._renderer = renderer;\n\n\t\tthis._name = name;\n\n\t\tthis._baseColor = baseColor !== undefined ? Color.fromObject(baseColor) : Color.white();\n\t\tthis._partialCoverage = partialCoverage;\n\t\tthis._occlusionTextureStrength = occlusionTextureStrength;\n\t\tthis._metallic = metallic;\n\t\tthis._roughness = roughness;\n\t\tthis._normalScale = normalScale;\n\t\tthis._emissive = emissive !== undefined ? Color.fromObject(emissive) : Color.black();\n\t\tthis._transmission = transmission !== undefined ? Color.fromObject(transmission) : Color.black();\n\t\tthis._collimation = collimation;\n\t\tthis._ior = ior;\n\n\t\tthis._baseColorPartialCoverageTexture = baseColorPartialCoverageTexture;\n\t\tthis._occlusionTexture = occlusionTexture;\n\t\tthis._roughnessMetallicTexture = roughnessMetallicTexture;\n\t\tthis._normalTexture = normalTexture;\n\t\tthis._emissiveTexture = emissiveTexture;\n\t\tthis._transmissionCollimationTexture = transmissionCollimationTexture;\n\n\t\tthis._transparent = transparent;\n\t\tthis._doubleSided = doubleSided;\n\n\t\tthis._uniformBuffer = renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM,\n\t\t\tsize: 64,\n\t\t\tlabel: name,\n\t\t});\n\n\t\tconst writer = new _BinaryWriter(64);\n\t\twriter.writeColorF32(this._baseColor);\n\t\twriter.writeF32(this._partialCoverage);\n\t\twriter.writeColorF32(this._transmission);\n\t\twriter.writeF32(this._collimation);\n\t\twriter.writeF32(this._occlusionTextureStrength);\n\t\twriter.writeF32(this._roughness);\n\t\twriter.writeF32(this._metallic);\n\t\twriter.writeF32(this._normalScale);\n\t\twriter.writeColorF32(this._emissive);\n\t\twriter.writeF32(this._ior);\n\n\t\trenderer._device.queue.writeBuffer(this._uniformBuffer, 0, writer.subarray);\n\n\t\tthis._bindGroup = renderer._device.createBindGroup({\n\t\t\tlayout: renderer._materialBindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{ binding: 0, resource: { buffer: this._uniformBuffer, size: 64 } },\n\t\t\t\t{ binding: 1, resource: renderer._sampler },\n\t\t\t\t{ binding: 2, resource: this._baseColorPartialCoverageTexture?._textureView ?? renderer._textureWhite._textureView },\n\t\t\t\t{ binding: 3, resource: this._occlusionTexture?._textureView ?? renderer._textureWhite._textureView },\n\t\t\t\t{ binding: 4, resource: this._roughnessMetallicTexture?._textureView ?? renderer._textureWhite._textureView },\n\t\t\t\t{ binding: 5, resource: this._normalTexture?._textureView ?? renderer._textureNormal._textureView },\n\t\t\t\t{ binding: 6, resource: this._emissiveTexture?._textureView ?? renderer._textureWhite._textureView },\n\t\t\t\t{ binding: 7, resource: this._transmissionCollimationTexture?._textureView ?? renderer._textureBlack._textureView },\n\t\t\t],\n\t\t\tlabel: name,\n\t\t});\n\t}\n\n\t/**\n\t * Destroys owned GPU resources. The index buffer should not be used after\n\t * calling this method.\n\t * @returns `this` for chaining\n\t */\n\tdispose(): Material {\n\t\tthis._uniformBuffer.destroy();\n\t\treturn this;\n\t}\n\n\tgetBaseColor(res: Color): Color {\n\t\treturn res.setObject(this._baseColor);\n\t}\n\n\tget partialCoverage(): number { return this._partialCoverage; }\n\tget occlusionTextureStrength(): number { return this._occlusionTextureStrength; }\n\tget metallic(): number { return this._metallic; }\n\tget roughness(): number { return this._roughness; }\n\tget normalScale(): number { return this._normalScale; }\n\n\tgetEmissive(res: Color): Color {\n\t\treturn res.setObject(this._emissive);\n\t}\n\n\tgetTransmission(res: Color): Color {\n\t\treturn res.setObject(this._transmission);\n\t}\n\n\tget collimation(): number { return this._collimation; }\n\tget ior(): number { return this._ior; }\n\tget baseColorPartialCoverageTexture(): Texture2D | null { return this._baseColorPartialCoverageTexture; }\n\tget occlusionTexture(): Texture2D | null { return this._occlusionTexture; }\n\tget roughnessMetallicTexture(): Texture2D | null { return this._roughnessMetallicTexture; }\n\tget normalTexture(): Texture2D | null { return this._normalTexture; }\n\tget emissiveTexture(): Texture2D | null { return this._emissiveTexture; }\n\tget transmissionCollimationTexture(): Texture2D | null { return this._transmissionCollimationTexture; }\n\n\tget transparent(): boolean { return this._transparent; }\n\tget doubleSided(): boolean { return this._doubleSided; }\n}\n\nObject.defineProperty(Material.prototype, \"type\", { value: \"Material\" });\n\nexport function isMaterial(value: unknown): value is Material {\n\treturn Boolean(value) && (value as Material).type === \"Material\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { Vector2Object, Vector2Tuple } from \"../data\";\nimport { Renderer } from \"../oktaeder\";\n\nexport type Texture2DFormat =\n\t| \"linear\"\n\t| \"srgb\"\n\t| \"hdr\"\n\t| \"depth\"\n\t;\n\nexport interface Texture2DProps {\n\treadonly name?: string;\n\n\treadonly width: number;\n\treadonly height: number;\n\n\treadonly format: Texture2DFormat;\n\n\treadonly usage?: GPUTextureUsageFlags;\n}\n\nexport interface Texture2DResizeProps {\n\treadonly width?: number;\n\treadonly height?: number;\n\treadonly format?: Texture2DFormat;\n\treadonly usage?: GPUTextureUsageFlags;\n}\n\nexport interface Texture2DAdvancedWriteProps {\n\treadonly origin: Vector2Object | Vector2Tuple,\n\treadonly data: BufferSource | SharedArrayBuffer,\n\treadonly bytesPerRow: number,\n\treadonly width: number,\n\treadonly height: number,\n}\n\nexport class Texture2D {\n\n\tdeclare readonly type: \"Texture2D\";\n\t_renderer: Renderer;\n\n\t_name: string;\n\n\t_texture: GPUTexture;\n\t_textureView: GPUTextureView;\n\t_format: Texture2DFormat;\n\n\tconstructor(renderer: Renderer, {\n\t\tname = \"\",\n\t\twidth,\n\t\theight,\n\t\tformat,\n\t\tusage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,\n\t}: Texture2DProps) {\n\t\tthis._renderer = renderer;\n\n\t\tthis._name = name;\n\n\t\tconst gpuFormat = gpuTextureFormat(format);\n\n\t\tthis._renderer = renderer;\n\t\tthis._texture = renderer._device.createTexture({\n\t\t\tusage,\n\t\t\tsize: { width, height },\n\t\t\tformat: gpuFormat,\n\t\t\tlabel: name\n\t\t});\n\t\tthis._textureView = this._texture.createView({\n\t\t\tformat: gpuFormat,\n\t\t\tdimension: \"2d\",\n\t\t\tlabel: `${name}.textureView`,\n\t\t});\n\t\tthis._format = format;\n\t}\n\n\t/**\n\t * Destroys owned GPU resources. The texture should not be used after\n\t * calling this method.\n\t * @returns `this` for chaining\n\t */\n\tdispose(): Texture2D {\n\t\tthis._texture.destroy();\n\t\treturn this;\n\t}\n\n\tget width(): number {\n\t\treturn this._texture.width;\n\t}\n\n\tget height(): number {\n\t\treturn this._texture.height;\n\t}\n\n\tget bytesPerSample(): number {\n\t\treturn sampleSize(this._format);\n\t}\n\n\tget samplesPerPixel(): number {\n\t\treturn sampleCount(this._format);\n\t}\n\n\twriteFull(data: BufferSource | SharedArrayBuffer): Texture2D {\n\t\tconst bytesPerSample = this.bytesPerSample;\n\t\tconst samplesPerPixel = this.samplesPerPixel;\n\t\tconst bytesPerRow = this.width * samplesPerPixel * bytesPerSample;\n\t\tconst byteLength = this.height * bytesPerRow;\n\n\t\tif (data.byteLength !== byteLength) {\n\t\t\tthrow new Error(`Cannot fully write to a texture with different byte length. Source data has byte length of ${data.byteLength}. Texture [${this._name}] is ${this.width}\u00D7${this.height} pixels in size, uses ${this._format} format at ${bytesPerSample} ${bytesPerSample === 1 ? \"byte\" : \"bytes\"} per sample and ${samplesPerPixel} ${samplesPerPixel === 1 ? \"sample\" : \"samples\"} per pixel, which makes its byte length equal to ${byteLength}.`);\n\t\t}\n\n\t\tthis._renderer._device.queue.writeTexture(\n\t\t\t{ texture: this._texture },\n\t\t\tdata,\n\t\t\t{ bytesPerRow },\n\t\t\t{ width: this.width, height: this.height },\n\t\t);\n\t\treturn this;\n\t}\n\n\twritePartial({\n\t\torigin,\n\t\tdata,\n\t\tbytesPerRow,\n\t\twidth,\n\t\theight,\n\t}: Texture2DAdvancedWriteProps): Texture2D {\n\t\tthis._renderer._device.queue.writeTexture(\n\t\t\t{ texture: this._texture, origin },\n\t\t\tdata,\n\t\t\t{ bytesPerRow },\n\t\t\t{ width, height },\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resize the texture and/or change its format, discarding currently stored\n\t * data.\n\t * @param props Desired texture properties. Any unspecified property will\n\t * stay unchanged.\n\t * @returns `this` for chaining\n\t */\n\tresizeDiscard({\n\t\twidth = this._texture.width,\n\t\theight = this._texture.height,\n\t\tformat = this._format,\n\t\tusage = this._texture.usage,\n\t}: Texture2DResizeProps): Texture2D {\n\t\tthis._texture.destroy();\n\n\t\tconst gpuFormat = gpuTextureFormat(format);\n\n\t\tthis._texture = this._renderer._device.createTexture({\n\t\t\tusage,\n\t\t\tsize: { width, height },\n\t\t\tformat: gpuFormat,\n\t\t\tlabel: this._name\n\t\t});\n\t\tthis._textureView = this._texture.createView({\n\t\t\tformat: gpuFormat,\n\t\t\tdimension: \"2d\",\n\t\t\tlabel: `${this._name}.textureView`,\n\t\t});\n\t\treturn this;\n\t}\n}\n\nObject.defineProperty(Texture2D.prototype, \"type\", { value: \"Texture2D\" });\n\nexport function isTexture2D(value: unknown): value is Texture2D {\n\treturn Boolean(value) && (value as Texture2D).type === \"Texture2D\";\n}\n\nfunction gpuTextureFormat(format: Texture2DFormat): GPUTextureFormat {\n\tswitch (format) {\n\t\tcase \"linear\": return \"rgba8unorm\";\n\t\tcase \"srgb\": return \"rgba8unorm-srgb\";\n\t\tcase \"hdr\": return \"rgba16float\";\n\t\tcase \"depth\": return \"depth32float\";\n\t}\n}\n\nfunction sampleCount(format: Texture2DFormat): number {\n\tswitch (format) {\n\t\tcase \"linear\": return 4;\n\t\tcase \"srgb\": return 4;\n\t\tcase \"hdr\": return 4;\n\t\tcase \"depth\": return 1;\n\t}\n}\n\nfunction sampleSize(format: Texture2DFormat): number {\n\tswitch (format) {\n\t\tcase \"linear\": return 1;\n\t\tcase \"srgb\": return 1;\n\t\tcase \"hdr\": return 2;\n\t\tcase \"depth\": return 4;\n\t}\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nimport { Vector2Object, Vector3Object, Vector4Object } from \"../data\";\nimport { Renderer } from \"../oktaeder\";\n\nexport const POSITION_SIZE = 12;\nexport const TEX_COORD_SIZE = 8;\nexport const LIGHT_TEX_COORD_SIZE = 8;\nexport const NORMAL_SIZE = 12;\nexport const TANGENT_SIZE = 16;\n\nexport interface VertexBufferProps {\n\treadonly name?: string;\n\n\treadonly vertexCount: number;\n\n\treadonly texCoord?: boolean;\n\treadonly lightTexCoord?: boolean;\n\treadonly normal?: boolean;\n\treadonly tangent?: boolean;\n}\n\nexport interface VertexBufferResizeProps {\n\treadonly vertexCount?: number;\n\n\treadonly texCoord?: boolean;\n\treadonly lightTexCoord?: boolean;\n\treadonly normal?: boolean;\n\treadonly tangent?: boolean;\n}\n\nexport interface VertexBufferWriteArrayProps {\n\treadonly position?: readonly Vector3Object[];\n\treadonly texCoord?: readonly Vector2Object[];\n\treadonly lightTexCoord?: readonly Vector2Object[];\n\treadonly normal?: readonly Vector3Object[];\n\treadonly tangent?: readonly Vector4Object[];\n}\n\nexport interface VertexBufferWriteTypedArrayProps {\n\treadonly position?: Float32Array;\n\treadonly texCoord?: Float32Array;\n\treadonly lightTexCoord?: Float32Array;\n\treadonly normal?: Float32Array;\n\treadonly tangent?: Float32Array;\n}\n\nexport class VertexBuffer {\n\n\tdeclare readonly type: \"VertexBuffer\";\n\t_renderer: Renderer;\n\n\t_name: string;\n\n\t_positionBuffer: GPUBuffer;\n\t_texCoordBuffer: GPUBuffer | null;\n\t_lightTexCoordBuffer: GPUBuffer | null;\n\t_normalBuffer: GPUBuffer | null;\n\t_tangentBuffer: GPUBuffer | null;\n\n\tconstructor(renderer: Renderer, {\n\t\tname = \"\",\n\t\tvertexCount,\n\t\ttexCoord = false,\n\t\tlightTexCoord = false,\n\t\tnormal = false,\n\t\ttangent = false,\n\t}: VertexBufferProps) {\n\t\tthis._renderer = renderer;\n\n\t\tthis._name = name;\n\n\t\tthis._positionBuffer = renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\tsize: vertexCount * POSITION_SIZE,\n\t\t\tlabel: `${this._name}.position`,\n\t\t});\n\n\t\tthis._texCoordBuffer = texCoord ? renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\tsize: vertexCount * TEX_COORD_SIZE,\n\t\t\tlabel: `${this._name}.texCoord`,\n\t\t}) : null;\n\n\t\tthis._lightTexCoordBuffer = lightTexCoord ? renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\tsize: vertexCount * LIGHT_TEX_COORD_SIZE,\n\t\t\tlabel: `${this._name}.lightTexCoord`,\n\t\t}) : null;\n\n\t\tthis._normalBuffer = normal ? renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\tsize: vertexCount * NORMAL_SIZE,\n\t\t\tlabel: `${this._name}.normal`,\n\t\t}) : null;\n\n\t\tthis._tangentBuffer = tangent ? renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\tsize: vertexCount * TANGENT_SIZE,\n\t\t\tlabel: `${this._name}.tangent`,\n\t\t}) : null;\n\t}\n\n\t/**\n\t * Destroys owned GPU resources. The vertex buffer should not be used after\n\t * calling this method.\n\t * @returns `this` for chaining\n\t */\n\tdispose(): VertexBuffer {\n\t\tthis._positionBuffer.destroy();\n\t\tthis._texCoordBuffer?.destroy();\n\t\tthis._lightTexCoordBuffer?.destroy();\n\t\tthis._normalBuffer?.destroy();\n\t\tthis._tangentBuffer?.destroy();\n\t\treturn this;\n\t}\n\n\tget vertexCount(): number {\n\t\treturn this._positionBuffer.size / POSITION_SIZE | 0;\n\t}\n\n\tget hasTexCoord(): boolean {\n\t\treturn this._texCoordBuffer !== null;\n\t}\n\n\tget hasLightTexCoord(): boolean {\n\t\treturn this._lightTexCoordBuffer !== null;\n\t}\n\n\tget hasNormal(): boolean {\n\t\treturn this._normalBuffer !== null;\n\t}\n\n\tget hasTangent(): boolean {\n\t\treturn this._tangentBuffer !== null;\n\t}\n\n\twriteArray(offset: number, {\n\t\tposition,\n\t\ttexCoord,\n\t\tlightTexCoord,\n\t\tnormal,\n\t\ttangent,\n\t}: VertexBufferWriteArrayProps): VertexBuffer {\n\n\t\tif (position !== undefined) {\n\t\t\tconst array = new Float32Array(position.length * 3);\n\t\t\tfor (let vi = 0, ptr = 0; vi < position.length; ++vi) {\n\t\t\t\tconst vertex = position[vi]!;\n\t\t\t\tarray[ptr++] = vertex.x;\n\t\t\t\tarray[ptr++] = vertex.y;\n\t\t\t\tarray[ptr++] = vertex.z;\n\t\t\t}\n\t\t\tthis._renderer._device.queue.writeBuffer(this._positionBuffer, offset * POSITION_SIZE | 0, array);\n\t\t}\n\n\t\tif (texCoord !== undefined) {\n\t\t\tif (this._texCoordBuffer === null) {\n\t\t\t\tthrow new Error(`Cannot write array to a missing vertex attribute. Tried writing texture coordinates and vertex buffer [${this._name}] does not have texture coordinates.`);\n\t\t\t}\n\t\t\tconst array = new Float32Array(texCoord.length * 2);\n\t\t\tfor (let vi = 0, ptr = 0; vi < texCoord.length; ++vi) {\n\t\t\t\tconst vertex = texCoord[vi]!;\n\t\t\t\tarray[ptr++] = vertex.x;\n\t\t\t\tarray[ptr++] = vertex.y;\n\t\t\t}\n\t\t\tthis._renderer._device.queue.writeBuffer(this._texCoordBuffer, offset * TEX_COORD_SIZE | 0, array);\n\t\t}\n\n\t\tif (lightTexCoord !== undefined) {\n\t\t\tif (this._lightTexCoordBuffer === null) {\n\t\t\t\tthrow new Error(`Cannot write array to a missing vertex attribute. Tried writing light texture coordinates and vertex buffer [${this._name}] does not have light texture coordinates.`);\n\t\t\t}\n\t\t\tconst array = new Float32Array(lightTexCoord.length * 2);\n\t\t\tfor (let vi = 0, ptr = 0; vi < lightTexCoord.length; ++vi) {\n\t\t\t\tconst vertex = lightTexCoord[vi]!;\n\t\t\t\tarray[ptr++] = vertex.x;\n\t\t\t\tarray[ptr++] = vertex.y;\n\t\t\t}\n\t\t\tthis._renderer._device.queue.writeBuffer(this._lightTexCoordBuffer, offset * LIGHT_TEX_COORD_SIZE | 0, array);\n\t\t}\n\n\t\tif (normal !== undefined) {\n\t\t\tif (this._normalBuffer === null) {\n\t\t\t\tthrow new Error(`Cannot write array to a missing vertex attribute. Tried writing normals and vertex buffer [${this._name}] does not have normals.`);\n\t\t\t}\n\t\t\tconst array = new Float32Array(normal.length * 3);\n\t\t\tfor (let vi = 0, ptr = 0; vi < normal.length; ++vi) {\n\t\t\t\tconst vertex = normal[vi]!;\n\t\t\t\tarray[ptr++] = vertex.x;\n\t\t\t\tarray[ptr++] = vertex.y;\n\t\t\t\tarray[ptr++] = vertex.z;\n\t\t\t}\n\t\t\tthis._renderer._device.queue.writeBuffer(this._normalBuffer, offset * NORMAL_SIZE | 0, array);\n\t\t}\n\n\t\tif (tangent !== undefined) {\n\t\t\tif (this._tangentBuffer === null) {\n\t\t\t\tthrow new Error(`Cannot write array to a missing vertex attribute. Tried writing tangents and vertex buffer [${this._name}] does not have tangents.`);\n\t\t\t}\n\t\t\tconst array = new Float32Array(tangent.length * 4);\n\t\t\tfor (let vi = 0, ptr = 0; vi < tangent.length; ++vi) {\n\t\t\t\tconst vertex = tangent[vi]!;\n\t\t\t\tarray[ptr++] = vertex.x;\n\t\t\t\tarray[ptr++] = vertex.y;\n\t\t\t\tarray[ptr++] = vertex.z;\n\t\t\t\tarray[ptr++] = vertex.w;\n\t\t\t}\n\t\t\tthis._renderer._device.queue.writeBuffer(this._tangentBuffer, offset * TANGENT_SIZE | 0, array);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\twriteTypedArray(offset: number, {\n\t\tposition,\n\t\ttexCoord,\n\t\tlightTexCoord,\n\t\tnormal,\n\t\ttangent,\n\t}: VertexBufferWriteTypedArrayProps): VertexBuffer {\n\n\t\tif (position !== undefined) {\n\t\t\tthis._renderer._device.queue.writeBuffer(this._positionBuffer, offset * POSITION_SIZE | 0, position);\n\t\t}\n\n\t\tif (texCoord !== undefined) {\n\t\t\tif (this._texCoordBuffer === null) {\n\t\t\t\tthrow new Error(`Cannot write typed array to a missing vertex attribute. Tried writing texture coordinates and vertex buffer [${this._name}] does not have texture coordinates.`);\n\t\t\t}\n\t\t\tthis._renderer._device.queue.writeBuffer(this._texCoordBuffer, offset * TEX_COORD_SIZE | 0, texCoord);\n\t\t}\n\n\t\tif (lightTexCoord !== undefined) {\n\t\t\tif (this._lightTexCoordBuffer === null) {\n\t\t\t\tthrow new Error(`Cannot write typed array to a missing vertex attribute. Tried writing light texture coordinates and vertex buffer [${this._name}] does not have light texture coordinates.`);\n\t\t\t}\n\t\t\tthis._renderer._device.queue.writeBuffer(this._lightTexCoordBuffer, offset * LIGHT_TEX_COORD_SIZE | 0, lightTexCoord);\n\t\t}\n\n\t\tif (normal !== undefined) {\n\t\t\tif (this._normalBuffer === null) {\n\t\t\t\tthrow new Error(`Cannot write typed array to a missing vertex attribute. Tried writing normals and vertex buffer [${this._name}] does not have normals.`);\n\t\t\t}\n\t\t\tthis._renderer._device.queue.writeBuffer(this._normalBuffer, offset * NORMAL_SIZE | 0, normal);\n\t\t}\n\n\t\tif (tangent !== undefined) {\n\t\t\tif (this._tangentBuffer === null) {\n\t\t\t\tthrow new Error(`Cannot write typed array to a missing vertex attribute. Tried writing tangents and vertex buffer [${this._name}] does not have tangents.`);\n\t\t\t}\n\t\t\tthis._renderer._device.queue.writeBuffer(this._tangentBuffer, offset * TANGENT_SIZE | 0, tangent);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resize the vertex buffer and/or add or remove vertex attributes,\n\t * discarding currently stored data.\n\t * @param props Desired buffer properties. Any unspecified property will\n\t * stay unchanged.\n\t * @returns `this` for chaining\n\t */\n\tresizeDiscard({\n\t\tvertexCount = this.vertexCount,\n\t\ttexCoord = this.hasTexCoord,\n\t\tlightTexCoord = this.hasLightTexCoord,\n\t\tnormal = this.hasNormal,\n\t\ttangent = this.hasTangent,\n\t}: VertexBufferResizeProps): VertexBuffer {\n\n\t\tthis._positionBuffer.destroy();\n\t\tthis._texCoordBuffer?.destroy();\n\t\tthis._lightTexCoordBuffer?.destroy();\n\t\tthis._normalBuffer?.destroy();\n\t\tthis._tangentBuffer?.destroy();\n\n\t\tthis._positionBuffer = this._renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\tsize: vertexCount * POSITION_SIZE,\n\t\t\tlabel: `${this._name}.position`,\n\t\t});\n\n\t\tthis._texCoordBuffer = texCoord ? this._renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\tsize: vertexCount * TEX_COORD_SIZE,\n\t\t\tlabel: `${this._name}.texCoord`,\n\t\t}) : null;\n\n\t\tthis._lightTexCoordBuffer = lightTexCoord ? this._renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\tsize: vertexCount * LIGHT_TEX_COORD_SIZE,\n\t\t\tlabel: `${this._name}.lightTexCoord`,\n\t\t}) : null;\n\n\t\tthis._normalBuffer = normal ? this._renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\tsize: vertexCount * NORMAL_SIZE,\n\t\t\tlabel: `${this._name}.normal`,\n\t\t}) : null;\n\n\t\tthis._tangentBuffer = tangent ? this._renderer._device.createBuffer({\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\tsize: vertexCount * TANGENT_SIZE,\n\t\t\tlabel: `${this._name}.tangent`,\n\t\t}) : null;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resize the vertex buffer and/or add vertex attributes if it can't hold\n\t * provided number of vertices or doesn't have provided attributes,\n\t * potentially discarding currently stored data.\n\t * @param props Desired buffer properties. Any unspecified property will be\n\t * ignored.\n\t * @returns `this` for chaining\n\t */\n\tensureSizeDiscard({\n\t\tvertexCount = this.vertexCount,\n\t\ttexCoord = this.hasTexCoord,\n\t\tlightTexCoord = this.hasLightTexCoord,\n\t\tnormal = this.hasNormal,\n\t\ttangent = this.hasTangent,\n\t}): VertexBuffer {\n\t\tconst currentVertexCount = this.vertexCount;\n\n\t\tif (currentVertexCount < vertexCount) {\n\t\t\tthis._positionBuffer.destroy();\n\t\t\tthis._positionBuffer = this._renderer._device.createBuffer({\n\t\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\t\tsize: vertexCount * POSITION_SIZE,\n\t\t\t\tlabel: `${this._name}.position`,\n\t\t\t});\n\t\t}\n\n\t\tif (currentVertexCount < vertexCount || texCoord && !this.hasTexCoord) {\n\t\t\tthis._texCoordBuffer?.destroy();\n\t\t\tthis._texCoordBuffer = this._renderer._device.createBuffer({\n\t\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\t\tsize: vertexCount * TEX_COORD_SIZE,\n\t\t\t\tlabel: `${this._name}.texCoord`,\n\t\t\t});\n\t\t}\n\n\t\tif (currentVertexCount < vertexCount || lightTexCoord && !this.hasLightTexCoord) {\n\t\t\tthis._lightTexCoordBuffer?.destroy();\n\t\t\tthis._lightTexCoordBuffer = this._renderer._device.createBuffer({\n\t\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\t\tsize: vertexCount * LIGHT_TEX_COORD_SIZE,\n\t\t\t\tlabel: `${this._name}.lightTexCoord`,\n\t\t\t});\n\t\t}\n\n\t\tif (currentVertexCount < vertexCount || normal && !this.hasNormal) {\n\t\t\tthis._normalBuffer?.destroy();\n\t\t\tthis._normalBuffer = this._renderer._device.createBuffer({\n\t\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\t\tsize: vertexCount * NORMAL_SIZE,\n\t\t\t\tlabel: `${this._name}.normal`,\n\t\t\t});\n\t\t}\n\n\t\tif (currentVertexCount < vertexCount || tangent && !this.hasTangent) {\n\t\t\tthis._tangentBuffer?.destroy();\n\t\t\tthis._tangentBuffer = this._renderer._device.createBuffer({\n\t\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,\n\t\t\t\tsize: vertexCount * TANGENT_SIZE,\n\t\t\t\tlabel: `${this._name}.tangent`,\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n}\n\nObject.defineProperty(VertexBuffer.prototype, \"type\", { value: \"VertexBuffer\" });\n\nexport function isVertexBuffer(value: unknown): value is VertexBuffer {\n\treturn Boolean(value) && (value as VertexBuffer).type === \"VertexBuffer\";\n}\n", "/*!\n * This Source Code Form is subject to the terms of the Mozilla Public License,\n * v. 2.0. If a copy of the MPL was not distributed with this file, You can\n * obtain one at http://mozilla.org/MPL/2.0/.\n */\n\nexport * from \"./_BinaryWriter\";\nexport * from \"./geometry\";\nexport * from \"./shader\";\n\nimport { _BinaryWriter as BinaryWriter } from \"./_BinaryWriter\";\nimport { _Mapping as Mapping } from \"./_Mapping\";\nimport { Camera, DynamicMaterial, MaterialProps, Matrix4x4, Node, Scene, Vector3, isDirectionalLight, isDynamicMaterial, isPointLight, preOrder } from \"./data\";\nimport { IndexBuffer, IndexBufferProps, Material, Texture2D, Texture2DProps, VertexBuffer, VertexBufferProps, isMaterial } from \"./resources\";\nimport { GLOBAL_UNIFORMS_SIZE, MATERIAL_UNIFORMS_SIZE, OBJECT_UNIFORMS_SIZE, ShaderFlagKey, ShaderFlags, _createPipeline, _shaderFlagsKey } from \"./shader\";\n\nconst _matrixOStoWSNormal = new Matrix4x4(\n\tNaN, NaN, NaN, NaN,\n\tNaN, NaN, NaN, NaN,\n\tNaN, NaN, NaN, NaN,\n\tNaN, NaN, NaN, NaN,\n);\n\nconst _matrixWStoVS = new Matrix4x4(\n\tNaN, NaN, NaN, NaN,\n\tNaN, NaN, NaN, NaN,\n\tNaN, NaN, NaN, NaN,\n\tNaN, NaN, NaN, NaN,\n);\n\nconst _matrixVStoCS = new Matrix4x4(\n\tNaN, NaN, NaN, NaN,\n\tNaN, NaN, NaN, NaN,\n\tNaN, NaN, NaN, NaN,\n\tNaN, NaN, NaN, NaN,\n);\n\nconst _directionWS = new Vector3(NaN, NaN, NaN);\nconst _positionWS = new Vector3(NaN, NaN, NaN);\n\nexport class Renderer {\n\n\t_adapter: GPUAdapter;\n\t_device: GPUDevice;\n\t_context: GPUCanvasContext;\n\t_format: GPUTextureFormat;\n\n\t/** 1\u00D71 rgba8unorm texture of [255, 255, 255, 255] */\n\t_textureWhite: Texture2D;\n\t/** 1\u00D71 rgba8unorm texture of [0, 0, 0, 255] */\n\t_textureBlack: Texture2D;\n\t/** 1\u00D71 rgba8unorm texture of [128, 128, 255, 255] */\n\t_textureNormal: Texture2D;\n\n\t_depthBuffer: Texture2D;\n\n\t_globalBindGroupLayout: GPUBindGroupLayout;\n\t_materialBindGroupLayout: GPUBindGroupLayout;\n\t_objectBindGroupLayout: GPUBindGroupLayout;\n\t_pipelineLayout: GPUPipelineLayout;\n\n\t_pipelineCache: Map;\n\n\t_uniformWriter: BinaryWriter;\n\t_uniformBuffer: GPUBuffer;\n\n\t_lightWriter: BinaryWriter;\n\t_pointLightBuffer: GPUBuffer;\n\t_directionalLightBuffer: GPUBuffer;\n\n\t_sampler: GPUSampler;\n\n\t_globalBindGroup: GPUBindGroup;\n\t_objectBindGroup: GPUBindGroup;\n\n\t/**\n\t * This constructor is intended primarily for internal use. Consider using\n\t * `Renderer.createIndexBuffer` instead.\n\t */\n\tprivate constructor(\n\t\tadapter: GPUAdapter,\n\t\tdevice: GPUDevice,\n\t\tcontext: GPUCanvasContext,\n\t\tformat: GPUTextureFormat,\n\t) {\n\t\tthis._adapter = adapter;\n\t\tthis._device = device;\n\t\tthis._context = context;\n\t\tthis._format = format;\n\n\t\tthis._textureWhite = new Texture2D(this, {\n\t\t\tname: \"White\",\n\t\t\twidth: 1,\n\t\t\theight: 1,\n\t\t\tformat: \"linear\",\n\t\t});\n\t\tthis._textureWhite.writeFull(new Uint8Array([255, 255, 255, 255]));\n\n\t\tthis._textureBlack = new Texture2D(this, {\n\t\t\tname: \"Black\",\n\t\t\twidth: 1,\n\t\t\theight: 1,\n\t\t\tformat: \"linear\",\n\t\t});\n\t\tthis._textureBlack.writeFull(new Uint8Array([0, 0, 0, 255]));\n\n\t\tthis._textureNormal = new Texture2D(this, {\n\t\t\tname: \"Normal\",\n\t\t\twidth: 1,\n\t\t\theight: 1,\n\t\t\tformat: \"linear\",\n\t\t});\n\t\tthis._textureNormal.writeFull(new Uint8Array([128, 128, 255, 255]));\n\n\t\tconst framebufferTexture = this._context.getCurrentTexture();\n\t\tthis._depthBuffer = new Texture2D(this, {\n\t\t\tname: \"Depth Buffer\",\n\t\t\twidth: framebufferTexture.width,\n\t\t\theight: framebufferTexture.height,\n\t\t\tformat: \"depth\",\n\t\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT,\n\t\t});\n\n\t\tthis._globalBindGroupLayout = device.createBindGroupLayout({\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: {\n\t\t\t\t\t\thasDynamicOffset: true,\n\t\t\t\t\t\ttype: \"uniform\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: {\n\t\t\t\t\t\ttype: \"read-only-storage\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: {\n\t\t\t\t\t\ttype: \"read-only-storage\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tlabel: \"Global\",\n\t\t});\n\t\tthis._materialBindGroupLayout = device.createBindGroupLayout({\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tbuffer: {\n\t\t\t\t\t\thasDynamicOffset: true,\n\t\t\t\t\t\ttype: \"uniform\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\tsampler: { type: \"filtering\" },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: {\n\t\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\t\tviewDimension: \"2d\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: {\n\t\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\t\tviewDimension: \"2d\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: {\n\t\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\t\tviewDimension: \"2d\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: {\n\t\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\t\tviewDimension: \"2d\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: {\n\t\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\t\tviewDimension: \"2d\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\t\ttexture: {\n\t\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\t\tviewDimension: \"2d\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tlabel: \"Material\",\n\t\t});\n\t\tthis._objectBindGroupLayout = device.createBindGroupLayout({\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tvisibility: GPUShaderStage.VERTEX,\n\t\t\t\t\tbuffer: {\n\t\t\t\t\t\thasDynamicOffset: true,\n\t\t\t\t\t\ttype: \"uniform\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t\tlabel: \"Object\",\n\t\t});\n\n\t\tthis._pipelineLayout = device.createPipelineLayout({\n\t\t\tbindGroupLayouts: [\n\t\t\t\tthis._globalBindGroupLayout,\n\t\t\t\tthis._materialBindGroupLayout,\n\t\t\t\tthis._objectBindGroupLayout,\n\t\t\t],\n\t\t});\n\n\t\tthis._pipelineCache = new Map();\n\n\t\tthis._uniformWriter = new BinaryWriter();\n\t\tthis._uniformBuffer = device.createBuffer({\n\t\t\tsize: 4 * 1024 * 1024,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM,\n\t\t\tlabel: \"Uniform\",\n\t\t});\n\n\t\tthis._lightWriter = new BinaryWriter();\n\t\tthis._pointLightBuffer = device.createBuffer({\n\t\t\tsize: 1024 * 32,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE,\n\t\t});\n\t\tthis._directionalLightBuffer = device.createBuffer({\n\t\t\tsize: 1024 * 32,\n\t\t\tusage: GPUBufferUsage.COPY_DST | GPUBufferUsage.STORAGE,\n\t\t});\n\n\t\tthis._sampler = device.createSampler({\n\t\t\taddressModeU: \"repeat\",\n\t\t\taddressModeV: \"repeat\",\n\t\t\taddressModeW: \"repeat\",\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\",\n\t\t\tmipmapFilter: \"linear\",\n\t\t\tmaxAnisotropy: 16,\n\t\t});\n\n\t\tthis._globalBindGroup = device.createBindGroup({\n\t\t\tlayout: this._globalBindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{ binding: 0, resource: { buffer: this._uniformBuffer, size: GLOBAL_UNIFORMS_SIZE } },\n\t\t\t\t{ binding: 1, resource: { buffer: this._pointLightBuffer } },\n\t\t\t\t{ binding: 2, resource: { buffer: this._directionalLightBuffer } },\n\t\t\t],\n\t\t\tlabel: \"Global\",\n\t\t});\n\t\tthis._objectBindGroup = device.createBindGroup({\n\t\t\tlayout: this._objectBindGroupLayout,\n\t\t\tentries: [\n\t\t\t\t{ binding: 0, resource: { buffer: this._uniformBuffer, size: OBJECT_UNIFORMS_SIZE } },\n\t\t\t],\n\t\t\tlabel: \"Object\",\n\t\t});\n\t}\n\n\tstatic async init(canvas: HTMLCanvasElement): Promise {\n\t\tif (!navigator.gpu) {\n\t\t\tthrow new Error(\"WebGPU is not supported\");\n\t\t}\n\n\t\tconst adapter = await navigator.gpu.requestAdapter({\n\t\t\tpowerPreference: \"high-performance\",\n\t\t});\n\t\tif (adapter === null) {\n\t\t\tthrow new Error(\"GPUAdapter is not available\");\n\t\t}\n\n\t\tconst device = await adapter.requestDevice();\n\n\t\tconst context = canvas.getContext(\"webgpu\");\n\t\tif (context === null) {\n\t\t\tthrow new Error(\"GPUCanvasContext is not available\");\n\t\t}\n\n\t\tconst format = navigator.gpu.getPreferredCanvasFormat();\n\t\tcontext.configure({ device, format });\n\n\t\treturn new Renderer(adapter, device, context, format);\n\t}\n\n\t/**\n\t * Disposes resources internal to the renderer. Doesn't dispose any objects\n\t * created with this renderer. The renderer should not be used after calling\n\t * this method.\n\t * @returns `this` for chaining\n\t */\n\tdispose(): Renderer {\n\t\tthis._textureWhite.dispose();\n\t\tthis._textureBlack.dispose();\n\t\tthis._textureNormal.dispose();\n\t\tthis._depthBuffer.dispose();\n\t\tthis._uniformBuffer.destroy();\n\t\tthis._directionalLightBuffer.destroy();\n\t\tthis._pointLightBuffer.destroy();\n\t\treturn this;\n\t}\n\n\tcreateIndexBuffer(props: IndexBufferProps): IndexBuffer {\n\t\treturn new IndexBuffer(this, props);\n\t}\n\n\tcreateMaterial(props: MaterialProps): Material {\n\t\treturn new Material(this, props);\n\t}\n\n\tcreateTexture(props: Texture2DProps): Texture2D {\n\t\treturn new Texture2D(this, props);\n\t}\n\n\tcreateVertexBuffer(props: VertexBufferProps): VertexBuffer {\n\t\treturn new VertexBuffer(this, props);\n\t}\n\n\t_getOrCreatePipeline(flags: ShaderFlags): GPURenderPipeline {\n\t\tconst key = _shaderFlagsKey(flags);\n\n\t\tlet pipeline = this._pipelineCache.get(key);\n\t\tif (pipeline !== undefined) {\n\t\t\treturn pipeline;\n\t\t}\n\n\t\tpipeline = _createPipeline(this, flags);\n\t\tthis._pipelineCache.set(key, pipeline);\n\t\treturn pipeline;\n\t}\n\n\trender(scene: Scene, camera: Camera): Renderer {\n\t\tconst cameraNode = camera._node;\n\t\tif (cameraNode === null) {\n\t\t\tthrow new Error(`Cannot render with a detached camera. Camera [${camera._name}] is not attached to a node.`);\n\t\t}\n\n\t\tconst { width, height } = this._context.getCurrentTexture();\n\t\tif (this._depthBuffer.width !== width || this._depthBuffer.height !== height) {\n\t\t\tthis._depthBuffer.resizeDiscard({\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t});\n\t\t}\n\n\t\tconst encoder = this._device.createCommandEncoder();\n\n\t\tconst pass = encoder.beginRenderPass({\n\t\t\tcolorAttachments: [{\n\t\t\t\tview: this._context.getCurrentTexture().createView(),\n\t\t\t\tloadOp: \"clear\",\n\t\t\t\tstoreOp: \"store\",\n\t\t\t}],\n\t\t\tdepthStencilAttachment: {\n\t\t\t\tview: this._depthBuffer._textureView,\n\t\t\t\tdepthClearValue: 0,\n\t\t\t\tdepthLoadOp: \"clear\",\n\t\t\t\tdepthStoreOp: \"store\",\n\t\t\t},\n\t\t});\n\n\t\tthis._uniformWriter.clear();\n\n\t\t// gather dynamic materials\n\n\t\tconst dynamicMaterialMapping = new Mapping();\n\t\tfor (const node of preOrder(scene._nodes)) {\n\t\t\tfor (const material of node._materials) {\n\t\t\t\tif (isDynamicMaterial(material)) {\n\t\t\t\t\tdynamicMaterialMapping.add(material);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst dynamicMaterialBindGroups = dynamicMaterialMapping.table.map((material) => {\n\t\t\tconst offset = this._uniformWriter._length;\n\t\t\tthis._uniformWriter.writeColorF32(material._baseColor);\n\t\t\tthis._uniformWriter.writeF32(material._partialCoverage);\n\t\t\tthis._uniformWriter.writeColorF32(material._transmission);\n\t\t\tthis._uniformWriter.writeF32(material._collimation);\n\t\t\tthis._uniformWriter.writeF32(material._occlusionTextureStrength);\n\t\t\tthis._uniformWriter.writeF32(material._roughness);\n\t\t\tthis._uniformWriter.writeF32(material._metallic);\n\t\t\tthis._uniformWriter.writeF32(material._normalScale);\n\t\t\tthis._uniformWriter.writeColorF32(material._emissive);\n\t\t\tthis._uniformWriter.writeF32(material._ior);\n\t\t\tthis._uniformWriter.padToAlign(256);\n\n\t\t\tconst bindGroup = this._device.createBindGroup({\n\t\t\t\tlayout: this._materialBindGroupLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{ binding: 0, resource: { buffer: this._uniformBuffer, size: MATERIAL_UNIFORMS_SIZE } },\n\t\t\t\t\t{ binding: 1, resource: this._sampler },\n\t\t\t\t\t{ binding: 2, resource: material._baseColorPartialCoverageTexture?._textureView ?? this._textureWhite._textureView },\n\t\t\t\t\t{ binding: 3, resource: material._occlusionTexture?._textureView ?? this._textureWhite._textureView },\n\t\t\t\t\t{ binding: 4, resource: material._roughnessMetallicTexture?._textureView ?? this._textureWhite._textureView },\n\t\t\t\t\t{ binding: 5, resource: material._normalTexture?._textureView ?? this._textureNormal._textureView },\n\t\t\t\t\t{ binding: 6, resource: material._emissiveTexture?._textureView ?? this._textureWhite._textureView },\n\t\t\t\t\t{ binding: 7, resource: material._transmissionCollimationTexture?._textureView ?? this._textureBlack._textureView },\n\t\t\t\t],\n\t\t\t\tlabel: material._name,\n\t\t\t});\n\t\t\treturn { offset, bindGroup };\n\t\t});\n\n\t\t// gather objects\n\n\t\tconst objectMapping = new Mapping();\n\t\tfor (const node of preOrder(scene._nodes)) {\n\t\t\tif (node._mesh !== null) {\n\t\t\t\tobjectMapping.add(node);\n\t\t\t}\n\t\t}\n\n\t\tconst objectOffsets = objectMapping.table.map((object) => {\n\t\t\tconst offset = this._uniformWriter._length;\n\t\t\tobject._updateWorldMatrix();\n\t\t\tthis._uniformWriter.writeMatrix4x4(object._worldMatrix);\n\t\t\tthis._uniformWriter.writeMatrix4x4(_matrixOStoWSNormal.setObject(object._worldMatrix).inverseTransposeAffine());\n\t\t\tthis._uniformWriter.padToAlign(256);\n\t\t\treturn offset;\n\t\t});\n\n\t\t// gather point lights\n\n\t\tthis._lightWriter.clear();\n\t\tlet pointLightCount = 0;\n\t\tfor (const node of preOrder(scene._nodes)) {\n\t\t\tconst light = node._light;\n\t\t\tif (!isPointLight(light)) continue;\n\n\t\t\tnode._updateWorldMatrix();\n\t\t\t_positionWS.set(node._worldMatrix.tx, node._worldMatrix.ty, node._worldMatrix.tz);\n\n\t\t\tthis._lightWriter.writeVector3(_positionWS);\n\t\t\tthis._lightWriter.writeU32(0);\n\t\t\tthis._lightWriter.writeColorF32(light._color);\n\t\t\tthis._lightWriter.writeU32(0);\n\n\t\t\tpointLightCount += 1;\n\t\t}\n\n\t\tthis._device.queue.writeBuffer(this._pointLightBuffer, 0, this._lightWriter.subarray);\n\n\t\t// gather directional lights\n\n\t\tthis._lightWriter.clear();\n\t\tlet directionalLightCount = 0;\n\t\tfor (const node of preOrder(scene._nodes)) {\n\t\t\tconst light = node._light;\n\t\t\tif (!isDirectionalLight(light)) continue;\n\n\t\t\tnode._updateWorldMatrix();\n\t\t\t_directionWS.set(-node._worldMatrix.kx, -node._worldMatrix.ky, -node._worldMatrix.kz);\n\t\t\t_directionWS.normalize();\n\n\t\t\tthis._lightWriter.writeVector3(_directionWS);\n\t\t\tthis._lightWriter.writeU32(0);\n\t\t\tthis._lightWriter.writeColorF32(light._color);\n\t\t\tthis._lightWriter.writeU32(0);\n\n\t\t\tdirectionalLightCount += 1;\n\t\t}\n\n\t\tthis._device.queue.writeBuffer(this._directionalLightBuffer, 0, this._lightWriter.subarray);\n\n\t\t// global uniforms\n\n\t\tconst globalUniformsOffset = this._uniformWriter._length;\n\t\tcameraNode._updateWorldMatrix();\n\t\t_matrixWStoVS.setObject(cameraNode._worldMatrix).inverseAffine();\n\t\tcamera.computeProjectionMatrix(width / height, _matrixVStoCS);\n\n\t\tthis._uniformWriter.writeMatrix4x4(_matrixWStoVS);\n\t\tthis._uniformWriter.writeMatrix4x4(_matrixVStoCS);\n\t\tthis._uniformWriter.writeColorF32(scene._ambientLight);\n\t\tthis._uniformWriter.writeU32(pointLightCount);\n\t\tthis._uniformWriter.writeU32(directionalLightCount);\n\t\tthis._uniformWriter.padToAlign(256);\n\n\t\t// upload uniforms\n\n\t\tthis._device.queue.writeBuffer(this._uniformBuffer, 0, this._uniformWriter.subarray);\n\n\t\t// render\n\n\t\tpass.setBindGroup(0, this._globalBindGroup, [globalUniformsOffset]);\n\n\t\tfor (let oi = 0; oi < objectMapping.table.length; ++oi) {\n\t\t\tconst object = objectMapping.table[oi]!;\n\t\t\tconst objectOffset = objectOffsets[oi]!;\n\t\t\tconst mesh = object.mesh!;\n\t\t\tconst { _vertexBuffer: vertexBuffer, _indexBuffer: indexBuffer } = mesh;\n\n\t\t\tconst flags: ShaderFlags = {\n\t\t\t\ttexCoord: vertexBuffer._texCoordBuffer !== null,\n\t\t\t\tlightTexCoord: vertexBuffer._lightTexCoordBuffer !== null,\n\t\t\t\tnormal: vertexBuffer._normalBuffer !== null,\n\t\t\t\ttangent: vertexBuffer._tangentBuffer !== null,\n\t\t\t};\n\n\t\t\tconst renderPipeline = this._getOrCreatePipeline(flags);\n\n\t\t\tpass.setPipeline(renderPipeline);\n\n\t\t\t/* WORKAROUND\n\t\t\t *\n\t\t\t * As of writing, Chrome doesn't support passing null as the second\n\t\t\t * argument. We could (and should) bind the buffers unconditionally\n\t\t\t * for increased safety. For now, we only do this when they are not\n\t\t\t * null.\n\t\t\t */\n\t\t\tpass.setVertexBuffer(0, vertexBuffer._positionBuffer);\n\t\t\tif (vertexBuffer._texCoordBuffer !== null) pass.setVertexBuffer(1, vertexBuffer._texCoordBuffer);\n\t\t\tif (vertexBuffer._lightTexCoordBuffer !== null) pass.setVertexBuffer(2, vertexBuffer._lightTexCoordBuffer);\n\t\t\tif (vertexBuffer._normalBuffer !== null) pass.setVertexBuffer(3, vertexBuffer._normalBuffer);\n\t\t\tif (vertexBuffer._tangentBuffer !== null) pass.setVertexBuffer(4, vertexBuffer._tangentBuffer);\n\t\t\tpass.setIndexBuffer(indexBuffer._buffer, indexBuffer._indexFormat);\n\n\t\t\tpass.setBindGroup(2, this._objectBindGroup, [objectOffset]);\n\n\t\t\tfor (let si = 0; si < mesh._submeshes.length; ++si) {\n\t\t\t\tconst submesh = mesh._submeshes[si]!;\n\t\t\t\tconst material = object._materials[si]!;\n\n\t\t\t\tif (isMaterial(material)) {\n\t\t\t\t\tpass.setBindGroup(1, material._bindGroup, [0]);\n\t\t\t\t} else if (isDynamicMaterial(material)) {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tbindGroup: materialBindGroup,\n\t\t\t\t\t\toffset: materialOffset\n\t\t\t\t\t} = dynamicMaterialBindGroups[dynamicMaterialMapping.get(material)!]!;\n\t\t\t\t\tpass.setBindGroup(1, materialBindGroup, [materialOffset]);\n\t\t\t\t}\n\n\t\t\t\tpass.drawIndexed(submesh.length, 1, submesh.start, 0, 0);\n\t\t\t}\n\t\t}\n\n\t\tpass.end();\n\n\t\tconst commandBuffer = encoder.finish();\n\t\tthis._device.queue.submit([commandBuffer]);\n\n\t\treturn this;\n\t}\n}\n", "/// \n\nimport { Color, Mesh, Node, PerspectiveCamera, PointLight, Quaternion, Scene, Submesh, Vector3 } from \"../src/data/index\";\nimport { Renderer, degToRad } from \"../src/oktaeder\";\nimport \"./style.css\";\n\nconst canvas = document.createElement(\"canvas\");\nwindow.addEventListener(\"resize\", onResize);\nonResize.call(window);\n\nconst renderer = await Renderer.init(canvas);\n\nconst camera = new PerspectiveCamera({\n\tverticalFovRad: degToRad(50),\n\tnearPlane: 0.001,\n\tfarPlane: Infinity,\n});\n\nconst vertexBuffer = renderer.createVertexBuffer({ vertexCount: 12, texCoord: true });\nvertexBuffer.writeTypedArray(0, {\n\tposition: new Float32Array([\n\t\t0, 0, 1,\n\t\t1, 0, 0,\n\t\t0, 1, 0,\n\t\t-1, 0, 0,\n\t\t0, 0, -1,\n\t\t0, 0, -1,\n\t\t0, 0, -1,\n\t\t1, 0, 0,\n\t\t0, -1, 0,\n\t\t-1, 0, 0,\n\t\t0, 0, -1,\n\t\t0, 0, 1,\n\t]),\n\ttexCoord: new Float32Array([\n\t\t0.5, 0.7113,\n\t\t0.333333, 1,\n\t\t0.166666, 0.7113,\n\t\t0.333333, 0.4226,\n\t\t0, 0.4226,\n\t\t0, 1,\n\t\t1, 1,\n\t\t0.666666, 1,\n\t\t0.833333, 0.7113,\n\t\t0.666666, 0.4226,\n\t\t1, 0.4226,\n\t\t0.5, 0.7113,\n\t]),\n});\n\nconst indexBuffer = renderer.createIndexBuffer({ indexCount: 24, indexFormat: \"uint16\" });\nindexBuffer.writeArray(0, [\n\t0, 2, 1,\n\t3, 4, 2,\n\t5, 1, 2,\n\t2, 0, 3,\n\t6, 8, 7,\n\t9, 8, 10,\n\t7, 8, 11,\n\t11, 8, 9,\n]);\n\nconst submesh: Submesh = { start: 0, length: 24 };\n\nconst mesh = new Mesh({ vertexBuffer, indexBuffer, submeshes: [submesh] });\n\nconst imageBitmap = await loadImageBitmap(\"uvmap.png\");\n\nconst texture = renderer.createTexture({\n\tformat: \"srgb\",\n\twidth: imageBitmap.width,\n\theight: imageBitmap.height,\n\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n});\n\nrenderer._device.queue.copyExternalImageToTexture(\n\t{ source: imageBitmap, flipY: false },\n\t{ texture: texture._texture },\n\t{ width: imageBitmap.width, height: imageBitmap.height },\n);\n\nconst material = renderer.createMaterial({\n\tbaseColor: Color.white(),\n\tbaseColorPartialCoverageTexture: texture,\n\troughness: 0.5,\n\tmetallic: 0,\n});\n\nconst node = new Node({ mesh, materials: [material] });\n\nconst scene = new Scene({\n\tnodes: [\n\t\tnode,\n\t\tnew Node({\n\t\t\ttranslation: new Vector3(0, 1, -1),\n\t\t\tlight: new PointLight({ color: new Color(1, 1, 1) }),\n\t\t}),\n\t\tnew Node({\n\t\t\ttranslation: new Vector3(0, -1, -1),\n\t\t\tlight: new PointLight({ color: new Color(1, 1, 1) }),\n\t\t}),\n\t\tnew Node({\n\t\t\ttranslation: new Vector3(0, 0.8, -3),\n\t\t\trotation: Quaternion.fromRotationYZ(degToRad(15)),\n\t\t\tcamera,\n\t\t}),\n\t],\n\tambientLight: new Color(0.01, 0.01, 0.01),\n});\n\nfunction onResize(this: Window) {\n\tcanvas.width = this.innerWidth;\n\tcanvas.height = this.innerHeight;\n}\n\nconst _quaternion = Quaternion.identity();\n\nasync function loadImageBitmap(url: string) {\n\tconst res = await fetch(url);\n\tconst blob = await res.blob();\n\tconst imageBitmap = await createImageBitmap(blob, { colorSpaceConversion: \"none\" });\n\n\treturn imageBitmap;\n}\n\nfunction draw(timeMs: number) {\n\tconst time = 0.001 * timeMs;\n\tnode.setRotation(_quaternion.setRotationZX(-0.5 * time));\n\n\trenderer.render(scene, camera);\n\trequestAnimationFrame(draw);\n}\n\nrequestAnimationFrame(draw);\n\ndocument.body.appendChild(canvas);\n"], "mappings": "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KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EAAE;AAC1E,UAAM,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,EA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", "names": ["node", "node", "vertexBuffer", "indexBuffer", "Node", "camera", "mesh", "node", "node", "renderer", "renderer", "renderer", "renderer", "renderer", "Renderer", "canvas", "scene", "camera", "node", "material", "mesh", "vertexBuffer", "indexBuffer", "submesh", "Renderer", "Node", "imageBitmap"] }