mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-08-01 12:56:03 +00:00
wip
This commit is contained in:
@@ -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,
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user