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;
}
}