playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
43 lines (42 loc) • 1.72 kB
JavaScript
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
import { DebugGraphics } from "../../platform/graphics/debug-graphics.js";
import { RenderPass } from "../../platform/graphics/render-pass.js";
import { SHADER_FORWARD } from "../../scene/constants.js";
class RenderPassLightmapper extends RenderPass {
constructor(device, renderer, camera, worldClusters, receivers, lightArray) {
super(device);
/** @type {BindGroup[]} */
__publicField(this, "viewBindGroups", []);
this.renderer = renderer;
this.camera = camera;
this.worldClusters = worldClusters;
this.receivers = receivers;
this.lightArray = lightArray;
}
destroy() {
this.viewBindGroups.forEach((bg) => {
bg.defaultUniformBuffer.destroy();
bg.destroy();
});
this.viewBindGroups.length = 0;
}
execute() {
const device = this.device;
DebugGraphics.pushGpuMarker(device, "Lightmapper");
const { renderer, camera, receivers, renderTarget, worldClusters, lightArray } = this;
if (device.supportsUniformBuffers && !renderer.viewUniformFormat) {
renderer.initViewBindGroupFormat(renderer.scene.clusteredLightingEnabled);
}
renderer.renderForwardLayer(camera, renderTarget, null, void 0, SHADER_FORWARD, this.viewBindGroups, {
meshInstances: receivers,
splitLights: lightArray,
lightClusters: worldClusters
});
DebugGraphics.popGpuMarker(device);
}
}
export {
RenderPassLightmapper
};