1
0
mirror of https://github.com/troisjs/trois.git synced 2024-11-24 04:12:02 +08:00
This commit is contained in:
Kevin Levron 2021-04-18 23:06:50 +02:00
parent a7a4f15734
commit b37c1b465f
2 changed files with 50 additions and 37 deletions

View File

@ -1,37 +0,0 @@
import { TextureLoader } from 'three';
export default function useTextures() {
const obj = {
loader: new TextureLoader(),
count: 0,
textures: [],
loadProgress: 0,
loadTextures,
dispose,
};
return obj;
function loadTextures(images, cb) {
obj.count = images.length;
obj.textures.splice(0);
obj.loadProgress = 0;
Promise.all(images.map(loadTexture)).then(cb);
};
function loadTexture(img, index) {
return new Promise(resolve => {
obj.loader.load(
img.src,
texture => {
obj.loadProgress += 1 / obj.count;
obj.textures[index] = texture;
resolve(texture);
}
);
});
};
function dispose() {
obj.textures.forEach(t => t.dispose());
}
};

50
src/use/useTextures.ts Normal file
View File

@ -0,0 +1,50 @@
import { Texture, TextureLoader } from 'three'
interface TextureConfigInterface {
src: string
}
interface TexturesInterface {
loader: TextureLoader
count: number
textures: Texture[],
loadProgress: number
loadTextures(images: TextureConfigInterface[], cb: {() : void}): void
dispose(): void
}
export default function useTextures(): TexturesInterface {
const obj: TexturesInterface = {
loader: new TextureLoader(),
count: 0,
textures: [],
loadProgress: 0,
loadTextures,
dispose,
}
return obj
function loadTextures(images: TextureConfigInterface[], cb: {() : void}) {
obj.count = images.length
obj.textures.splice(0)
obj.loadProgress = 0
Promise.all(images.map(loadTexture)).then(cb)
}
function loadTexture(img: TextureConfigInterface, index: number) {
return new Promise(resolve => {
obj.loader.load(
img.src,
texture => {
obj.loadProgress += 1 / obj.count
obj.textures[index] = texture
resolve(texture)
}
)
})
}
function dispose() {
obj.textures.forEach(t => t.dispose())
}
}