import Texture from './BaseTexture'; import ImageResource from './resources/ImageResource'; import {TARGETS} from './../const'; export default class ArrayTexture extends Texture { constructor(width, height, size, format) { super(null, 0, 1, width, height, format); this.target = TARGETS.TEXTURE_2D_ARRAY; this.size = size; this._new = true; this.array = []; } setResource(resource, index) { var layer = this.array[index]; if(!layer) { layer = this.array[index] = {index:index, texture:this, resource:null, texturePart:true, dirtyId:0}; } layer.resource = resource; resource.load.then((resource) => { if(layer.resource === resource) { this.validate(); this.dirtyId++; } }) } validate() { let valid = true; if(this.width === -1 || this.height === -1) { valid = false; } if(this.array) { for (var i = 0; i < this.array.length; i++) { const layer = this.array[i]; if(layer.resource && !layer.resource.loaded) { valid = false; break; } } } this.valid = valid; } static from(width, height, ...urls) { var arrayTexture = new ArrayTexture(width, height); for (var i = 0; i < 6; i++) { arrayTexture.setResource(ImageResource.from(urls[i % urls.length]), i); } return arrayTexture; } }