UNPKG

3.43 kBJavaScriptView Raw
1import { TARGETS } from "@pixi/constants";
2import { AbstractMultiResource } from "./AbstractMultiResource.mjs";
3const _CubeResource = class _CubeResource2 extends AbstractMultiResource {
4 /**
5 * @param {Array<string|PIXI.Resource>} [source] - Collection of URLs or resources
6 * to use as the sides of the cube.
7 * @param options - ImageResource options
8 * @param {number} [options.width] - Width of resource
9 * @param {number} [options.height] - Height of resource
10 * @param {number} [options.autoLoad=true] - Whether to auto-load resources
11 * @param {number} [options.linkBaseTexture=true] - In case BaseTextures are supplied,
12 * whether to copy them or use
13 */
14 constructor(source, options) {
15 const { width, height, autoLoad, linkBaseTexture } = options || {};
16 if (source && source.length !== _CubeResource2.SIDES)
17 throw new Error(`Invalid length. Got ${source.length}, expected 6`);
18 super(6, { width, height });
19 for (let i = 0; i < _CubeResource2.SIDES; i++)
20 this.items[i].target = TARGETS.TEXTURE_CUBE_MAP_POSITIVE_X + i;
21 this.linkBaseTexture = linkBaseTexture !== !1, source && this.initFromArray(source, options), autoLoad !== !1 && this.load();
22 }
23 /**
24 * Add binding.
25 * @param baseTexture - parent base texture
26 */
27 bind(baseTexture) {
28 super.bind(baseTexture), baseTexture.target = TARGETS.TEXTURE_CUBE_MAP;
29 }
30 addBaseTextureAt(baseTexture, index, linkBaseTexture) {
31 if (linkBaseTexture === void 0 && (linkBaseTexture = this.linkBaseTexture), !this.items[index])
32 throw new Error(`Index ${index} is out of bounds`);
33 if (!this.linkBaseTexture || baseTexture.parentTextureArray || Object.keys(baseTexture._glTextures).length > 0)
34 if (baseTexture.resource)
35 this.addResourceAt(baseTexture.resource, index);
36 else
37 throw new Error("CubeResource does not support copying of renderTexture.");
38 else
39 baseTexture.target = TARGETS.TEXTURE_CUBE_MAP_POSITIVE_X + index, baseTexture.parentTextureArray = this.baseTexture, this.items[index] = baseTexture;
40 return baseTexture.valid && !this.valid && this.resize(baseTexture.realWidth, baseTexture.realHeight), this.items[index] = baseTexture, this;
41 }
42 /**
43 * Upload the resource
44 * @param renderer
45 * @param _baseTexture
46 * @param glTexture
47 * @returns {boolean} true is success
48 */
49 upload(renderer, _baseTexture, glTexture) {
50 const dirty = this.itemDirtyIds;
51 for (let i = 0; i < _CubeResource2.SIDES; i++) {
52 const side = this.items[i];
53 (dirty[i] < side.dirtyId || glTexture.dirtyId < _baseTexture.dirtyId) && (side.valid && side.resource ? (side.resource.upload(renderer, side, glTexture), dirty[i] = side.dirtyId) : dirty[i] < -1 && (renderer.gl.texImage2D(
54 side.target,
55 0,
56 glTexture.internalFormat,
57 _baseTexture.realWidth,
58 _baseTexture.realHeight,
59 0,
60 _baseTexture.format,
61 glTexture.type,
62 null
63 ), dirty[i] = -1));
64 }
65 return !0;
66 }
67 /**
68 * Used to auto-detect the type of resource.
69 * @param {*} source - The source object
70 * @returns {boolean} `true` if source is an array of 6 elements
71 */
72 static test(source) {
73 return Array.isArray(source) && source.length === _CubeResource2.SIDES;
74 }
75};
76_CubeResource.SIDES = 6;
77let CubeResource = _CubeResource;
78export {
79 CubeResource
80};
81//# sourceMappingURL=CubeResource.mjs.map