В PixiJS класс BaseTexture представляет собой фундаментальный объект, который хранит информацию о графическом ресурсе и управляет его представлением в виде текстуры на GPU. Он является низкоуровневым компонентом, на основе которого создаются все текстуры (Texture), спрайты (Sprite) и другие графические объекты.
BaseTexture создаётся с помощью конструктора:
const baseTexture = new PIXI.BaseTexture(imageURL, options);
Параметры:
{
scaleMode: PIXI.SCALE_MODES.LINEAR, // способ масштабирования
resolution: 1, // плотность пикселей
mipmap: PIXI.MIPMAP_MODES.OFF, // генерация MIPMAP
wrapMode: PIXI.WRAP_MODES.CLAMP // режим обрезки
}
BaseTexture автоматически загружает изображение и создаёт соответствующий текстурный ресурс на GPU. Для контроля момента загрузки можно использовать событие:
baseTexture.on('loaded', () => {
console.log('BaseTexture загружена и готова к использованию.');
});
Ключевые свойства, которые определяют работу с GPU:
При создании BaseTexture автоматически создаётся WebGL-текстура. Важно понимать, что BaseTexture хранит только данные изображения, а фактическое копирование на GPU происходит при первом использовании в рендеринге.
const texture = PIXI.Texture.from('image.png');
const sprite = new PIXI.Sprite(texture);
app.stage.addChild(sprite); // здесь происходит загрузка на GPU
Если содержимое BaseTexture изменилось (например, на Canvas), нужно вызвать метод:
baseTexture.update();
Это гарантирует, что GPU-ресурс будет синхронизирован с обновлёнными данными.
WebGL-ресурсы не очищаются автоматически при удалении объекта JavaScript. Для предотвращения утечек памяти необходимо использовать:
baseTexture.destroy({
destroyBase: true, // удаляет также базовый ресурс
});
Это освобождает память GPU и удаляет текстуру из менеджера ресурсов BaseTextureCache.
Каждая текстура (Texture) создаётся на основе BaseTexture, что позволяет использовать один графический ресурс в нескольких спрайтах без дублирования данных на GPU:
const baseTex = PIXI.BaseTexture.from('image.png');
const tex1 = new PIXI.Texture(baseTex, new PIXI.Rectangle(0, 0, 100, 100));
const tex2 = new PIXI.Texture(baseTex, new PIXI.Rectangle(100, 0, 100, 100));
Преимущество: экономия видеопамяти и высокая производительность, так как один BaseTexture может обслуживать множество текстурных регионов.
BaseTexture может быть создан не только из статичных изображений, но и из HTMLCanvasElement и HTMLVideoElement:
const videoElement = document.createElement('video');
videoElement.src = 'video.mp4';
const baseVideoTexture = new PIXI.BaseTexture(videoElement, { scaleMode: PIXI.SCALE_MODES.LINEAR });
В этом случае метод update() необходимо вызывать на
каждом кадре для синхронизации GPU с текущим состоянием видео или
canvas.
PixiJS хранит все BaseTexture в глобальном кэше BaseTextureCache:
console.log(PIXI.utils.BaseTextureCache);
Можно удалять конкретный ресурс из кэша, чтобы контролировать использование памяти:
delete PIXI.utils.BaseTextureCache['image.png'];
Также библиотека автоматически управляет дублированием текстур для разных разрешений, обеспечивая поддержку ретины и масштабирование без потери качества.
scaleMode и wrapMode в зависимости от
визуальных требований.loaded или
свойства valid обязательна.resolution позволяет корректно отображать графику на
дисплеях с высокой плотностью пикселей.BaseTexture является ядром системы управления графическими ресурсами в PixiJS, обеспечивая контроль над GPU-памятью, эффективное повторное использование текстур и синхронизацию с динамическими источниками изображений. Его правильное использование напрямую влияет на производительность и стабильность WebGL-приложений.