UNPKG

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">

1 lines 11.9 kB
{"version":3,"file":"DefaultBatcher.mjs","sources":["../../../../src/rendering/batcher/shared/DefaultBatcher.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { Batcher } from './Batcher';\nimport { BatchGeometry } from './BatchGeometry';\nimport { DefaultShader } from './DefaultShader';\n\nimport type { Matrix } from '../../../maths/matrix/Matrix';\nimport type { Shader } from '../../renderers/shared/shader/Shader';\nimport type { BatchableMeshElement, BatchableQuadElement, BatcherOptions } from './Batcher';\n\nlet defaultShader: Shader = null;\n\n/**\n * Represents the common elements for default batch rendering.\n * This interface defines the properties that are used by the DefaultBatcher\n * to render elements efficiently in a batch.\n * @category rendering\n * @advanced\n */\nexport interface DefaultBatchElements\n{\n /**\n * The color of the element that will be multiplied with the texture color.\n * This is typically represented as a 32-bit integer in RGBA format.\n */\n color: number;\n\n /**\n * Determines whether the element should be rounded to the nearest pixel.\n * - 0: No rounding (default)\n * - 1: Round to nearest pixel\n * This can help with visual consistency, especially for pixel art styles.\n */\n roundPixels: 0 | 1;\n\n /**\n * The transform matrix of the element.\n * This matrix represents the position, scale, rotation, and skew of the element.\n */\n transform: Matrix;\n}\n\n/**\n * Represents a batchable quad element with default batch properties.\n * @category rendering\n * @advanced\n */\nexport interface DefaultBatchableQuadElement extends BatchableQuadElement, DefaultBatchElements {}\n\n/**\n * Represents a batchable mesh element with default batch properties.\n * @category rendering\n * @advanced\n */\nexport interface DefaultBatchableMeshElement extends BatchableMeshElement, DefaultBatchElements {}\n\n/**\n * The default batcher is used to batch quads and meshes. This batcher will batch the following elements:\n * - tints\n * - roundPixels\n * - texture\n * - transform\n * @category rendering\n * @advanced\n */\nexport class DefaultBatcher extends Batcher\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.Batcher,\n ],\n name: 'default',\n } as const;\n\n public geometry = new BatchGeometry();\n public shader: DefaultShader;\n\n public name = DefaultBatcher.extension.name;\n\n /** The size of one attribute. 1 = 32 bit. x, y, u, v, color, textureIdAndRound -> total = 6 */\n public vertexSize = 6;\n\n constructor(options: BatcherOptions)\n {\n super(options);\n\n defaultShader ??= new DefaultShader(options.maxTextures);\n\n this.shader = defaultShader;\n }\n\n /**\n * Packs the attributes of a DefaultBatchableMeshElement into the provided views.\n * @param element - The DefaultBatchableMeshElement to pack.\n * @param float32View - The Float32Array view to pack into.\n * @param uint32View - The Uint32Array view to pack into.\n * @param index - The starting index in the views.\n * @param textureId - The texture ID to use.\n */\n public packAttributes(\n element: DefaultBatchableMeshElement,\n float32View: Float32Array,\n uint32View: Uint32Array,\n index: number,\n textureId: number\n )\n {\n const textureIdAndRound = (textureId << 16) | (element.roundPixels & 0xFFFF);\n\n const wt = element.transform;\n\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n\n const { positions, uvs } = element;\n\n const argb = element.color;\n\n const offset = element.attributeOffset;\n const end = offset + element.attributeSize;\n\n for (let i = offset; i < end; i++)\n {\n const i2 = i * 2;\n\n const x = positions[i2];\n const y = positions[(i2) + 1];\n\n float32View[index++] = (a * x) + (c * y) + tx;\n float32View[index++] = (d * y) + (b * x) + ty;\n\n float32View[index++] = uvs[i2];\n float32View[index++] = uvs[(i2) + 1];\n\n uint32View[index++] = argb;\n uint32View[index++] = textureIdAndRound;\n }\n }\n\n /**\n * Packs the attributes of a DefaultBatchableQuadElement into the provided views.\n * @param element - The DefaultBatchableQuadElement to pack.\n * @param float32View - The Float32Array view to pack into.\n * @param uint32View - The Uint32Array view to pack into.\n * @param index - The starting index in the views.\n * @param textureId - The texture ID to use.\n */\n public packQuadAttributes(\n element: DefaultBatchableQuadElement,\n float32View: Float32Array,\n uint32View: Uint32Array,\n index: number,\n textureId: number\n )\n {\n const texture = element.texture;\n\n const wt = element.transform;\n\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n\n const bounds = element.bounds;\n\n const w0 = bounds.maxX;\n const w1 = bounds.minX;\n const h0 = bounds.maxY;\n const h1 = bounds.minY;\n\n const uvs = texture.uvs;\n\n // _ _ _ _\n // a b g r\n const argb = element.color;\n\n const textureIdAndRound = (textureId << 16) | (element.roundPixels & 0xFFFF);\n\n float32View[index + 0] = (a * w1) + (c * h1) + tx;\n float32View[index + 1] = (d * h1) + (b * w1) + ty;\n\n float32View[index + 2] = uvs.x0;\n float32View[index + 3] = uvs.y0;\n\n uint32View[index + 4] = argb;\n uint32View[index + 5] = textureIdAndRound;\n\n // xy\n float32View[index + 6] = (a * w0) + (c * h1) + tx;\n float32View[index + 7] = (d * h1) + (b * w0) + ty;\n\n float32View[index + 8] = uvs.x1;\n float32View[index + 9] = uvs.y1;\n\n uint32View[index + 10] = argb;\n uint32View[index + 11] = textureIdAndRound;\n\n // xy\n float32View[index + 12] = (a * w0) + (c * h0) + tx;\n float32View[index + 13] = (d * h0) + (b * w0) + ty;\n\n float32View[index + 14] = uvs.x2;\n float32View[index + 15] = uvs.y2;\n\n uint32View[index + 16] = argb;\n uint32View[index + 17] = textureIdAndRound;\n\n // xy\n float32View[index + 18] = (a * w1) + (c * h0) + tx;\n float32View[index + 19] = (d * h0) + (b * w1) + ty;\n\n float32View[index + 20] = uvs.x3;\n float32View[index + 21] = uvs.y3;\n\n uint32View[index + 22] = argb;\n uint32View[index + 23] = textureIdAndRound;\n }\n\n /**\n * Updates the maximum number of textures that can be used in the shader.\n * @param maxTextures - The maximum number of textures that can be used in the shader.\n * @internal\n */\n public _updateMaxTextures(maxTextures: number): void\n {\n if (this.shader.maxTextures === maxTextures) return;\n defaultShader = new DefaultShader(maxTextures);\n this.shader = defaultShader;\n }\n\n public override destroy(): void\n {\n // do not destroy default shader!\n this.shader = null;\n super.destroy();\n }\n}\n\n"],"names":[],"mappings":"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"}