Files
il/resources/public/js/cljs-runtime/module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$shader$Shader.js
2026-07-01 22:38:29 -06:00

95 lines
5.1 KiB
JavaScript

shadow$provide.module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$shader$Shader = function(global, require, module, exports) {
global = require("module$node_modules$eventemitter3$index");
var uid = require("module$node_modules$pixi_DOT_js$lib$utils$data$uid"), GlProgram = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$gl$shader$GlProgram"), BindGroup = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$gpu$shader$BindGroup"), GpuProgram = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$gpu$shader$GpuProgram"), types = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$types"), UniformGroup = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$shader$UniformGroup");
"use strict";
class Shader extends global {
constructor(options) {
super();
this.uid = uid.uid("shader");
this._uniformBindMap = Object.create(null);
this._ownedBindGroups = [];
this._destroyed = !1;
let {gpuProgram, glProgram, groups, resources, compatibleRenderers, groupMap} = options;
this.gpuProgram = gpuProgram;
this.glProgram = glProgram;
void 0 === compatibleRenderers && (compatibleRenderers = 0, gpuProgram && (compatibleRenderers |= types.RendererType.WEBGPU), glProgram && (compatibleRenderers |= types.RendererType.WEBGL));
this.compatibleRenderers = compatibleRenderers;
const nameHash = {};
resources || groups || (resources = {});
if (resources && groups) {
throw Error("[Shader] Cannot have both resources and groups");
}
if (!gpuProgram && groups && !groupMap) {
throw Error("[Shader] No group map or WebGPU shader provided - consider using resources instead.");
}
if (!gpuProgram && groups && groupMap) {
for (var i$jscomp$0 in groupMap) {
for (var j in groupMap[i$jscomp$0]) {
var uniformName = groupMap[i$jscomp$0][j];
nameHash[uniformName] = {group:i$jscomp$0, binding:j, name:uniformName};
}
}
} else if (gpuProgram && groups && !groupMap) {
uniformName = gpuProgram.structsAndGroups.groups, groupMap = {}, uniformName.forEach(data => {
groupMap[data.group] = groupMap[data.group] || {};
groupMap[data.group][data.binding] = data.name;
nameHash[data.name] = data;
});
} else if (resources) {
groups = {};
groupMap = {};
gpuProgram && gpuProgram.structsAndGroups.groups.forEach(data => {
groupMap[data.group] = groupMap[data.group] || {};
groupMap[data.group][data.binding] = data.name;
nameHash[data.name] = data;
});
i$jscomp$0 = 0;
for (const i in resources) {
nameHash[i] || (groups[99] || (groups[99] = new BindGroup.BindGroup(), this._ownedBindGroups.push(groups[99])), nameHash[i] = {group:99, binding:i$jscomp$0, name:i}, groupMap[99] = groupMap[99] || {}, groupMap[99][i$jscomp$0] = i, i$jscomp$0++);
}
for (uniformName in resources) {
if (j = uniformName, i$jscomp$0 = resources[uniformName], i$jscomp$0.source || i$jscomp$0._resourceType || (i$jscomp$0 = new UniformGroup.UniformGroup(i$jscomp$0)), j = nameHash[j]) {
groups[j.group] || (groups[j.group] = new BindGroup.BindGroup(), this._ownedBindGroups.push(groups[j.group])), groups[j.group].setResource(i$jscomp$0, j.binding);
}
}
}
this.groups = groups;
this._uniformBindMap = groupMap;
this.resources = this._buildResourceAccessor(groups, nameHash);
}
addResource(name, groupIndex, bindIndex) {
var _a, _b;
(_a = this._uniformBindMap)[groupIndex] || (_a[groupIndex] = {});
(_b = this._uniformBindMap[groupIndex])[bindIndex] || (_b[bindIndex] = name);
this.groups[groupIndex] || (this.groups[groupIndex] = new BindGroup.BindGroup(), this._ownedBindGroups.push(this.groups[groupIndex]));
}
_buildResourceAccessor(groups, nameHash) {
const uniformsOut = {};
for (const i in nameHash) {
const data = nameHash[i];
Object.defineProperty(uniformsOut, data.name, {get() {
return groups[data.group].getResource(data.binding);
}, set(value) {
groups[data.group].setResource(value, data.binding);
}});
}
return uniformsOut;
}
destroy(destroyPrograms = !1) {
this._destroyed || (this._destroyed = !0, this.emit("destroy", this), destroyPrograms && (this.gpuProgram?.destroy(), this.glProgram?.destroy()), this.glProgram = this.gpuProgram = null, this.removeAllListeners(), this._uniformBindMap = null, this._ownedBindGroups.forEach(bindGroup => {
bindGroup.destroy();
}), this.groups = this.resources = this._ownedBindGroups = null);
}
static from(options) {
const {gpu, gl, ...rest} = options;
let gpuProgram, glProgram;
gpu && (gpuProgram = GpuProgram.GpuProgram.from(gpu));
gl && (glProgram = GlProgram.GlProgram.from(gl));
return new Shader({gpuProgram, glProgram, ...rest});
}
}
exports.Shader = Shader;
};
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$shader$Shader.js.map