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 • 8.11 kB
Source Map (JSON)
{"version":3,"file":"GpuGraphicsAdaptor.mjs","sources":["../../../../src/scene/graphics/gpu/GpuGraphicsAdaptor.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { Matrix } from '../../../maths/matrix/Matrix';\nimport { getTextureBatchBindGroup } from '../../../rendering/batcher/gpu/getTextureBatchBindGroup';\nimport { compileHighShaderGpuProgram } from '../../../rendering/high-shader/compileHighShaderToProgram';\nimport { colorBit } from '../../../rendering/high-shader/shader-bits/colorBit';\nimport { generateTextureBatchBit } from '../../../rendering/high-shader/shader-bits/generateTextureBatchBit';\nimport { localUniformBitGroup2 } from '../../../rendering/high-shader/shader-bits/localUniformBit';\nimport { roundPixelsBit } from '../../../rendering/high-shader/shader-bits/roundPixelsBit';\nimport { Shader } from '../../../rendering/renderers/shared/shader/Shader';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup';\nimport { type Renderer } from '../../../rendering/renderers/types';\n\nimport type { Batch } from '../../../rendering/batcher/shared/Batcher';\nimport type { GpuEncoderSystem } from '../../../rendering/renderers/gpu/GpuEncoderSystem';\nimport type { WebGPURenderer } from '../../../rendering/renderers/gpu/WebGPURenderer';\nimport type { Topology } from '../../../rendering/renderers/shared/geometry/const';\nimport type { Graphics } from '../shared/Graphics';\nimport type { GraphicsContextSystem } from '../shared/GraphicsContextSystem';\nimport type { GraphicsAdaptor, GraphicsPipeLike } from '../shared/GraphicsPipe';\n\n/**\n * A GraphicsAdaptor that uses the GPU to render graphics.\n * @category rendering\n * @ignore\n */\nexport class GpuGraphicsAdaptor implements GraphicsAdaptor\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGPUPipesAdaptor,\n ],\n name: 'graphics',\n } as const;\n\n public shader: Shader;\n\n private _maxTextures = 0;\n\n public contextChange(renderer: Renderer): void\n {\n const localUniforms = new UniformGroup({\n uTransformMatrix: { value: new Matrix(), type: 'mat3x3<f32>' },\n uColor: { value: new Float32Array([1, 1, 1, 1]), type: 'vec4<f32>' },\n uRound: { value: 0, type: 'f32' },\n });\n\n this._maxTextures = renderer.limits.maxBatchableTextures;\n\n const gpuProgram = compileHighShaderGpuProgram({\n name: 'graphics',\n bits: [\n colorBit,\n generateTextureBatchBit(this._maxTextures),\n\n localUniformBitGroup2,\n roundPixelsBit\n ]\n });\n\n this.shader = new Shader({\n gpuProgram,\n resources: {\n // added on the fly!\n localUniforms,\n },\n });\n }\n\n public execute(graphicsPipe: GraphicsPipeLike, renderable: Graphics): void\n {\n const context = renderable.context;\n const shader = context.customShader || this.shader;\n const renderer = graphicsPipe.renderer as WebGPURenderer;\n const contextSystem = renderer.graphicsContext as GraphicsContextSystem;\n\n const {\n batcher, instructions\n } = contextSystem.getContextRenderData(context);\n\n // WebGPU specific...\n\n // TODO perf test this a bit...\n const encoder = renderer.encoder as GpuEncoderSystem;\n\n encoder.setGeometry(batcher.geometry, shader.gpuProgram);\n\n const globalUniformsBindGroup = renderer.globalUniforms.bindGroup;\n\n encoder.setBindGroup(0, globalUniformsBindGroup, shader.gpuProgram);\n\n const localBindGroup = (renderer as WebGPURenderer)\n .renderPipes.uniformBatch.getUniformBindGroup(shader.resources.localUniforms, true);\n\n encoder.setBindGroup(2, localBindGroup, shader.gpuProgram);\n\n const batches = instructions.instructions as Batch[];\n\n let topology: Topology = null;\n\n for (let i = 0; i < instructions.instructionSize; i++)\n {\n const batch = batches[i];\n\n if (batch.topology !== topology)\n {\n topology = batch.topology;\n\n encoder.setPipelineFromGeometryProgramAndState(\n batcher.geometry,\n shader.gpuProgram,\n graphicsPipe.state,\n batch.topology\n );\n }\n\n shader.groups[1] = batch.bindGroup;\n\n if (!batch.gpuBindGroup)\n {\n const textureBatch = batch.textures;\n\n batch.bindGroup = getTextureBatchBindGroup(\n textureBatch.textures,\n textureBatch.count,\n this._maxTextures\n );\n\n batch.gpuBindGroup = renderer.bindGroup.getBindGroup(\n batch.bindGroup, shader.gpuProgram, 1\n );\n }\n\n encoder.setBindGroup(1, batch.bindGroup, shader.gpuProgram);\n\n encoder.renderPassEncoder.drawIndexed(batch.size, 1, batch.start);\n }\n }\n\n public destroy(): void\n {\n this.shader.destroy(true);\n this.shader = null;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAyBO,MAAM,kBAAA,CACb;AAAA,EADO,WAAA,GAAA;AAYH,IAAA,IAAA,CAAQ,YAAA,GAAe,CAAA;AAAA,EAAA;AAAA,EAEhB,cAAc,QAAA,EACrB;AACI,IAAA,MAAM,aAAA,GAAgB,IAAI,YAAA,CAAa;AAAA,MACnC,kBAAkB,EAAE,KAAA,EAAO,IAAI,MAAA,EAAO,EAAG,MAAM,aAAA,EAAc;AAAA,MAC7D,MAAA,EAAQ,EAAE,KAAA,EAAO,IAAI,YAAA,CAAa,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAA,EAAG,MAAM,WAAA,EAAY;AAAA,MACnE,MAAA,EAAQ,EAAE,KAAA,EAAO,CAAA,EAAG,MAAM,KAAA;AAAM,KACnC,CAAA;AAED,IAAA,IAAA,CAAK,YAAA,GAAe,SAAS,MAAA,CAAO,oBAAA;AAEpC,IAAA,MAAM,aAAa,2BAAA,CAA4B;AAAA,MAC3C,IAAA,EAAM,UAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACF,QAAA;AAAA,QACA,uBAAA,CAAwB,KAAK,YAAY,CAAA;AAAA,QAEzC,qBAAA;AAAA,QACA;AAAA;AACJ,KACH,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,MAAA,CAAO;AAAA,MACrB,UAAA;AAAA,MACA,SAAA,EAAW;AAAA;AAAA,QAEP;AAAA;AACJ,KACH,CAAA;AAAA,EACL;AAAA,EAEO,OAAA,CAAQ,cAAgC,UAAA,EAC/C;AACI,IAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,YAAA,IAAgB,IAAA,CAAK,MAAA;AAC5C,IAAA,MAAM,WAAW,YAAA,CAAa,QAAA;AAC9B,IAAA,MAAM,gBAAgB,QAAA,CAAS,eAAA;AAE/B,IAAA,MAAM;AAAA,MACF,OAAA;AAAA,MAAS;AAAA,KACb,GAAI,aAAA,CAAc,oBAAA,CAAqB,OAAO,CAAA;AAK9C,IAAA,MAAM,UAAU,QAAA,CAAS,OAAA;AAEzB,IAAA,OAAA,CAAQ,WAAA,CAAY,OAAA,CAAQ,QAAA,EAAU,MAAA,CAAO,UAAU,CAAA;AAEvD,IAAA,MAAM,uBAAA,GAA0B,SAAS,cAAA,CAAe,SAAA;AAExD,IAAA,OAAA,CAAQ,YAAA,CAAa,CAAA,EAAG,uBAAA,EAAyB,MAAA,CAAO,UAAU,CAAA;AAElE,IAAA,MAAM,cAAA,GAAkB,SACnB,WAAA,CAAY,YAAA,CAAa,oBAAoB,MAAA,CAAO,SAAA,CAAU,eAAe,IAAI,CAAA;AAEtF,IAAA,OAAA,CAAQ,YAAA,CAAa,CAAA,EAAG,cAAA,EAAgB,MAAA,CAAO,UAAU,CAAA;AAEzD,IAAA,MAAM,UAAU,YAAA,CAAa,YAAA;AAE7B,IAAA,IAAI,QAAA,GAAqB,IAAA;AAEzB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,iBAAiB,CAAA,EAAA,EAClD;AACI,MAAA,MAAM,KAAA,GAAQ,QAAQ,CAAC,CAAA;AAEvB,MAAA,IAAI,KAAA,CAAM,aAAa,QAAA,EACvB;AACI,QAAA,QAAA,GAAW,KAAA,CAAM,QAAA;AAEjB,QAAA,OAAA,CAAQ,sCAAA;AAAA,UACJ,OAAA,CAAQ,QAAA;AAAA,UACR,MAAA,CAAO,UAAA;AAAA,UACP,YAAA,CAAa,KAAA;AAAA,UACb,KAAA,CAAM;AAAA,SACV;AAAA,MACJ;AAEA,MAAA,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,GAAI,KAAA,CAAM,SAAA;AAEzB,MAAA,IAAI,CAAC,MAAM,YAAA,EACX;AACI,QAAA,MAAM,eAAe,KAAA,CAAM,QAAA;AAE3B,QAAA,KAAA,CAAM,SAAA,GAAY,wBAAA;AAAA,UACd,YAAA,CAAa,QAAA;AAAA,UACb,YAAA,CAAa,KAAA;AAAA,UACb,IAAA,CAAK;AAAA,SACT;AAEA,QAAA,KAAA,CAAM,YAAA,GAAe,SAAS,SAAA,CAAU,YAAA;AAAA,UACpC,KAAA,CAAM,SAAA;AAAA,UAAW,MAAA,CAAO,UAAA;AAAA,UAAY;AAAA,SACxC;AAAA,MACJ;AAEA,MAAA,OAAA,CAAQ,YAAA,CAAa,CAAA,EAAG,KAAA,CAAM,SAAA,EAAW,OAAO,UAAU,CAAA;AAE1D,MAAA,OAAA,CAAQ,kBAAkB,WAAA,CAAY,KAAA,CAAM,IAAA,EAAM,CAAA,EAAG,MAAM,KAAK,CAAA;AAAA,IACpE;AAAA,EACJ;AAAA,EAEO,OAAA,GACP;AACI,IAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAI,CAAA;AACxB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,EAClB;AACJ;AAAA;AAvHa,kBAAA,CAGK,SAAA,GAAY;AAAA,EACtB,IAAA,EAAM;AAAA,IACF,aAAA,CAAc;AAAA,GAClB;AAAA,EACA,IAAA,EAAM;AACV,CAAA;;;;"}