This commit is contained in:
syuilo
2026-07-31 11:37:15 +09:00
parent ac9309b587
commit f02afababf
13 changed files with 33 additions and 33 deletions
@@ -21,7 +21,7 @@ export abstract class EngineBase<EVs extends EngineBaseEvents> extends EventEmit
}> {
declare _eventTypes?: EVs;
protected engine: BABYLON.WebGPUEngine;
protected babylonEngine: BABYLON.WebGPUEngine;
public scene: BABYLON.Scene;
abstract sr: BABYLON.SnapshotRenderingHelper;
abstract lightContainer: BABYLON.ClusteredLightContainer;
@@ -44,14 +44,14 @@ export abstract class EngineBase<EVs extends EngineBaseEvents> extends EventEmit
}> = new EventEmitter();
constructor(options: {
engine: BABYLON.WebGPUEngine;
babylonEngine: BABYLON.WebGPUEngine;
fps: number | null;
}) {
super();
this.fps = options.fps;
this.engine = options.engine;
this.babylonEngine = options.babylonEngine;
// doNotHandleContextLostがtrueだとそもそも呼ばれない
//babylonEngine.onContextLostObservable.add(() => {
// os.alert({
@@ -60,18 +60,18 @@ export abstract class EngineBase<EVs extends EngineBaseEvents> extends EventEmit
// text: i18n.ts._miWorld.crushed_description,
// });
//});
this.engine._device.lost.then((info) => { // TODO: babylonEngineの内部プロパティに依存しない方法をforumで聞く
this.babylonEngine._device.lost.then((info) => { // TODO: babylonEngineの内部プロパティに依存しない方法をforumで聞く
this.ev('contextlost', { reason: info.reason, message: info.message }); // transferableじゃないデータが含まれている可能性も考慮してinfoそのままは送らない
});
this.scene = new BABYLON.Scene(this.engine);
this.scene = new BABYLON.Scene(this.babylonEngine);
}
private currentRafId: number | null = null;
protected startRenderLoop() {
if (this.fps == null) {
this.engine.runRenderLoop(() => {
this.babylonEngine.runRenderLoop(() => {
this.scene.render();
});
} else {
@@ -88,9 +88,9 @@ export abstract class EngineBase<EVs extends EngineBaseEvents> extends EventEmit
if (delta <= interval) return;
then = timeStamp - (delta % interval);
this.engine.beginFrame();
this.babylonEngine.beginFrame();
this.scene.render();
this.engine.endFrame();
this.babylonEngine.endFrame();
};
// workerで実行される可能性がある
@@ -99,7 +99,7 @@ export abstract class EngineBase<EVs extends EngineBaseEvents> extends EventEmit
}
public pauseRender() { // TODO: srと同じく参照カウント方式にした方が便利そう
this.engine.stopRenderLoop();
this.babylonEngine.stopRenderLoop();
if (this.currentRafId != null) {
// workerで実行される可能性がある
cancelAnimationFrame(this.currentRafId);
@@ -118,7 +118,7 @@ export abstract class EngineBase<EVs extends EngineBaseEvents> extends EventEmit
}
public async takeScreenshot() {
return await BABYLON.Tools.CreateScreenshotAsync(this.engine, this.scene.activeCamera!, { precision: 1 });
return await BABYLON.Tools.CreateScreenshotAsync(this.babylonEngine, this.scene.activeCamera!, { precision: 1 });
}
public abstract resize(): void;
@@ -223,7 +223,7 @@ export abstract class EngineBase<EVs extends EngineBaseEvents> extends EventEmit
}
public destroy() {
this.engine.stopRenderLoop();
this.babylonEngine.stopRenderLoop();
if (this.currentRafId != null) {
// workerで実行される可能性がある
cancelAnimationFrame(this.currentRafId);
@@ -232,7 +232,7 @@ export abstract class EngineBase<EVs extends EngineBaseEvents> extends EventEmit
for (const playerContainer of this.playerContainers) {
playerContainer.destroy();
}
this.engine.dispose();
this.babylonEngine.dispose();
this.scene.dispose();
this.disposed = true;
}
@@ -28,12 +28,12 @@ export class AvatarPreviewEngine extends EngineBase<{ // PlayerPreviewEngineに
private profile: PlayerProfile;
constructor(profile: PlayerProfile, options: {
engine: BABYLON.WebGPUEngine;
babylonEngine: BABYLON.WebGPUEngine;
graphicsQuality: number;
fps: number | null;
}) {
super({
engine: options.engine,
babylonEngine: options.babylonEngine,
fps: options.fps,
});
@@ -193,7 +193,7 @@ export class AvatarPreviewEngine extends EngineBase<{ // PlayerPreviewEngineに
// ~~...が、一旦無効にしたらしたで複数のマテリアルがそれぞれ入れ替わる(?)という謎の現象が発生するためコメントアウトしとく(エラー出てもレンダリングが止まったりするわけでもないし)~~
// ↑追記: engine.resizeした後に一瞬待つことで回避できることが判明
this.sr.disableSnapshotRendering();
this.engine.resize(true);
this.babylonEngine.resize(true);
// workerで実行される可能性がある
setTimeout(() => {
@@ -21,7 +21,7 @@ export async function createAvatarPreviewEngine(params: {
if (params.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2);
const engine = new AvatarPreviewEngine(params.profile, {
engine: babylonEngine,
babylonEngine: babylonEngine,
...params.options,
});
@@ -29,7 +29,7 @@ onmessage = async (event) => {
if (event.data.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2);
engine = new AvatarPreviewEngine(profile, {
engine: babylonEngine,
babylonEngine: babylonEngine,
...event.data.options,
});
@@ -44,7 +44,7 @@ export class WorldEngine extends EngineBase<{
private isGodMode = false;
constructor(options: {
engine: BABYLON.WebGPUEngine;
babylonEngine: BABYLON.WebGPUEngine;
graphicsQuality: number;
fps: number | null;
antialias: boolean;
@@ -54,7 +54,7 @@ export class WorldEngine extends EngineBase<{
show2dAvatarOnAvatar: boolean;
}) {
super({
engine: options.engine,
babylonEngine: options.babylonEngine,
fps: options.fps,
});
@@ -259,7 +259,7 @@ export class WorldEngine extends EngineBase<{
}
public resize() {
this.engine.resize(true);
this.babylonEngine.resize(true);
}
public destroy() {
@@ -30,7 +30,7 @@ export async function createWorldEngine(params: {
if (params.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2);
const engine = new WorldEngine({
engine: babylonEngine,
babylonEngine: babylonEngine,
...params.options,
});
@@ -202,7 +202,7 @@ export class RoomEngine extends EngineBase<{
private inited = false;
constructor(roomState: RoomState, roomAttachments: RoomAttachments, options: {
engine: BABYLON.WebGPUEngine;
babylonEngine: BABYLON.WebGPUEngine;
graphicsQuality: number;
fps: number | null;
antialias: boolean;
@@ -212,7 +212,7 @@ export class RoomEngine extends EngineBase<{
show2dAvatarOnAvatar: boolean;
}) {
super({
engine: options.engine,
babylonEngine: options.babylonEngine,
fps: options.fps,
});
@@ -1560,7 +1560,7 @@ export class RoomEngine extends EngineBase<{
// ~~...が、一旦無効にしたらしたで複数のマテリアルがそれぞれ入れ替わる(?)という謎の現象が発生するためコメントアウトしとく(エラー出てもレンダリングが止まったりするわけでもないし)~~
// ↑追記: engine.resizeした後に一瞬待つことで回避できることが判明
this.sr.disableSnapshotRendering();
this.engine.resize(true);
this.babylonEngine.resize(true);
// workerで実行される可能性がある
setTimeout(() => {
@@ -33,7 +33,7 @@ export async function createRoomEngine(params: {
if (params.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2);
const engine = new RoomEngine(params.roomState, params.roomAttachments, {
engine: babylonEngine,
babylonEngine: babylonEngine,
...params.options,
});
@@ -34,12 +34,12 @@ export class RoomFurniturePreviewEngine extends EngineBase<{
private graphicsQuality: number;
constructor(options: {
engine: BABYLON.WebGPUEngine;
babylonEngine: BABYLON.WebGPUEngine;
graphicsQuality: number;
fps: number | null;
}) {
super({
engine: options.engine,
babylonEngine: options.babylonEngine,
fps: options.fps,
});
@@ -140,7 +140,7 @@ export class RoomFurniturePreviewEngine extends EngineBase<{
this.zGridPreviewPlane.isVisible = false;
window.setTimeout(() => {
BABYLON.Tools.CreateScreenshotUsingRenderTarget(this.engine, camera, { width: 256, height: 256 }, undefined, undefined, undefined, true, `${camelToKebab(this.furnitureContainer.type!)}.png`);
BABYLON.Tools.CreateScreenshotUsingRenderTarget(this.babylonEngine, camera, { width: 256, height: 256 }, undefined, undefined, undefined, true, `${camelToKebab(this.furnitureContainer.type!)}.png`);
}, 100);
};
}
@@ -308,7 +308,7 @@ export class RoomFurniturePreviewEngine extends EngineBase<{
// ~~...が、一旦無効にしたらしたで複数のマテリアルがそれぞれ入れ替わる(?)という謎の現象が発生するためコメントアウトしとく(エラー出てもレンダリングが止まったりするわけでもないし)~~
// ↑追記: engine.resizeした後に一瞬待つことで回避できることが判明
this.sr.disableSnapshotRendering();
this.engine.resize(true);
this.babylonEngine.resize(true);
// workerで実行される可能性がある
setTimeout(() => {
@@ -20,7 +20,7 @@ export async function createRoomPreviewEngine(params: {
if (params.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2);
const engine = new RoomFurniturePreviewEngine({
engine: babylonEngine,
babylonEngine: babylonEngine,
...params.options,
});
@@ -27,7 +27,7 @@ onmessage = async (event) => {
if (event.data.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2);
engine = new RoomFurniturePreviewEngine({
engine: babylonEngine,
babylonEngine: babylonEngine,
...event.data.options,
});
@@ -30,7 +30,7 @@ onmessage = async (event) => {
if (event.data.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2);
engine = new RoomEngine(roomState, roomAttachments, {
engine: babylonEngine,
babylonEngine: babylonEngine,
...event.data.options,
});
@@ -27,7 +27,7 @@ onmessage = async (event) => {
if (event.data.options.resolution === 0.5) babylonEngine.setHardwareScalingLevel(2);
engine = new WorldEngine({
engine: babylonEngine,
babylonEngine: babylonEngine,
...event.data.options,
});