42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
var Extensions = require('../../../../extensions/Extensions.js');
|
|
|
|
"use strict";
|
|
class GpuShaderSystem {
|
|
constructor() {
|
|
this._gpuProgramData = /* @__PURE__ */ Object.create(null);
|
|
}
|
|
contextChange(gpu) {
|
|
this._gpu = gpu;
|
|
this.maxTextures = gpu.device.limits.maxSampledTexturesPerShaderStage;
|
|
}
|
|
getProgramData(program) {
|
|
return this._gpuProgramData[program._layoutKey] || this._createGPUProgramData(program);
|
|
}
|
|
_createGPUProgramData(program) {
|
|
const device = this._gpu.device;
|
|
const bindGroups = program.gpuLayout.map((group) => device.createBindGroupLayout({ entries: group }));
|
|
const pipelineLayoutDesc = { bindGroupLayouts: bindGroups };
|
|
this._gpuProgramData[program._layoutKey] = {
|
|
bindGroups,
|
|
pipeline: device.createPipelineLayout(pipelineLayoutDesc)
|
|
};
|
|
return this._gpuProgramData[program._layoutKey];
|
|
}
|
|
destroy() {
|
|
this._gpu = null;
|
|
this._gpuProgramData = null;
|
|
}
|
|
}
|
|
/** @ignore */
|
|
GpuShaderSystem.extension = {
|
|
type: [
|
|
Extensions.ExtensionType.WebGPUSystem
|
|
],
|
|
name: "shader"
|
|
};
|
|
|
|
exports.GpuShaderSystem = GpuShaderSystem;
|
|
//# sourceMappingURL=GpuShaderSystem.js.map
|