Files
nothoughts/node_modules/pixi.js/lib/rendering/renderers/shared/texture/TextureStyle.js
2025-08-04 18:57:35 +02:00

117 lines
3.7 KiB
JavaScript

'use strict';
var EventEmitter = require('eventemitter3');
var uid = require('../../../../utils/data/uid.js');
var deprecation = require('../../../../utils/logging/deprecation.js');
"use strict";
const idHash = /* @__PURE__ */ Object.create(null);
function createResourceIdFromString(value) {
const id = idHash[value];
if (id === void 0) {
idHash[value] = uid.uid("resource");
}
return id;
}
const _TextureStyle = class _TextureStyle extends EventEmitter {
/**
* @param options - options for the style
*/
constructor(options = {}) {
super();
this._resourceType = "textureSampler";
this._touched = 0;
/**
* Specifies the maximum anisotropy value clamp used by the sampler.
* Note: Most implementations support {@link GPUSamplerDescriptor#maxAnisotropy} values in range
* between 1 and 16, inclusive. The used value of {@link GPUSamplerDescriptor#maxAnisotropy} will
* be clamped to the maximum value that the platform supports.
* @internal
* @ignore
*/
this._maxAnisotropy = 1;
/**
* Has the style been destroyed?
* @readonly
*/
this.destroyed = false;
options = { ..._TextureStyle.defaultOptions, ...options };
this.addressMode = options.addressMode;
this.addressModeU = options.addressModeU ?? this.addressModeU;
this.addressModeV = options.addressModeV ?? this.addressModeV;
this.addressModeW = options.addressModeW ?? this.addressModeW;
this.scaleMode = options.scaleMode;
this.magFilter = options.magFilter ?? this.magFilter;
this.minFilter = options.minFilter ?? this.minFilter;
this.mipmapFilter = options.mipmapFilter ?? this.mipmapFilter;
this.lodMinClamp = options.lodMinClamp;
this.lodMaxClamp = options.lodMaxClamp;
this.compare = options.compare;
this.maxAnisotropy = options.maxAnisotropy ?? 1;
}
set addressMode(value) {
this.addressModeU = value;
this.addressModeV = value;
this.addressModeW = value;
}
/** setting this will set wrapModeU,wrapModeV and wrapModeW all at once! */
get addressMode() {
return this.addressModeU;
}
set wrapMode(value) {
deprecation.deprecation(deprecation.v8_0_0, "TextureStyle.wrapMode is now TextureStyle.addressMode");
this.addressMode = value;
}
get wrapMode() {
return this.addressMode;
}
set scaleMode(value) {
this.magFilter = value;
this.minFilter = value;
this.mipmapFilter = value;
}
/** setting this will set magFilter,minFilter and mipmapFilter all at once! */
get scaleMode() {
return this.magFilter;
}
/** Specifies the maximum anisotropy value clamp used by the sampler. */
set maxAnisotropy(value) {
this._maxAnisotropy = Math.min(value, 16);
if (this._maxAnisotropy > 1) {
this.scaleMode = "linear";
}
}
get maxAnisotropy() {
return this._maxAnisotropy;
}
// TODO - move this to WebGL?
get _resourceId() {
return this._sharedResourceId || this._generateResourceId();
}
update() {
this.emit("change", this);
this._sharedResourceId = null;
}
_generateResourceId() {
const bigKey = `${this.addressModeU}-${this.addressModeV}-${this.addressModeW}-${this.magFilter}-${this.minFilter}-${this.mipmapFilter}-${this.lodMinClamp}-${this.lodMaxClamp}-${this.compare}-${this._maxAnisotropy}`;
this._sharedResourceId = createResourceIdFromString(bigKey);
return this._resourceId;
}
/** Destroys the style */
destroy() {
this.destroyed = true;
this.emit("destroy", this);
this.emit("change", this);
this.removeAllListeners();
}
};
/** default options for the style */
_TextureStyle.defaultOptions = {
addressMode: "clamp-to-edge",
scaleMode: "linear"
};
let TextureStyle = _TextureStyle;
exports.TextureStyle = TextureStyle;
//# sourceMappingURL=TextureStyle.js.map