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 • 7.26 kB
Source Map (JSON)
{"version":3,"file":"BindGroupSystem.mjs","sources":["../../../../src/rendering/renderers/gpu/BindGroupSystem.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\n\nimport type { Buffer } from '../shared/buffer/Buffer';\nimport type { BufferResource } from '../shared/buffer/BufferResource';\nimport type { UniformGroup } from '../shared/shader/UniformGroup';\nimport type { System } from '../shared/system/System';\nimport type { TextureSource } from '../shared/texture/sources/TextureSource';\nimport type { TextureStyle } from '../shared/texture/TextureStyle';\nimport type { GPU } from './GpuDeviceSystem';\nimport type { BindGroup } from './shader/BindGroup';\nimport type { BindResource } from './shader/BindResource';\nimport type { GpuProgram } from './shader/GpuProgram';\nimport type { WebGPURenderer } from './WebGPURenderer';\n\n/**\n * This manages the WebGPU bind groups. this is how data is bound to a shader when rendering\n * @category rendering\n * @advanced\n */\nexport class BindGroupSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGPUSystem,\n ],\n name: 'bindGroup',\n } as const;\n\n private readonly _renderer: WebGPURenderer;\n\n private _hash: Record<string, GPUBindGroup> = Object.create(null);\n private _gpu: GPU;\n\n constructor(renderer: WebGPURenderer)\n {\n this._renderer = renderer;\n }\n\n protected contextChange(gpu: GPU): void\n {\n this._gpu = gpu;\n }\n\n public getBindGroup(bindGroup: BindGroup, program: GpuProgram, groupIndex: number): GPUBindGroup\n {\n bindGroup._updateKey();\n\n const gpuBindGroup = this._hash[bindGroup._key] || this._createBindGroup(bindGroup, program, groupIndex);\n\n return gpuBindGroup;\n }\n\n private _createBindGroup(group: BindGroup, program: GpuProgram, groupIndex: number): GPUBindGroup\n {\n const device = this._gpu.device;\n const groupLayout = program.layout[groupIndex];\n const entries: GPUBindGroupEntry[] = [];\n const renderer = this._renderer;\n\n for (const j in groupLayout)\n {\n const resource: BindResource = group.resources[j] ?? group.resources[groupLayout[j]];\n let gpuResource: GPUSampler | GPUTextureView | GPUExternalTexture | GPUBufferBinding;\n // TODO make this dynamic..\n\n if (resource._resourceType === 'uniformGroup')\n {\n const uniformGroup = resource as UniformGroup;\n\n renderer.ubo.updateUniformGroup(uniformGroup as UniformGroup);\n\n const buffer = uniformGroup.buffer;\n\n gpuResource = {\n buffer: renderer.buffer.getGPUBuffer(buffer),\n offset: 0,\n size: buffer.descriptor.size,\n };\n }\n else if (resource._resourceType === 'buffer')\n {\n const buffer = resource as Buffer;\n\n gpuResource = {\n buffer: renderer.buffer.getGPUBuffer(buffer),\n offset: 0,\n size: buffer.descriptor.size,\n };\n }\n else if (resource._resourceType === 'bufferResource')\n {\n const bufferResource = resource as BufferResource;\n\n gpuResource = {\n buffer: renderer.buffer.getGPUBuffer(bufferResource.buffer),\n offset: bufferResource.offset,\n size: bufferResource.size,\n };\n }\n else if (resource._resourceType === 'textureSampler')\n {\n const sampler = resource as TextureStyle;\n\n gpuResource = renderer.texture.getGpuSampler(sampler);\n }\n else if (resource._resourceType === 'textureSource')\n {\n const texture = resource as TextureSource;\n\n gpuResource = renderer.texture.getTextureView(texture);\n }\n\n entries.push({\n binding: groupLayout[j],\n resource: gpuResource,\n });\n }\n\n const layout = renderer.shader.getProgramData(program).bindGroups[groupIndex];\n\n const gpuBindGroup = device.createBindGroup({\n layout,\n entries,\n });\n\n this._hash[group._key] = gpuBindGroup;\n\n return gpuBindGroup;\n }\n\n public destroy(): void\n {\n this._hash = null;\n (this._renderer as null) = null;\n }\n}\n"],"names":[],"mappings":"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"}