1 line
7.6 KiB
Plaintext
1 line
7.6 KiB
Plaintext
{"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 * @memberof rendering\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.getGpuSource(texture).createView({\n\n });\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 for (const key of Object.keys(this._hash))\n {\n this._hash[key] = null;\n }\n\n this._hash = null;\n\n (this._renderer as null) = null;\n }\n}\n"],"names":[],"mappings":"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"} |