UNPKG

@babylonjs/viewer

Version:

The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.

74 lines (71 loc) 2.54 kB
import { _ as _getShadowTaskCasterMeshes, b as _setShadowTaskInputPreloader } from './index-By0tcgYN.esm.js'; function createShadowTask(engine, scene) { const shadowGenerators = /* @__PURE__ */ new Set(); const recordedVersion = /* @__PURE__ */ new WeakMap(); _setShadowTaskInputPreloader(preloadShadowTaskInput); const task = { name: "shadow", engine, scene, _passes: [], async _preload() { const loads = []; for (const light of scene.lights) { const sg = light.shadowGenerator; const casterMeshes = sg ? _getShadowTaskCasterMeshes(sg) : null; if (sg?._preloadShadowTask && casterMeshes) { shadowGenerators.add(sg); loads.push(sg._preloadShadowTask(casterMeshes)); } } await Promise.all(loads); }, record() { task._passes.length = 0; for (const light of scene.lights) { const sg = light.shadowGenerator; const casterMeshes = sg ? _getShadowTaskCasterMeshes(sg) : null; if (sg?._ensureShadowTaskState && casterMeshes) { shadowGenerators.add(sg); const state = sg._ensureShadowTaskState(engine, scene, casterMeshes); state._task.record(); } } }, execute() { let draws = 0; for (const light of scene.lights) { const sg = light.shadowGenerator; const casterMeshes = sg ? _getShadowTaskCasterMeshes(sg) : null; if (sg?._ensureShadowTaskState && sg._renderShadowMap && casterMeshes) { shadowGenerators.add(sg); const existing = sg._shadowTaskState ?? null; const state = sg._ensureShadowTaskState(engine, scene, casterMeshes); if (!existing || existing._casterMeshes !== casterMeshes || recordedVersion.get(sg) !== scene._renderableVersion) { state._task.record(); recordedVersion.set(sg, scene._renderableVersion); } draws += sg._renderShadowMap(engine, state); } } return draws; }, dispose() { task._passes.length = 0; for (const sg of shadowGenerators) { const state = sg._shadowTaskState; if (state) { state._task.dispose(); sg._shadowTaskState = void 0; } } shadowGenerators.clear(); } }; return task; } async function preloadShadowTaskInput(shadowGenerator, casterMeshes) { await shadowGenerator._preloadShadowTask?.(casterMeshes); } export { createShadowTask }; //# sourceMappingURL=shadow-task-GkN23aZk.esm.js.map