UNPKG

6.46 kBSource Map (JSON)View Raw
1{"version":3,"file":"BatchSystem.mjs","sources":["../../src/batch/BatchSystem.ts"],"sourcesContent":["import { ObjectRenderer } from './ObjectRenderer';\n\nimport type { ISystem } from '../system/ISystem';\nimport type { Renderer } from '../Renderer';\nimport type { BaseTexture } from '../textures/BaseTexture';\nimport type { BatchTextureArray } from './BatchTextureArray';\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport { extensions, ExtensionType } from '@pixi/extensions';\n\n/**\n * System plugin to the renderer to manage batching.\n * @memberof PIXI\n */\nexport class BatchSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'batch',\n };\n\n /** An empty renderer. */\n public readonly emptyRenderer: ObjectRenderer;\n\n /** The currently active ObjectRenderer. */\n public currentRenderer: ObjectRenderer;\n private renderer: Renderer;\n\n /**\n * @param renderer - The renderer this System works for.\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n this.emptyRenderer = new ObjectRenderer(renderer);\n this.currentRenderer = this.emptyRenderer;\n }\n\n /**\n * Changes the current renderer to the one given in parameter\n * @param objectRenderer - The object renderer to use.\n */\n setObjectRenderer(objectRenderer: ObjectRenderer): void\n {\n if (this.currentRenderer === objectRenderer)\n {\n return;\n }\n\n this.currentRenderer.stop();\n this.currentRenderer = objectRenderer;\n\n this.currentRenderer.start();\n }\n\n /**\n * This should be called if you wish to do some custom rendering\n * It will basically render anything that may be batched up such as sprites\n */\n flush(): void\n {\n this.setObjectRenderer(this.emptyRenderer);\n }\n\n /** Reset the system to an empty renderer */\n reset(): void\n {\n this.setObjectRenderer(this.emptyRenderer);\n }\n\n /**\n * Handy function for batch renderers: copies bound textures in first maxTextures locations to array\n * sets actual _batchLocation for them\n * @param arr - arr copy destination\n * @param maxTextures - number of copied elements\n */\n copyBoundTextures(arr: BaseTexture[], maxTextures: number): void\n {\n const { boundTextures } = this.renderer.texture;\n\n for (let i = maxTextures - 1; i >= 0; --i)\n {\n arr[i] = boundTextures[i] || null;\n if (arr[i])\n {\n arr[i]._batchLocation = i;\n }\n }\n }\n\n /**\n * Assigns batch locations to textures in array based on boundTextures state.\n * All textures in texArray should have `_batchEnabled = _batchId`,\n * and their count should be less than `maxTextures`.\n * @param texArray - textures to bound\n * @param boundTextures - current state of bound textures\n * @param batchId - marker for _batchEnabled param of textures in texArray\n * @param maxTextures - number of texture locations to manipulate\n */\n boundArray(texArray: BatchTextureArray, boundTextures: Array<BaseTexture>,\n batchId: number, maxTextures: number): void\n {\n const { elements, ids, count } = texArray;\n let j = 0;\n\n for (let i = 0; i < count; i++)\n {\n const tex = elements[i];\n const loc = tex._batchLocation;\n\n if (loc >= 0 && loc < maxTextures\n && boundTextures[loc] === tex)\n {\n ids[i] = loc;\n continue;\n }\n\n while (j < maxTextures)\n {\n const bound = boundTextures[j];\n\n if (bound && bound._batchEnabled === batchId\n && bound._batchLocation === j)\n {\n j++;\n continue;\n }\n\n ids[i] = j;\n tex._batchLocation = j;\n boundTextures[j] = tex;\n break;\n }\n }\n }\n\n /**\n * @ignore\n */\n destroy(): void\n {\n this.renderer = null;\n }\n}\n\nextensions.add(BatchSystem);\n"],"names":[],"mappings":"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"}
\No newline at end of file