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 5.19 kB
{"version":3,"file":"GpuBatchAdaptor.mjs","sources":["../../../../src/rendering/batcher/gpu/GpuBatchAdaptor.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { State } from '../../renderers/shared/state/State';\nimport { getTextureBatchBindGroup } from './getTextureBatchBindGroup';\n\nimport type { GpuEncoderSystem } from '../../renderers/gpu/GpuEncoderSystem';\nimport type { WebGPURenderer } from '../../renderers/gpu/WebGPURenderer';\nimport type { Geometry } from '../../renderers/shared/geometry/Geometry';\nimport type { Shader } from '../../renderers/shared/shader/Shader';\nimport type { Batch } from '../shared/Batcher';\nimport type { BatcherAdaptor, BatcherPipe } from '../shared/BatcherPipe';\n\nconst tempState = State.for2d();\n\n/**\n * A BatcherAdaptor that uses the GPU to render batches.\n * @category rendering\n * @ignore\n */\nexport class GpuBatchAdaptor implements BatcherAdaptor\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGPUPipesAdaptor,\n ],\n name: 'batch',\n } as const;\n\n private _shader: Shader;\n private _geometry: Geometry;\n\n public start(batchPipe: BatcherPipe, geometry: Geometry, shader: Shader): void\n {\n const renderer = batchPipe.renderer as WebGPURenderer;\n const encoder = renderer.encoder as GpuEncoderSystem;\n const program = shader.gpuProgram;\n\n this._shader = shader;\n this._geometry = geometry;\n\n encoder.setGeometry(geometry, program);\n\n tempState.blendMode = 'normal';\n\n // this just initiates the pipeline, so we can then set bind groups on it\n renderer.pipeline.getPipeline(\n geometry,\n program,\n tempState\n );\n\n const globalUniformsBindGroup = renderer.globalUniforms.bindGroup;\n\n // low level - we need to reset the bind group at location 1 to null\n // this is because we directly manipulate the bound buffer in the execute function for\n // performance reasons.\n // setting it to null ensures that the next bind group we set at location 1 will\n // be the one we want.\n encoder.resetBindGroup(1);\n\n encoder.setBindGroup(0, globalUniformsBindGroup, program);\n }\n\n public execute(batchPipe: BatcherPipe, batch: Batch): void\n {\n const program = this._shader.gpuProgram;\n const renderer = batchPipe.renderer as WebGPURenderer;\n const encoder = renderer.encoder as GpuEncoderSystem;\n\n if (!batch.bindGroup)\n {\n const textureBatch = batch.textures;\n\n batch.bindGroup = getTextureBatchBindGroup(\n textureBatch.textures,\n textureBatch.count,\n renderer.limits.maxBatchableTextures\n );\n }\n\n tempState.blendMode = batch.blendMode;\n\n const gpuBindGroup = renderer.bindGroup.getBindGroup(\n batch.bindGroup, program, 1\n );\n\n const pipeline = renderer.pipeline.getPipeline(\n this._geometry,\n program,\n tempState,\n batch.topology\n );\n\n batch.bindGroup._touch(renderer.gc.now, renderer.tick);\n\n encoder.setPipeline(pipeline);\n\n encoder.renderPassEncoder.setBindGroup(1, gpuBindGroup);\n encoder.renderPassEncoder.drawIndexed(batch.size, 1, batch.start);\n }\n}\n"],"names":[],"mappings":";;;;;AAWA,MAAM,SAAA,GAAY,MAAM,KAAA,EAAM;AAOvB,MAAM,eAAA,CACb;AAAA,EAYW,KAAA,CAAM,SAAA,EAAwB,QAAA,EAAoB,MAAA,EACzD;AACI,IAAA,MAAM,WAAW,SAAA,CAAU,QAAA;AAC3B,IAAA,MAAM,UAAU,QAAA,CAAS,OAAA;AACzB,IAAA,MAAM,UAAU,MAAA,CAAO,UAAA;AAEvB,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAA,CAAK,SAAA,GAAY,QAAA;AAEjB,IAAA,OAAA,CAAQ,WAAA,CAAY,UAAU,OAAO,CAAA;AAErC,IAAA,SAAA,CAAU,SAAA,GAAY,QAAA;AAGtB,IAAA,QAAA,CAAS,QAAA,CAAS,WAAA;AAAA,MACd,QAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACJ;AAEA,IAAA,MAAM,uBAAA,GAA0B,SAAS,cAAA,CAAe,SAAA;AAOxD,IAAA,OAAA,CAAQ,eAAe,CAAC,CAAA;AAExB,IAAA,OAAA,CAAQ,YAAA,CAAa,CAAA,EAAG,uBAAA,EAAyB,OAAO,CAAA;AAAA,EAC5D;AAAA,EAEO,OAAA,CAAQ,WAAwB,KAAA,EACvC;AACI,IAAA,MAAM,OAAA,GAAU,KAAK,OAAA,CAAQ,UAAA;AAC7B,IAAA,MAAM,WAAW,SAAA,CAAU,QAAA;AAC3B,IAAA,MAAM,UAAU,QAAA,CAAS,OAAA;AAEzB,IAAA,IAAI,CAAC,MAAM,SAAA,EACX;AACI,MAAA,MAAM,eAAe,KAAA,CAAM,QAAA;AAE3B,MAAA,KAAA,CAAM,SAAA,GAAY,wBAAA;AAAA,QACd,YAAA,CAAa,QAAA;AAAA,QACb,YAAA,CAAa,KAAA;AAAA,QACb,SAAS,MAAA,CAAO;AAAA,OACpB;AAAA,IACJ;AAEA,IAAA,SAAA,CAAU,YAAY,KAAA,CAAM,SAAA;AAE5B,IAAA,MAAM,YAAA,GAAe,SAAS,SAAA,CAAU,YAAA;AAAA,MACpC,KAAA,CAAM,SAAA;AAAA,MAAW,OAAA;AAAA,MAAS;AAAA,KAC9B;AAEA,IAAA,MAAM,QAAA,GAAW,SAAS,QAAA,CAAS,WAAA;AAAA,MAC/B,IAAA,CAAK,SAAA;AAAA,MACL,OAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA,CAAM;AAAA,KACV;AAEA,IAAA,KAAA,CAAM,UAAU,MAAA,CAAO,QAAA,CAAS,EAAA,CAAG,GAAA,EAAK,SAAS,IAAI,CAAA;AAErD,IAAA,OAAA,CAAQ,YAAY,QAAQ,CAAA;AAE5B,IAAA,OAAA,CAAQ,iBAAA,CAAkB,YAAA,CAAa,CAAA,EAAG,YAAY,CAAA;AACtD,IAAA,OAAA,CAAQ,kBAAkB,WAAA,CAAY,KAAA,CAAM,IAAA,EAAM,CAAA,EAAG,MAAM,KAAK,CAAA;AAAA,EACpE;AACJ;AAAA;AAlFa,eAAA,CAGK,SAAA,GAAY;AAAA,EACtB,IAAA,EAAM;AAAA,IACF,aAAA,CAAc;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AACV,CAAA;;;;"}