sdfsdfs
This commit is contained in:
143
node_modules/pixi.js/lib/scene/text-html/HTMLTextPipe.mjs
generated
vendored
Normal file
143
node_modules/pixi.js/lib/scene/text-html/HTMLTextPipe.mjs
generated
vendored
Normal file
@@ -0,0 +1,143 @@
|
||||
import { ExtensionType } from '../../extensions/Extensions.mjs';
|
||||
import { Texture } from '../../rendering/renderers/shared/texture/Texture.mjs';
|
||||
import { updateQuadBounds } from '../../utils/data/updateQuadBounds.mjs';
|
||||
import { BigPool } from '../../utils/pool/PoolGroup.mjs';
|
||||
import { BatchableSprite } from '../sprite/BatchableSprite.mjs';
|
||||
|
||||
"use strict";
|
||||
class HTMLTextPipe {
|
||||
constructor(renderer) {
|
||||
this._gpuText = /* @__PURE__ */ Object.create(null);
|
||||
this._destroyRenderableBound = this.destroyRenderable.bind(this);
|
||||
this._renderer = renderer;
|
||||
this._renderer.runners.resolutionChange.add(this);
|
||||
}
|
||||
resolutionChange() {
|
||||
for (const i in this._gpuText) {
|
||||
const gpuText = this._gpuText[i];
|
||||
if (!gpuText)
|
||||
continue;
|
||||
const text = gpuText.batchableSprite.renderable;
|
||||
if (text._autoResolution) {
|
||||
text._resolution = this._renderer.resolution;
|
||||
text.onViewUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
validateRenderable(htmlText) {
|
||||
const gpuText = this._getGpuText(htmlText);
|
||||
const newKey = htmlText._getKey();
|
||||
if (gpuText.textureNeedsUploading) {
|
||||
gpuText.textureNeedsUploading = false;
|
||||
return true;
|
||||
}
|
||||
if (gpuText.currentKey !== newKey) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
addRenderable(htmlText, instructionSet) {
|
||||
const gpuText = this._getGpuText(htmlText);
|
||||
const batchableSprite = gpuText.batchableSprite;
|
||||
if (htmlText._didTextUpdate) {
|
||||
this._updateText(htmlText);
|
||||
}
|
||||
this._renderer.renderPipes.batch.addToBatch(batchableSprite, instructionSet);
|
||||
}
|
||||
updateRenderable(htmlText) {
|
||||
const gpuText = this._getGpuText(htmlText);
|
||||
const batchableSprite = gpuText.batchableSprite;
|
||||
if (htmlText._didTextUpdate) {
|
||||
this._updateText(htmlText);
|
||||
}
|
||||
batchableSprite._batcher.updateElement(batchableSprite);
|
||||
}
|
||||
destroyRenderable(htmlText) {
|
||||
htmlText.off("destroyed", this._destroyRenderableBound);
|
||||
this._destroyRenderableById(htmlText.uid);
|
||||
}
|
||||
_destroyRenderableById(htmlTextUid) {
|
||||
const gpuText = this._gpuText[htmlTextUid];
|
||||
this._renderer.htmlText.decreaseReferenceCount(gpuText.currentKey);
|
||||
BigPool.return(gpuText.batchableSprite);
|
||||
this._gpuText[htmlTextUid] = null;
|
||||
}
|
||||
_updateText(htmlText) {
|
||||
const newKey = htmlText._getKey();
|
||||
const gpuText = this._getGpuText(htmlText);
|
||||
const batchableSprite = gpuText.batchableSprite;
|
||||
if (gpuText.currentKey !== newKey) {
|
||||
this._updateGpuText(htmlText).catch((e) => {
|
||||
console.error(e);
|
||||
});
|
||||
}
|
||||
htmlText._didTextUpdate = false;
|
||||
const padding = htmlText._style.padding;
|
||||
updateQuadBounds(batchableSprite.bounds, htmlText._anchor, batchableSprite.texture, padding);
|
||||
}
|
||||
async _updateGpuText(htmlText) {
|
||||
htmlText._didTextUpdate = false;
|
||||
const gpuText = this._getGpuText(htmlText);
|
||||
if (gpuText.generatingTexture)
|
||||
return;
|
||||
const newKey = htmlText._getKey();
|
||||
this._renderer.htmlText.decreaseReferenceCount(gpuText.currentKey);
|
||||
gpuText.generatingTexture = true;
|
||||
gpuText.currentKey = newKey;
|
||||
const resolution = htmlText.resolution ?? this._renderer.resolution;
|
||||
const texture = await this._renderer.htmlText.getManagedTexture(
|
||||
htmlText.text,
|
||||
resolution,
|
||||
htmlText._style,
|
||||
htmlText._getKey()
|
||||
);
|
||||
const batchableSprite = gpuText.batchableSprite;
|
||||
batchableSprite.texture = gpuText.texture = texture;
|
||||
gpuText.generatingTexture = false;
|
||||
gpuText.textureNeedsUploading = true;
|
||||
htmlText.onViewUpdate();
|
||||
const padding = htmlText._style.padding;
|
||||
updateQuadBounds(batchableSprite.bounds, htmlText._anchor, batchableSprite.texture, padding);
|
||||
}
|
||||
_getGpuText(htmlText) {
|
||||
return this._gpuText[htmlText.uid] || this.initGpuText(htmlText);
|
||||
}
|
||||
initGpuText(htmlText) {
|
||||
const gpuTextData = {
|
||||
texture: Texture.EMPTY,
|
||||
currentKey: "--",
|
||||
batchableSprite: BigPool.get(BatchableSprite),
|
||||
textureNeedsUploading: false,
|
||||
generatingTexture: false
|
||||
};
|
||||
const batchableSprite = gpuTextData.batchableSprite;
|
||||
batchableSprite.renderable = htmlText;
|
||||
batchableSprite.transform = htmlText.groupTransform;
|
||||
batchableSprite.texture = Texture.EMPTY;
|
||||
batchableSprite.bounds = { minX: 0, maxX: 1, minY: 0, maxY: 0 };
|
||||
batchableSprite.roundPixels = this._renderer._roundPixels | htmlText._roundPixels;
|
||||
htmlText._resolution = htmlText._autoResolution ? this._renderer.resolution : htmlText.resolution;
|
||||
this._gpuText[htmlText.uid] = gpuTextData;
|
||||
htmlText.on("destroyed", this._destroyRenderableBound);
|
||||
return gpuTextData;
|
||||
}
|
||||
destroy() {
|
||||
for (const i in this._gpuText) {
|
||||
this._destroyRenderableById(i);
|
||||
}
|
||||
this._gpuText = null;
|
||||
this._renderer = null;
|
||||
}
|
||||
}
|
||||
/** @ignore */
|
||||
HTMLTextPipe.extension = {
|
||||
type: [
|
||||
ExtensionType.WebGLPipes,
|
||||
ExtensionType.WebGPUPipes,
|
||||
ExtensionType.CanvasPipes
|
||||
],
|
||||
name: "htmlText"
|
||||
};
|
||||
|
||||
export { HTMLTextPipe };
|
||||
//# sourceMappingURL=HTMLTextPipe.mjs.map
|
Reference in New Issue
Block a user