pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
271 lines (270 loc) • 11.7 kB
TypeScript
import EventEmitter from 'eventemitter3';
import { TextureStyle } from '../TextureStyle';
import type { BindResource } from '../../../gpu/shader/BindResource';
import type { ALPHA_MODES, SCALE_MODE, TEXTURE_DIMENSIONS, TEXTURE_FORMATS, WRAP_MODE } from '../const';
import type { TextureStyleOptions } from '../TextureStyle';
import type { TextureResourceOrOptions } from '../utils/textureFrom';
/**
* options for creating a new TextureSource
* @category rendering
* @advanced
*/
export interface TextureSourceOptions<T extends Record<string, any> = any> extends TextureStyleOptions {
/**
* the resource that will be uploaded to the GPU. This is where we get our pixels from
* eg an ImageBimt / Canvas / Video etc
*/
resource?: T;
/** the pixel width of this texture source. This is the REAL pure number, not accounting resolution */
width?: number;
/** the pixel height of this texture source. This is the REAL pure number, not accounting resolution */
height?: number;
/** the resolution of the texture. */
resolution?: number;
/** the format that the texture data has */
format?: TEXTURE_FORMATS;
/**
* Used by internal textures
* @ignore
*/
sampleCount?: number;
/**
* Only really affects RenderTextures.
* Should we use antialiasing for this texture. It will look better, but may impact performance as a
* Blit operation will be required to resolve the texture.
*/
antialias?: boolean;
/** how many dimensions does this texture have? currently v8 only supports 2d */
dimensions?: TEXTURE_DIMENSIONS;
/** The number of mip levels to generate for this texture. this is overridden if autoGenerateMipmaps is true */
mipLevelCount?: number;
/**
* Should we auto generate mipmaps for this texture? This will automatically generate mipmaps
* for this texture when uploading to the GPU. Mipmapped textures take up more memory, but
* can look better when scaled down.
*
* For performance reasons, it is recommended to NOT use this with RenderTextures, as they are often updated every frame.
* If you do, make sure to call `updateMipmaps` after you update the texture.
*/
autoGenerateMipmaps?: boolean;
/** the alpha mode of the texture */
alphaMode?: ALPHA_MODES;
/** optional label, can be used for debugging */
label?: string;
/** If true, the Garbage Collector will unload this texture if it is not used after a period of time */
autoGarbageCollect?: boolean;
}
/**
* A TextureSource stores the information that represents an image.
* All textures have require TextureSource, which contains information about the source.
* Therefore you can have many textures all using a single TextureSource (eg a sprite sheet)
*
* This is an class is extended depending on the source of the texture.
* Eg if you are using an an image as your resource, then an ImageSource is used.
* @category rendering
* @advanced
*/
export declare class TextureSource<T extends Record<string, any> = any> extends EventEmitter<{
change: BindResource;
update: TextureSource;
unload: TextureSource;
destroy: TextureSource;
resize: TextureSource;
styleChange: TextureSource;
updateMipmaps: TextureSource;
error: Error;
}> implements BindResource {
protected readonly options: TextureSourceOptions<T>;
/** The default options used when creating a new TextureSource. override these to add your own defaults */
static defaultOptions: TextureSourceOptions;
/** unique id for this Texture source */
readonly uid: number;
/** optional label, can be used for debugging */
label: string;
/**
* The resource type used by this TextureSource. This is used by the bind groups to determine
* how to handle this resource.
* @internal
*/
readonly _resourceType = "textureSource";
/**
* i unique resource id, used by the bind group systems.
* This can change if the texture is resized or its resource changes
* @internal
*/
_resourceId: number;
/**
* this is how the backends know how to upload this texture to the GPU
* It changes depending on the resource type. Classes that extend TextureSource
* should override this property.
* @internal
*/
uploadMethodId: string;
/** @internal */
_resolution: number;
/** the pixel width of this texture source. This is the REAL pure number, not accounting resolution */
pixelWidth: number;
/** the pixel height of this texture source. This is the REAL pure number, not accounting resolution */
pixelHeight: number;
/**
* the width of this texture source, accounting for resolution
* eg pixelWidth 200, resolution 2, then width will be 100
*/
width: number;
/**
* the height of this texture source, accounting for resolution
* eg pixelHeight 200, resolution 2, then height will be 100
*/
height: number;
/**
* the resource that will be uploaded to the GPU. This is where we get our pixels from
* eg an ImageBimt / Canvas / Video etc
*/
resource: T;
/**
* The number of samples of a multisample texture. This is always 1 for non-multisample textures.
* To enable multisample for a texture, set antialias to true
* @internal
*/
sampleCount: number;
/** The number of mip levels to generate for this texture. this is overridden if autoGenerateMipmaps is true */
mipLevelCount: number;
/**
* Should we auto generate mipmaps for this texture? This will automatically generate mipmaps
* for this texture when uploading to the GPU. Mipmapped textures take up more memory, but
* can look better when scaled down.
*
* For performance reasons, it is recommended to NOT use this with RenderTextures, as they are often updated every frame.
* If you do, make sure to call `updateMipmaps` after you update the texture.
*/
autoGenerateMipmaps: boolean;
/** the format that the texture data has */
format: TEXTURE_FORMATS;
/** how many dimensions does this texture have? currently v8 only supports 2d */
dimension: TEXTURE_DIMENSIONS;
/** the alpha mode of the texture */
alphaMode: ALPHA_MODES;
private _style;
/**
* Only really affects RenderTextures.
* Should we use antialiasing for this texture. It will look better, but may impact performance as a
* Blit operation will be required to resolve the texture.
*/
antialias: boolean;
/**
* Has the source been destroyed?
* @readonly
*/
destroyed: boolean;
/**
* Used by automatic texture Garbage Collection, stores last GC tick when it was bound
* @protected
*/
_touched: number;
/**
* Used by the batcher to build texture batches. faster to have the variable here!
* @protected
*/
_batchTick: number;
/**
* A temporary batch location for the texture batching. Here for performance reasons only!
* @protected
*/
_textureBindLocation: number;
isPowerOfTwo: boolean;
/** If true, the Garbage Collector will unload this texture if it is not used after a period of time */
autoGarbageCollect: boolean;
/**
* used internally to know where a texture came from. Usually assigned by the asset loader!
* @ignore
*/
_sourceOrigin: string;
/**
* @param options - options for creating a new TextureSource
*/
constructor(options?: TextureSourceOptions<T>);
/** returns itself */
get source(): TextureSource;
/** the style of the texture */
get style(): TextureStyle;
set style(value: TextureStyle);
/** setting this will set wrapModeU,wrapModeV and wrapModeW all at once! */
get addressMode(): WRAP_MODE;
set addressMode(value: WRAP_MODE);
/** setting this will set wrapModeU,wrapModeV and wrapModeW all at once! */
get repeatMode(): WRAP_MODE;
set repeatMode(value: WRAP_MODE);
/** Specifies the sampling behavior when the sample footprint is smaller than or equal to one texel. */
get magFilter(): SCALE_MODE;
set magFilter(value: SCALE_MODE);
/** Specifies the sampling behavior when the sample footprint is larger than one texel. */
get minFilter(): SCALE_MODE;
set minFilter(value: SCALE_MODE);
/** Specifies behavior for sampling between mipmap levels. */
get mipmapFilter(): SCALE_MODE;
set mipmapFilter(value: SCALE_MODE);
/** Specifies the minimum and maximum levels of detail, respectively, used internally when sampling a texture. */
get lodMinClamp(): number;
set lodMinClamp(value: number);
/** Specifies the minimum and maximum levels of detail, respectively, used internally when sampling a texture. */
get lodMaxClamp(): number;
set lodMaxClamp(value: number);
private _onStyleChange;
/** call this if you have modified the texture outside of the constructor */
update(): void;
/** Destroys this texture source */
destroy(): void;
/**
* This will unload the Texture source from the GPU. This will free up the GPU memory
* As soon as it is required fore rendering, it will be re-uploaded.
*/
unload(): void;
/** the width of the resource. This is the REAL pure number, not accounting resolution */
get resourceWidth(): number;
/** the height of the resource. This is the REAL pure number, not accounting resolution */
get resourceHeight(): number;
/**
* the resolution of the texture. Changing this number, will not change the number of pixels in the actual texture
* but will the size of the texture when rendered.
*
* changing the resolution of this texture to 2 for example will make it appear twice as small when rendered (as pixel
* density will have increased)
*/
get resolution(): number;
set resolution(resolution: number);
/**
* Resize the texture, this is handy if you want to use the texture as a render texture
* @param width - the new width of the texture
* @param height - the new height of the texture
* @param resolution - the new resolution of the texture
* @returns - if the texture was resized
*/
resize(width?: number, height?: number, resolution?: number): boolean;
/**
* Lets the renderer know that this texture has been updated and its mipmaps should be re-generated.
* This is only important for RenderTexture instances, as standard Texture instances will have their
* mipmaps generated on upload. You should call this method after you make any change to the texture
*
* The reason for this is is can be quite expensive to update mipmaps for a texture. So by default,
* We want you, the developer to specify when this action should happen.
*
* Generally you don't want to have mipmaps generated on Render targets that are changed every frame,
*/
updateMipmaps(): void;
set wrapMode(value: WRAP_MODE);
get wrapMode(): WRAP_MODE;
set scaleMode(value: SCALE_MODE);
/** setting this will set magFilter,minFilter and mipmapFilter all at once! */
get scaleMode(): SCALE_MODE;
/**
* Refresh check for isPowerOfTwo texture based on size
* @private
*/
protected _refreshPOT(): void;
static test(_resource: any): any;
/**
* A helper function that creates a new TextureSource based on the resource you provide.
* @param resource - The resource to create the texture source from.
*/
static from: (resource: TextureResourceOrOptions) => TextureSource;
}