/// import type { BLEND_MODES } from '@pixi/constants'; import type { Buffer as Buffer_2 } from '@pixi/core'; import { Container } from '@pixi/display'; import type { Dict } from '@pixi/utils'; import { DRAW_MODES } from '@pixi/constants'; import { Geometry } from '@pixi/core'; import type { IArrayBuffer } from '@pixi/core'; import type { IDestroyOptions } from '@pixi/display'; import type { IPointData } from '@pixi/math'; import { Program } from '@pixi/core'; import type { Renderer } from '@pixi/core'; import { Shader } from '@pixi/core'; import { State } from '@pixi/core'; import type { Texture } from '@pixi/core'; import { TextureMatrix } from '@pixi/core'; export declare interface IMeshMaterialOptions { alpha?: number; tint?: number; pluginName?: string; program?: Program; uniforms?: Dict; } export declare interface Mesh extends GlobalMixins.Mesh { } /** * Base mesh class. * * This class empowers you to have maximum flexibility to render any kind of WebGL visuals you can think of. * This class assumes a certain level of WebGL knowledge. * If you know a bit this should abstract enough away to make your life easier! * * Pretty much ALL WebGL can be broken down into the following: * - Geometry - The structure and data for the mesh. This can include anything from positions, uvs, normals, colors etc.. * - Shader - This is the shader that PixiJS will render the geometry with (attributes in the shader must match the geometry) * - State - This is the state of WebGL required to render the mesh. * * Through a combination of the above elements you can render anything you want, 2D or 3D! * @memberof PIXI */ export declare class Mesh extends Container { /** * Represents the vertex and fragment shaders that processes the geometry and runs on the GPU. * Can be shared between multiple Mesh objects. * @type {PIXI.Shader|PIXI.MeshMaterial} */ shader: T; /** * Represents the WebGL state the Mesh required to render, excludes shader and geometry. E.g., * blend mode, culling, depth testing, direction of rendering triangles, backface, etc. */ state: State; /** The way the Mesh should be drawn, can be any of the {@link PIXI.DRAW_MODES} constants. */ drawMode: DRAW_MODES; /** * Typically the index of the IndexBuffer where to start drawing. * @default 0 */ start: number; /** * How much of the geometry to draw, by default `0` renders everything. * @default 0 */ size: number; private _geometry; /** This is the caching layer used by the batcher. */ private vertexData; /** If geometry is changed used to decide to re-transform the vertexData. */ private vertexDirty; private _transformID; /** Internal roundPixels field. */ private _roundPixels; /** Batched UV's are cached for atlas textures. */ private batchUvs; /** * These are used as easy access for batching. * @private */ uvs: Float32Array; /** * These are used as easy access for batching. * @private */ indices: Uint16Array; _tintRGB: number; _texture: Texture; /** * @param geometry - The geometry the mesh will use. * @param {PIXI.MeshMaterial} shader - The shader the mesh will use. * @param state - The state that the WebGL context is required to be in to render the mesh * if no state is provided, uses {@link PIXI.State.for2d} to create a 2D state for PixiJS. * @param drawMode - The drawMode, can be any of the {@link PIXI.DRAW_MODES} constants. */ constructor(geometry: Geometry, shader: T, state?: State, drawMode?: DRAW_MODES); /** * Includes vertex positions, face indices, normals, colors, UVs, and * custom attributes within buffers, reducing the cost of passing all * this data to the GPU. Can be shared between multiple Mesh objects. */ get geometry(): Geometry; set geometry(value: Geometry); /** * To change mesh uv's, change its uvBuffer data and increment its _updateID. * @readonly */ get uvBuffer(): Buffer_2; /** * To change mesh vertices, change its uvBuffer data and increment its _updateID. * Incrementing _updateID is optional because most of Mesh objects do it anyway. * @readonly */ get verticesBuffer(): Buffer_2; /** Alias for {@link PIXI.Mesh#shader}. */ set material(value: T); get material(): T; /** * The blend mode to be applied to the Mesh. Apply a value of * `PIXI.BLEND_MODES.NORMAL` to reset the blend mode. * @default PIXI.BLEND_MODES.NORMAL; */ set blendMode(value: BLEND_MODES); get blendMode(): BLEND_MODES; /** * If true PixiJS will Math.floor() x/y values when rendering, stopping pixel interpolation. * Advantages can include sharper image quality (like text) and faster rendering on canvas. * The main disadvantage is movement of objects may appear less smooth. * To set the global default, change {@link PIXI.settings.ROUND_PIXELS} * @default false */ set roundPixels(value: boolean); get roundPixels(): boolean; /** * The multiply tint applied to the Mesh. This is a hex value. A value of * `0xFFFFFF` will remove any tint effect. * * Null for non-MeshMaterial shaders * @default 0xFFFFFF */ get tint(): number; set tint(value: number); /** The texture that the Mesh uses. Null for non-MeshMaterial shaders */ get texture(): Texture; set texture(value: Texture); /** * Standard renderer draw. * @param renderer - Instance to renderer. */ protected _render(renderer: Renderer): void; /** * Standard non-batching way of rendering. * @param renderer - Instance to renderer. */ protected _renderDefault(renderer: Renderer): void; /** * Rendering by using the Batch system. * @param renderer - Instance to renderer. */ protected _renderToBatch(renderer: Renderer): void; /** Updates vertexData field based on transform and vertices. */ calculateVertices(): void; /** Updates uv field based on from geometry uv's or batchUvs. */ calculateUvs(): void; /** * Updates the bounds of the mesh as a rectangle. The bounds calculation takes the worldTransform into account. * there must be a aVertexPosition attribute present in the geometry for bounds to be calculated correctly. */ protected _calculateBounds(): void; /** * Tests if a point is inside this mesh. Works only for PIXI.DRAW_MODES.TRIANGLES. * @param point - The point to test. * @returns - The result of the test. */ containsPoint(point: IPointData): boolean; destroy(options?: IDestroyOptions | boolean): void; /** The maximum number of vertices to consider batchable. Generally, the complexity of the geometry. */ static BATCHABLE_SIZE: number; } /** * Class controls cache for UV mapping from Texture normal space to BaseTexture normal space. * @memberof PIXI */ export declare class MeshBatchUvs { /** UV Buffer data. */ readonly data: Float32Array; /** Buffer with normalized UV's. */ uvBuffer: Buffer_2; /** Material UV matrix. */ uvMatrix: TextureMatrix; private _bufferUpdateId; private _textureUpdateId; _updateID: number; /** * @param uvBuffer - Buffer with normalized uv's * @param uvMatrix - Material UV matrix */ constructor(uvBuffer: Buffer_2, uvMatrix: TextureMatrix); /** * Updates * @param forceUpdate - force the update */ update(forceUpdate?: boolean): void; } /** * Standard 2D geometry used in PixiJS. * * Geometry can be defined without passing in a style or data if required. * * ```js * const geometry = new PIXI.Geometry(); * * geometry.addAttribute('positions', [0, 0, 100, 0, 100, 100, 0, 100], 2); * geometry.addAttribute('uvs', [0,0,1,0,1,1,0,1], 2); * geometry.addIndex([0,1,2,1,3,2]); * * ``` * @memberof PIXI */ export declare class MeshGeometry extends Geometry { /** * Dirty flag to limit update calls on Mesh. For example, * limiting updates on a single Mesh instance with a shared Geometry * within the render loop. * @private * @default -1 */ _updateId: number; /** * @param {Float32Array|number[]} [vertices] - Positional data on geometry. * @param {Float32Array|number[]} [uvs] - Texture UVs. * @param {Uint16Array|number[]} [index] - IndexBuffer */ constructor(vertices?: IArrayBuffer, uvs?: IArrayBuffer, index?: IArrayBuffer); /** * If the vertex position is updated. * @readonly * @private */ get vertexDirtyId(): number; } export declare interface MeshMaterial extends GlobalMixins.MeshMaterial { } /** * Slightly opinionated default shader for PixiJS 2D objects. * @memberof PIXI */ export declare class MeshMaterial extends Shader { /** * TextureMatrix instance for this Mesh, used to track Texture changes. * @readonly */ readonly uvMatrix: TextureMatrix; /** * `true` if shader can be batch with the renderer's batch system. * @default true */ batchable: boolean; /** * Renderer plugin for batching. * @default 'batch' */ pluginName: string; _tintRGB: number; /** * Only do update if tint or alpha changes. * @private * @default false */ private _colorDirty; private _alpha; private _tint; /** * @param uSampler - Texture that material uses to render. * @param options - Additional options * @param {number} [options.alpha=1] - Default alpha. * @param {number} [options.tint=0xFFFFFF] - Default tint. * @param {string} [options.pluginName='batch'] - Renderer plugin for batching. * @param {PIXI.Program} [options.program=0xFFFFFF] - Custom program. * @param {object} [options.uniforms] - Custom uniforms. */ constructor(uSampler: Texture, options?: IMeshMaterialOptions); /** Reference to the texture being rendered. */ get texture(): Texture; set texture(value: Texture); /** * This gets automatically set by the object using this. * @default 1 */ set alpha(value: number); get alpha(): number; /** * Multiply tint for the material. * @default 0xFFFFFF */ set tint(value: number); get tint(): number; /** Gets called automatically by the Mesh. Intended to be overridden for custom {@link MeshMaterial} objects. */ update(): void; } export { }