immersive2/src/vrcore/initializeEngine.ts
Michael Mainguy 58668443c4 Fix initialization errors when navigating to db/public/local
- Fix null reference error in buildColor.ts by initializing metadata.tools array
- Add physics engine availability check in buildRig to prevent PhysicsAggregate creation before engine is ready
- Remove duplicate scene initialization by eliminating redundant initializeEngine() call
- These fixes resolve WebGL shader compilation errors and prevent app crashes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-15 16:25:15 -05:00

42 lines
1.1 KiB
TypeScript

import {
Color3, Engine, Scene, WebGPUEngine
} from "@babylonjs/core";
import { DefaultScene } from "../defaultScene";
import log from "loglevel";
export interface EngineInitializerParams {
canvas: HTMLCanvasElement;
useWebGpu: boolean;
onSceneReady: (scene: Scene) => Promise<void>;
}
export async function initializeEngine(params: EngineInitializerParams): Promise<Engine | WebGPUEngine> {
const logger = log.getLogger('EngineInitializer');
if (!params.canvas) {
logger.error('Canvas not found');
return null;
}
let engine = null;
if (params.useWebGpu) {
engine = new WebGPUEngine(params.canvas);
await (engine as WebGPUEngine).initAsync();
} else {
engine = new Engine(params.canvas, true);
}
engine.setHardwareScalingLevel(1 / window.devicePixelRatio);
const scene = new Scene(engine);
DefaultScene.Scene = scene;
scene.ambientColor = new Color3(.1, .1, .1);
await params.onSceneReady(scene);
engine.runRenderLoop(() => {
scene.render();
});
return engine;
}