UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

131 lines (130 loc) 5.13 kB
import { Vector2, sRGBEncoding, LinearEncoding } from "../../../../../_three@0.150.1@three/build/three.module.mjs"; import { $threeTexture } from "./image.mjs"; import { Texture } from "./texture.mjs"; /* @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var _a, _b, _c; const $texture = Symbol("texture"); const $transform = Symbol("transform"); const $materials = Symbol("materials"); const $usage = Symbol("usage"); const $onUpdate = Symbol("onUpdate"); const $activeVideo = Symbol("activeVideo"); var TextureUsage; (function(TextureUsage2) { TextureUsage2[TextureUsage2["Base"] = 0] = "Base"; TextureUsage2[TextureUsage2["MetallicRoughness"] = 1] = "MetallicRoughness"; TextureUsage2[TextureUsage2["Normal"] = 2] = "Normal"; TextureUsage2[TextureUsage2["Occlusion"] = 3] = "Occlusion"; TextureUsage2[TextureUsage2["Emissive"] = 4] = "Emissive"; })(TextureUsage || (TextureUsage = {})); class TextureInfo { constructor(onUpdate, usage, threeTexture, material, gltf, gltfTextureInfo) { this[_a] = null; this[_b] = { rotation: 0, scale: new Vector2(1, 1), offset: new Vector2(0, 0) }; this[_c] = false; if (gltfTextureInfo && threeTexture) { const gltfTexture = gltf.textures ? gltf.textures[gltfTextureInfo.index] : null; const sampler = gltfTexture ? gltf.samplers ? gltf.samplers[gltfTexture.sampler] : null : null; const image = gltfTexture ? gltf.images ? gltf.images[gltfTexture.source] : null : null; this[$transform].rotation = threeTexture.rotation; this[$transform].scale.copy(threeTexture.repeat); this[$transform].offset.copy(threeTexture.offset); this[$texture] = new Texture(onUpdate, threeTexture, gltfTexture, sampler, image); } this[$onUpdate] = onUpdate; this[$materials] = material; this[$usage] = usage; } get texture() { return this[$texture]; } setTexture(texture) { var _d, _e; const threeTexture = texture != null ? texture.source[$threeTexture] : null; const oldTexture = (_d = this[$texture]) === null || _d === void 0 ? void 0 : _d.source[$threeTexture]; if (oldTexture != null && oldTexture.isVideoTexture) { this[$activeVideo] = false; } else if ((_e = this[$texture]) === null || _e === void 0 ? void 0 : _e.source.animation) { this[$texture].source.animation.removeEventListener("enterFrame", this[$onUpdate]); } this[$texture] = texture; if (threeTexture != null && threeTexture.isVideoTexture) { const element = threeTexture.image; this[$activeVideo] = true; if (element.requestVideoFrameCallback != null) { const update = () => { if (!this[$activeVideo]) { return; } this[$onUpdate](); element.requestVideoFrameCallback(update); }; element.requestVideoFrameCallback(update); } else { const update = () => { if (!this[$activeVideo]) { return; } this[$onUpdate](); requestAnimationFrame(update); }; requestAnimationFrame(update); } } else if ((texture === null || texture === void 0 ? void 0 : texture.source.animation) != null) { texture.source.animation.addEventListener("enterFrame", this[$onUpdate]); } let encoding = sRGBEncoding; if (this[$materials]) { for (const material of this[$materials]) { switch (this[$usage]) { case TextureUsage.Base: material.map = threeTexture; break; case TextureUsage.MetallicRoughness: encoding = LinearEncoding; material.metalnessMap = threeTexture; material.roughnessMap = threeTexture; break; case TextureUsage.Normal: encoding = LinearEncoding; material.normalMap = threeTexture; break; case TextureUsage.Occlusion: encoding = LinearEncoding; material.aoMap = threeTexture; break; case TextureUsage.Emissive: material.emissiveMap = threeTexture; break; } material.needsUpdate = true; } } if (threeTexture) { threeTexture.encoding = encoding; threeTexture.rotation = this[$transform].rotation; threeTexture.repeat = this[$transform].scale; threeTexture.offset = this[$transform].offset; } this[$onUpdate](); } } _a = $texture, _b = $transform, _c = $activeVideo; export { $materials, $usage, TextureInfo, TextureUsage };