Files
nothoughts/node_modules/pixi.js/lib/scene/sprite-nine-slice/NineSliceSpritePipe.js
2025-08-04 18:57:35 +02:00

83 lines
2.9 KiB
JavaScript

'use strict';
var Extensions = require('../../extensions/Extensions.js');
var PoolGroup = require('../../utils/pool/PoolGroup.js');
var BatchableMesh = require('../mesh/shared/BatchableMesh.js');
var NineSliceGeometry = require('./NineSliceGeometry.js');
"use strict";
class NineSliceSpritePipe {
constructor(renderer) {
this._gpuSpriteHash = /* @__PURE__ */ Object.create(null);
this._destroyRenderableBound = this.destroyRenderable.bind(this);
this._renderer = renderer;
}
addRenderable(sprite, instructionSet) {
const gpuSprite = this._getGpuSprite(sprite);
if (sprite._didSpriteUpdate)
this._updateBatchableSprite(sprite, gpuSprite);
this._renderer.renderPipes.batch.addToBatch(gpuSprite, instructionSet);
}
updateRenderable(sprite) {
const gpuSprite = this._gpuSpriteHash[sprite.uid];
if (sprite._didSpriteUpdate)
this._updateBatchableSprite(sprite, gpuSprite);
gpuSprite._batcher.updateElement(gpuSprite);
}
validateRenderable(sprite) {
const texture = sprite._texture;
const gpuSprite = this._getGpuSprite(sprite);
if (gpuSprite.texture._source !== texture._source) {
return !gpuSprite._batcher.checkAndUpdateTexture(gpuSprite, texture);
}
return false;
}
destroyRenderable(sprite) {
const batchableMesh = this._gpuSpriteHash[sprite.uid];
PoolGroup.BigPool.return(batchableMesh.geometry);
PoolGroup.BigPool.return(batchableMesh);
this._gpuSpriteHash[sprite.uid] = null;
sprite.off("destroyed", this._destroyRenderableBound);
}
_updateBatchableSprite(sprite, batchableSprite) {
sprite._didSpriteUpdate = false;
batchableSprite.geometry.update(sprite);
batchableSprite.texture = sprite._texture;
}
_getGpuSprite(sprite) {
return this._gpuSpriteHash[sprite.uid] || this._initGPUSprite(sprite);
}
_initGPUSprite(sprite) {
const batchableMesh = PoolGroup.BigPool.get(BatchableMesh.BatchableMesh);
batchableMesh.geometry = PoolGroup.BigPool.get(NineSliceGeometry.NineSliceGeometry);
batchableMesh.renderable = sprite;
batchableMesh.transform = sprite.groupTransform;
batchableMesh.texture = sprite._texture;
batchableMesh.roundPixels = this._renderer._roundPixels | sprite._roundPixels;
sprite._didSpriteUpdate = true;
this._gpuSpriteHash[sprite.uid] = batchableMesh;
sprite.on("destroyed", this._destroyRenderableBound);
return batchableMesh;
}
destroy() {
for (const i in this._gpuSpriteHash) {
const batchableMesh = this._gpuSpriteHash[i];
batchableMesh.geometry.destroy();
}
this._gpuSpriteHash = null;
this._renderer = null;
}
}
/** @ignore */
NineSliceSpritePipe.extension = {
type: [
Extensions.ExtensionType.WebGLPipes,
Extensions.ExtensionType.WebGPUPipes,
Extensions.ExtensionType.CanvasPipes
],
name: "nineSliceSprite"
};
exports.NineSliceSpritePipe = NineSliceSpritePipe;
//# sourceMappingURL=NineSliceSpritePipe.js.map