83 lines
2.9 KiB
JavaScript
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
|