|
@@ -13,16 +13,16 @@ import Logger from "./Logger.js"
|
|
|
|
|
|
const logger = new Logger('xverse-bus')
|
|
const logger = new Logger('xverse-bus')
|
|
const http = new Http
|
|
const http = new Http
|
|
- , blobToDataURI = async i=>new Promise((e,t)=>{
|
|
|
|
- const r = new FileReader;
|
|
|
|
- r.readAsDataURL(i),
|
|
|
|
- r.onload = function(n) {
|
|
|
|
|
|
+const blobToDataURI = async i=>new Promise((resolve,reject)=>{
|
|
|
|
+ const fileReader = new FileReader;
|
|
|
|
+ fileReader.readAsDataURL(i),
|
|
|
|
+ fileReader.onload = function(n) {
|
|
var o;
|
|
var o;
|
|
- e((o = n.target) == null ? void 0 : o.result)
|
|
|
|
|
|
+ resolve((o = n.target) == null ? void 0 : o.result)
|
|
}
|
|
}
|
|
,
|
|
,
|
|
- r.onerror = function(n) {
|
|
|
|
- t(n)
|
|
|
|
|
|
+ fileReader.onerror = function(n) {
|
|
|
|
+ reject(n)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
)
|
|
)
|
|
@@ -48,7 +48,7 @@ function getSceneManager(i, e) {
|
|
}
|
|
}
|
|
|
|
|
|
export default class EngineProxy{
|
|
export default class EngineProxy{
|
|
- constructor(e) {
|
|
|
|
|
|
+ constructor(xverseRoom) {
|
|
E(this, "_tvs", []);
|
|
E(this, "_tvs", []);
|
|
E(this, "isRenderFirstFrame", !1);
|
|
E(this, "isRenderFirstFrame", !1);
|
|
E(this, "_idleTime", 0);
|
|
E(this, "_idleTime", 0);
|
|
@@ -74,10 +74,10 @@ export default class EngineProxy{
|
|
E(this, "engineSloppyCnt", 0);
|
|
E(this, "engineSloppyCnt", 0);
|
|
E(this, "systemStuckCnt", 0);
|
|
E(this, "systemStuckCnt", 0);
|
|
E(this, "frameRenderNumber", 0);
|
|
E(this, "frameRenderNumber", 0);
|
|
- E(this, "_setFPS", (e,t=25)=>{
|
|
|
|
|
|
+ E(this, "_setFPS", (sceneManager,t=25)=>{
|
|
logger.info("Set fps to", t);
|
|
logger.info("Set fps to", t);
|
|
const r = t > 60 ? 60 : t < 24 ? 24 : t;
|
|
const r = t > 60 ? 60 : t < 24 ? 24 : t;
|
|
- e.Engine.stopRenderLoop();
|
|
|
|
|
|
+ sceneManager.Engine.stopRenderLoop();
|
|
const n = 1e3 / r;
|
|
const n = 1e3 / r;
|
|
let o = Date.now()
|
|
let o = Date.now()
|
|
, a = Date.now()
|
|
, a = Date.now()
|
|
@@ -97,8 +97,9 @@ export default class EngineProxy{
|
|
let g = 0
|
|
let g = 0
|
|
, m = 0;
|
|
, m = 0;
|
|
if (this.room.isUpdatedRawYUVData || this.room.isPano) {
|
|
if (this.room.isUpdatedRawYUVData || this.room.isPano) {
|
|
- if (this.isRenderFirstFrame = !0,
|
|
|
|
- this._checkSceneDurationFrameNum > 0)
|
|
|
|
|
|
+ this.isRenderFirstFrame = !0
|
|
|
|
+ if (this._checkSceneDurationFrameNum > 0)
|
|
|
|
+ {
|
|
this._checkSceneFrameCount++,
|
|
this._checkSceneFrameCount++,
|
|
this.room.sceneManager.isReadyToRender({}) && this._checkSceneDurationFrameNum--,
|
|
this.room.sceneManager.isReadyToRender({}) && this._checkSceneDurationFrameNum--,
|
|
this._checkSceneFrameCount > EngineProxy._CHECK_DURATION && (this._checkSceneDurationFrameNum = EngineProxy._CHECK_DURATION,
|
|
this._checkSceneFrameCount > EngineProxy._CHECK_DURATION && (this._checkSceneDurationFrameNum = EngineProxy._CHECK_DURATION,
|
|
@@ -121,10 +122,13 @@ export default class EngineProxy{
|
|
sampleRate: .1
|
|
sampleRate: .1
|
|
}
|
|
}
|
|
}));
|
|
}));
|
|
|
|
+ }
|
|
else
|
|
else
|
|
|
|
+ {
|
|
try {
|
|
try {
|
|
- e.render()
|
|
|
|
- } catch (C) {
|
|
|
|
|
|
+ sceneManager.render()
|
|
|
|
+ }
|
|
|
|
+ catch (C) {
|
|
this.renderErrorCount++,
|
|
this.renderErrorCount++,
|
|
this.renderErrorCount > 10 && this.room.proxyEvents("renderError", {
|
|
this.renderErrorCount > 10 && this.room.proxyEvents("renderError", {
|
|
error: C
|
|
error: C
|
|
@@ -142,6 +146,7 @@ export default class EngineProxy{
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
+ }
|
|
g = Date.now() - _,
|
|
g = Date.now() - _,
|
|
this.frameRenderNumber < 1e3 && this.frameRenderNumber++,
|
|
this.frameRenderNumber < 1e3 && this.frameRenderNumber++,
|
|
this.room.networkController.rtcp.workers.UpdateYUV(),
|
|
this.room.networkController.rtcp.workers.UpdateYUV(),
|
|
@@ -174,8 +179,8 @@ export default class EngineProxy{
|
|
}
|
|
}
|
|
;
|
|
;
|
|
this.renderTimer = window.setTimeout(u, n / l)
|
|
this.renderTimer = window.setTimeout(u, n / l)
|
|
- }
|
|
|
|
- );
|
|
|
|
|
|
+ });
|
|
|
|
+
|
|
E(this, "updateStats", ()=>{
|
|
E(this, "updateStats", ()=>{
|
|
var e;
|
|
var e;
|
|
(e = this.room.stats) == null || e.assign({
|
|
(e = this.room.stats) == null || e.assign({
|
|
@@ -206,13 +211,12 @@ export default class EngineProxy{
|
|
})
|
|
})
|
|
}
|
|
}
|
|
);
|
|
);
|
|
- this.room = e
|
|
|
|
|
|
+ this.room = xverseRoom
|
|
}
|
|
}
|
|
async initEngine(e) {
|
|
async initEngine(e) {
|
|
- await this.updateBillboard(),
|
|
|
|
|
|
+ await this.updateBillboard();
|
|
logger.info("engine version:", VERSION$1);
|
|
logger.info("engine version:", VERSION$1);
|
|
- const t = logger;
|
|
|
|
- t.setLevel(LoggerLevels.Warn);
|
|
|
|
|
|
+ logger.setLevel(LoggerLevels.Warn);
|
|
const r = {
|
|
const r = {
|
|
videoResOriArray: [{
|
|
videoResOriArray: [{
|
|
width: 720,
|
|
width: 720,
|
|
@@ -252,23 +256,23 @@ export default class EngineProxy{
|
|
maxZ: 1e4
|
|
maxZ: 1e4
|
|
},
|
|
},
|
|
urlTransformer,
|
|
urlTransformer,
|
|
- logger: t,
|
|
|
|
|
|
+ logger: logger,
|
|
disableWebGL2: this.room.options.disableWebGL2 || !1
|
|
disableWebGL2: this.room.options.disableWebGL2 || !1
|
|
- }
|
|
|
|
- , n = this.room.options.resolution;
|
|
|
|
- n && (r.videoResOriArray.some(l=>l.width === n.width && l.height === n.height) || r.videoResOriArray.push(n));
|
|
|
|
- const o = this.room.sceneManager = getSceneManager(this.room.canvas, r);
|
|
|
|
- this.room.setPictureQualityLevel(this.room.options.pictureQualityLevel || "high"),
|
|
|
|
- this.room.sceneManager.staticmeshComponent.setRegionLodRule([2, 2, -1, -1, -1]),
|
|
|
|
- this.room.scene = o.Scene,
|
|
|
|
- this.room.breathPointManager = o.breathPointComponent,
|
|
|
|
- this.lightManager = o.lightComponent,
|
|
|
|
- this.registerStats(),
|
|
|
|
- this.setEnv(e),
|
|
|
|
|
|
+ };
|
|
|
|
+ const resolution = this.room.options.resolution;
|
|
|
|
+ resolution && (r.videoResOriArray.some(l=>l.width === resolution.width && l.height === resolution.height) || r.videoResOriArray.push(resolution));
|
|
|
|
+ const sceneManager = this.room.sceneManager = getSceneManager(this.room.canvas, r);
|
|
|
|
+ this.room.setPictureQualityLevel(this.room.options.pictureQualityLevel || "high");
|
|
|
|
+ this.room.sceneManager.staticmeshComponent.setRegionLodRule([2, 2, -1, -1, -1]);
|
|
|
|
+ this.room.scene = sceneManager.Scene;
|
|
|
|
+ this.room.breathPointManager = sceneManager.breathPointComponent;
|
|
|
|
+ this.lightManager = sceneManager.lightComponent;
|
|
|
|
+ this.registerStats();
|
|
|
|
+ this.setEnv(e);
|
|
await this.room.avatarManager.init();
|
|
await this.room.avatarManager.init();
|
|
const a = this._createAssetList(e);
|
|
const a = this._createAssetList(e);
|
|
- await this.loadAssets(a, ""),
|
|
|
|
- this._setFPS(o)
|
|
|
|
|
|
+ await this.loadAssets(a, "");
|
|
|
|
+ this._setFPS(sceneManager);
|
|
}
|
|
}
|
|
pause() {
|
|
pause() {
|
|
clearTimeout(this.renderTimer),
|
|
clearTimeout(this.renderTimer),
|
|
@@ -362,44 +366,44 @@ export default class EngineProxy{
|
|
return this.loadAssets(e, this.room.skinId).catch(()=>this.loadAssets(e, this.room.skinId))
|
|
return this.loadAssets(e, this.room.skinId).catch(()=>this.loadAssets(e, this.room.skinId))
|
|
}
|
|
}
|
|
async loadAssets(e, t="", r=8e3) {
|
|
async loadAssets(e, t="", r=8e3) {
|
|
- const n = Date.now();
|
|
|
|
|
|
+ const startTime = Date.now();
|
|
return this._loadAssets(e, t)._timeout(r, new InitEngineTimeoutError(`loadAssets timeout(${r}ms)`)).then(o=>(logger.infoAndReportMeasurement({
|
|
return this._loadAssets(e, t)._timeout(r, new InitEngineTimeoutError(`loadAssets timeout(${r}ms)`)).then(o=>(logger.infoAndReportMeasurement({
|
|
tag: "loadAssets",
|
|
tag: "loadAssets",
|
|
- startTime: n,
|
|
|
|
|
|
+ startTime: startTime,
|
|
metric: "loadAssets"
|
|
metric: "loadAssets"
|
|
- }),
|
|
|
|
- o)).catch(o=>(logger.infoAndReportMeasurement({
|
|
|
|
|
|
+ }),o)).catch(err=>(logger.infoAndReportMeasurement({
|
|
tag: "loadAssets",
|
|
tag: "loadAssets",
|
|
- startTime: n,
|
|
|
|
|
|
+ startTime: startTime,
|
|
metric: "loadAssets",
|
|
metric: "loadAssets",
|
|
- error: o
|
|
|
|
|
|
+ error: err
|
|
}),
|
|
}),
|
|
- Promise.reject(o)))
|
|
|
|
|
|
+ Promise.reject(err)))
|
|
}
|
|
}
|
|
async _loadAssets(e, t="") {
|
|
async _loadAssets(e, t="") {
|
|
try {
|
|
try {
|
|
const r = [];
|
|
const r = [];
|
|
- r.push(this._loadAssetsLowpolyModel(e, t)),
|
|
|
|
- await Promise.all(r),
|
|
|
|
- await this.setEnv(),
|
|
|
|
- this._checkSceneDurationFrameNum = EngineProxy._CHECK_DURATION,
|
|
|
|
- this._checkSceneNotReadyCount = 0,
|
|
|
|
- this._checkSceneFrameCount = 0,
|
|
|
|
- this.updateAnimationList(),
|
|
|
|
- this.room.loadAssetsHook()
|
|
|
|
|
|
+ r.push(this._loadAssetsLowpolyModel(e, t));
|
|
|
|
+ await Promise.all(r);
|
|
|
|
+ await this.setEnv();
|
|
|
|
+ this._checkSceneDurationFrameNum = EngineProxy._CHECK_DURATION;
|
|
|
|
+ this._checkSceneNotReadyCount = 0;
|
|
|
|
+ this._checkSceneFrameCount = 0;
|
|
|
|
+ this.updateAnimationList();
|
|
|
|
+ this.room.loadAssetsHook();
|
|
} catch (r) {
|
|
} catch (r) {
|
|
return Promise.reject(r)
|
|
return Promise.reject(r)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
updateAnimationList() {
|
|
updateAnimationList() {
|
|
if (this.room.avatarManager && this.room.avatarManager.xAvatarManager) {
|
|
if (this.room.avatarManager && this.room.avatarManager.xAvatarManager) {
|
|
- const e = this.room.skin.animationList;
|
|
|
|
- if (!e)
|
|
|
|
|
|
+ const animationList = this.room.skin.animationList;
|
|
|
|
+ if (!animationList)
|
|
|
|
+ {
|
|
return;
|
|
return;
|
|
- e.forEach(t=>{
|
|
|
|
- this.room.avatarManager.xAvatarManager.updateAnimationLists(t.animations, t.avatarId)
|
|
|
|
}
|
|
}
|
|
- )
|
|
|
|
|
|
+ animationList.forEach(t=>{
|
|
|
|
+ this.room.avatarManager.xAvatarManager.updateAnimationLists(t.animations, t.avatarId)
|
|
|
|
+ })
|
|
}
|
|
}
|
|
}
|
|
}
|
|
async _loadAssetsLowpolyModel(e, t="") {
|
|
async _loadAssetsLowpolyModel(e, t="") {
|
|
@@ -429,46 +433,46 @@ export default class EngineProxy{
|
|
className: AssetClassName.Lpm,
|
|
className: AssetClassName.Lpm,
|
|
modelUrl: f.url
|
|
modelUrl: f.url
|
|
})
|
|
})
|
|
- }
|
|
|
|
- ),
|
|
|
|
|
|
+ });
|
|
|
|
+
|
|
t != "" && t != null && this._deleteAssetsLowpolyModel(t);
|
|
t != "" && t != null && this._deleteAssetsLowpolyModel(t);
|
|
- const a = e.skinId;
|
|
|
|
- logger.info("====> from ", t, " to ", a),
|
|
|
|
|
|
+ const skinId = e.skinId;
|
|
|
|
+ logger.info("====> from ", t, " to ", skinId),
|
|
this._tvs.forEach(f=>f.clean()),
|
|
this._tvs.forEach(f=>f.clean()),
|
|
this._tvs = [];
|
|
this._tvs = [];
|
|
let s = EFitMode.cover;
|
|
let s = EFitMode.cover;
|
|
- a == "10048" && (s = EFitMode.contain),
|
|
|
|
|
|
+ skinId == "10048" && (s = EFitMode.contain)
|
|
Array.isArray(n) && n.forEach((f,d)=>{
|
|
Array.isArray(n) && n.forEach((f,d)=>{
|
|
this._tvs.push(new TV("squareTv" + d,f.modelUrl,this.room,{
|
|
this._tvs.push(new TV("squareTv" + d,f.modelUrl,this.room,{
|
|
fitMode: s
|
|
fitMode: s
|
|
}))
|
|
}))
|
|
}
|
|
}
|
|
),
|
|
),
|
|
- e.breathPointsConfig.forEach(async f=>{
|
|
|
|
|
|
+ e.breathPointsConfig.forEach(async breathPoint=>{
|
|
let d;
|
|
let d;
|
|
try {
|
|
try {
|
|
- d = await urlTransformer(f.imageUrl)
|
|
|
|
|
|
+ d = await urlTransformer(breathPoint.imageUrl)
|
|
} catch (_) {
|
|
} catch (_) {
|
|
- d = f.imageUrl,
|
|
|
|
|
|
+ d = breathPoint.imageUrl,
|
|
logger.error("urlTransformer error", _)
|
|
logger.error("urlTransformer error", _)
|
|
}
|
|
}
|
|
this.room.breathPointManager.addBreathPoint({
|
|
this.room.breathPointManager.addBreathPoint({
|
|
- id: f.id,
|
|
|
|
- position: f.position,
|
|
|
|
|
|
+ id: breathPoint.id,
|
|
|
|
+ position: breathPoint.position,
|
|
spriteSheet: d,
|
|
spriteSheet: d,
|
|
- rotation: f.rotation || {
|
|
|
|
|
|
+ rotation: breathPoint.rotation || {
|
|
pitch: 0,
|
|
pitch: 0,
|
|
yaw: 270,
|
|
yaw: 270,
|
|
roll: 0
|
|
roll: 0
|
|
},
|
|
},
|
|
billboardMode: !0,
|
|
billboardMode: !0,
|
|
- type: f.type || "no_type",
|
|
|
|
- spriteWidthNumber: f.spriteWidthNum || 1,
|
|
|
|
- spriteHeightNumber: f.spriteHeightNum || 1,
|
|
|
|
- maxVisibleRegion: f.maxVisibleRegion || 150,
|
|
|
|
- width: f.width,
|
|
|
|
- height: f.height,
|
|
|
|
- skinInfo: f.skinId
|
|
|
|
|
|
+ type: breathPoint.type || "no_type",
|
|
|
|
+ spriteWidthNumber: breathPoint.spriteWidthNum || 1,
|
|
|
|
+ spriteHeightNumber: breathPoint.spriteHeightNum || 1,
|
|
|
|
+ maxVisibleRegion: breathPoint.maxVisibleRegion || 150,
|
|
|
|
+ width: breathPoint.width,
|
|
|
|
+ height: breathPoint.height,
|
|
|
|
+ skinInfo: breathPoint.skinId
|
|
})
|
|
})
|
|
}
|
|
}
|
|
),
|
|
),
|
|
@@ -476,7 +480,7 @@ export default class EngineProxy{
|
|
this.room.sceneManager.decalComponent.addDecal({
|
|
this.room.sceneManager.decalComponent.addDecal({
|
|
id: f.id || "gbq",
|
|
id: f.id || "gbq",
|
|
meshPath: f.modelUrl,
|
|
meshPath: f.modelUrl,
|
|
- skinInfo: a
|
|
|
|
|
|
+ skinInfo: skinId
|
|
})
|
|
})
|
|
}
|
|
}
|
|
);
|
|
);
|
|
@@ -484,7 +488,7 @@ export default class EngineProxy{
|
|
, c = Array.from(u.keys()).filter(f=>!f.startsWith("region_"))
|
|
, c = Array.from(u.keys()).filter(f=>!f.startsWith("region_"))
|
|
, h = ["airship", "balloon", "ground_feiting", "ground_reqiqiu", "default"];
|
|
, h = ["airship", "balloon", "ground_feiting", "ground_reqiqiu", "default"];
|
|
return new Promise((f,d)=>{
|
|
return new Promise((f,d)=>{
|
|
- Promise.all(h.map(_=>this._parseModelsAndLoad(r, _, a))).then(()=>{
|
|
|
|
|
|
+ Promise.all(h.map(_=>this._parseModelsAndLoad(r, _, skinId))).then(()=>{
|
|
let _ = !1;
|
|
let _ = !1;
|
|
r.forEach(v=>{
|
|
r.forEach(v=>{
|
|
v.modelUrl.endsWith("zip") && (_ = !0)
|
|
v.modelUrl.endsWith("zip") && (_ = !0)
|
|
@@ -577,87 +581,92 @@ export default class EngineProxy{
|
|
skinId: e.id
|
|
skinId: e.id
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ //sceneManager.statisticComponent是XStats对象
|
|
registerStats() {
|
|
registerStats() {
|
|
- const e = this.room.sceneManager;
|
|
|
|
|
|
+ const sceneManager = this.room.sceneManager;
|
|
this.room.scene.registerAfterRender(()=>{
|
|
this.room.scene.registerAfterRender(()=>{
|
|
- var I;
|
|
|
|
- const t = e.statisticComponent.getInterFrameTimeCounter()
|
|
|
|
- , r = e.statisticComponent.getDrawCall()
|
|
|
|
- , n = e.statisticComponent.getActiveFaces()
|
|
|
|
- , o = e.statisticComponent.getFrameTimeCounter()
|
|
|
|
- , a = e.statisticComponent.getDrawCallTime()
|
|
|
|
- , s = e.statisticComponent.getAnimationTime()
|
|
|
|
- , l = e.statisticComponent.getActiveMeshEvaluationTime()
|
|
|
|
- , u = e.statisticComponent.getRenderTargetRenderTime()
|
|
|
|
- , c = e.statisticComponent.getRegisterBeforeRenderTime()
|
|
|
|
- , h = e.statisticComponent.getRegisterAfterRenderTime()
|
|
|
|
- , f = e.statisticComponent.getActiveParticles()
|
|
|
|
- , d = e.statisticComponent.getActiveBones()
|
|
|
|
- , _ = e.Scene._activeAnimatables.length
|
|
|
|
- , g = e.statisticComponent.getTotalRootNodes()
|
|
|
|
- , m = e.Scene.geometries.length
|
|
|
|
- , v = e.Scene.onBeforeRenderObservable.observers.length
|
|
|
|
- , y = e.Scene.onAfterRenderObservable.observers.length
|
|
|
|
- , b = e.statisticComponent.getTotalMeshes()
|
|
|
|
- , T = e.statisticComponent.getTotalTextures()
|
|
|
|
- , C = e.statisticComponent.getTotalMaterials()
|
|
|
|
- , A = e.statisticComponent.getSystemInfo()
|
|
|
|
- , S = A.resolution
|
|
|
|
- , P = A.driver;
|
|
|
|
- A.vender;
|
|
|
|
- const R = A.version
|
|
|
|
- , M = A.hardwareScalingLevel
|
|
|
|
- , x = S + "_" + P + "_" + R + "_" + M;
|
|
|
|
- this.interFrameCircularArray.add(t),
|
|
|
|
- this.renderTimeCircularArray.add(o),
|
|
|
|
- this.animationCircularArray.add(s),
|
|
|
|
- this.meshSelectCircularArray.add(l),
|
|
|
|
- this.drawCallTimeCircularArray.add(a),
|
|
|
|
- this.regAfterRenderCircularArray.add(h),
|
|
|
|
- this.regBeforeRenderCircularArray.add(c),
|
|
|
|
- this.renderTargetCircularArray.add(u),
|
|
|
|
- this.drawCallCntCircularArray.add(r),
|
|
|
|
- this.renderCnt += 1,
|
|
|
|
- this.renderCnt % 25 == 0 && ((I = this.room.stats) == null || I.assign({
|
|
|
|
- renderFrameTime: this.renderTimeCircularArray.getAvg(),
|
|
|
|
- maxRenderFrameTime: this.renderTimeCircularArray.getMax(),
|
|
|
|
- interFrameTime: this.interFrameCircularArray.getAvg(),
|
|
|
|
- animationTime: this.animationCircularArray.getAvg(),
|
|
|
|
- meshSelectTime: this.meshSelectCircularArray.getAvg(),
|
|
|
|
- drawcallTime: this.drawCallTimeCircularArray.getAvg(),
|
|
|
|
- idleTime: this._idleTime,
|
|
|
|
- registerBeforeRenderTime: this.regBeforeRenderCircularArray.getAvg(),
|
|
|
|
- registerAfterRenderTime: this.regAfterRenderCircularArray.getAvg(),
|
|
|
|
- renderTargetRenderTime: this.renderTargetCircularArray.getAvg(),
|
|
|
|
- fps: (1e3 / (this.renderTimeCircularArray.getAvg() + this.interFrameCircularArray.getAvg())).toFixed(2),
|
|
|
|
- drawcall: this.drawCallCntCircularArray.getAvg(),
|
|
|
|
- triangle: n.toString(),
|
|
|
|
- engineSloppyCnt: this.engineSloppyCnt,
|
|
|
|
- maxInterFrameTime: this.interFrameCircularArray.getMax(),
|
|
|
|
- maxDrawcallTime: this.drawCallTimeCircularArray.getMax(),
|
|
|
|
- maxMeshSelectTime: this.meshSelectCircularArray.getMax(),
|
|
|
|
- maxAnimationTime: this.animationCircularArray.getMax(),
|
|
|
|
- maxRegisterBeforeRenderTime: this.regBeforeRenderCircularArray.getMax(),
|
|
|
|
- maxRegisterAfterRenderTime: this.regAfterRenderCircularArray.getMax(),
|
|
|
|
- maxRenderTargetRenderTime: this.renderTargetCircularArray.getMax(),
|
|
|
|
- activeParticles: f,
|
|
|
|
- activeBones: d,
|
|
|
|
- activeAnimation: _,
|
|
|
|
- totalMeshes: b,
|
|
|
|
- totalRootNodes: g,
|
|
|
|
- totalGeometries: m,
|
|
|
|
- totalTextures: T,
|
|
|
|
- totalMaterials: C,
|
|
|
|
- registerBeforeCount: v,
|
|
|
|
- registerAfterCount: y,
|
|
|
|
- hardwareInfo: x
|
|
|
|
- }))
|
|
|
|
|
|
+ const interFrameTimeCounterCurrent = sceneManager.statisticComponent.getInterFrameTimeCounter()
|
|
|
|
+ const drawCallsCounterCurrent = sceneManager.statisticComponent.getDrawCall()
|
|
|
|
+ const activeTriangle = sceneManager.statisticComponent.getActiveFaces()
|
|
|
|
+ const frameTimeCounterCurrent = sceneManager.statisticComponent.getFrameTimeCounter()
|
|
|
|
+ const renderTimeCounterCurrent = sceneManager.statisticComponent.getDrawCallTime()
|
|
|
|
+ const animationsTimeCounterCurrent = sceneManager.statisticComponent.getAnimationTime()
|
|
|
|
+ const activeMeshesEvaluationTimeCounterCurrent = sceneManager.statisticComponent.getActiveMeshEvaluationTime()
|
|
|
|
+ const renderTargetRenderTime = sceneManager.statisticComponent.getRenderTargetRenderTime()
|
|
|
|
+ const registerBeforeTimeCounterCurrent = sceneManager.statisticComponent.getRegisterBeforeRenderTime()
|
|
|
|
+ const registerAfterTimeCounterCurrent = sceneManager.statisticComponent.getRegisterAfterRenderTime()
|
|
|
|
+ const _activeParticlesCurrent = sceneManager.statisticComponent.getActiveParticles()
|
|
|
|
+ const _activeBonesCurrent = sceneManager.statisticComponent.getActiveBones()
|
|
|
|
+ const activeAnimatablesLength = sceneManager.Scene._activeAnimatables.length
|
|
|
|
+ const rootNodesLength = sceneManager.statisticComponent.getTotalRootNodes()
|
|
|
|
+ const geometriesLength = sceneManager.Scene.geometries.length
|
|
|
|
+ const beforeRenderObservableLength = sceneManager.Scene.onBeforeRenderObservable.observers.length
|
|
|
|
+ const afterRenderObservableLength = sceneManager.Scene.onAfterRenderObservable.observers.length
|
|
|
|
+ const meshesLength = sceneManager.statisticComponent.getTotalMeshes()
|
|
|
|
+ const texturesLength = sceneManager.statisticComponent.getTotalTextures()
|
|
|
|
+ const materialsLength = sceneManager.statisticComponent.getTotalMaterials()
|
|
|
|
+ const systemInfo = sceneManager.statisticComponent.getSystemInfo()
|
|
|
|
+ const resolution = systemInfo.resolution
|
|
|
|
+ const driver = systemInfo.driver;
|
|
|
|
+ systemInfo.vender;
|
|
|
|
+ const version = systemInfo.version
|
|
|
|
+ const hardwareScalingLevel = systemInfo.hardwareScalingLevel
|
|
|
|
+ const hardwareInfo = resolution + "_" + driver + "_" + version + "_" + hardwareScalingLevel;
|
|
|
|
+ this.interFrameCircularArray.add(interFrameTimeCounterCurrent);
|
|
|
|
+ this.renderTimeCircularArray.add(frameTimeCounterCurrent);
|
|
|
|
+ this.animationCircularArray.add(animationsTimeCounterCurrent);
|
|
|
|
+ this.meshSelectCircularArray.add(activeMeshesEvaluationTimeCounterCurrent);
|
|
|
|
+ this.drawCallTimeCircularArray.add(renderTimeCounterCurrent);
|
|
|
|
+ this.regAfterRenderCircularArray.add(registerAfterTimeCounterCurrent);
|
|
|
|
+ this.regBeforeRenderCircularArray.add(registerBeforeTimeCounterCurrent);
|
|
|
|
+ this.renderTargetCircularArray.add(renderTargetRenderTime);
|
|
|
|
+ this.drawCallCntCircularArray.add(drawCallsCounterCurrent);
|
|
|
|
+ this.renderCnt += 1;
|
|
|
|
+ if(this.renderCnt % 25 == 0){
|
|
|
|
+ let stats = this.room.stats
|
|
|
|
+ if(stats != null){
|
|
|
|
+ stats.assign({
|
|
|
|
+ renderFrameTime: this.renderTimeCircularArray.getAvg(),
|
|
|
|
+ maxRenderFrameTime: this.renderTimeCircularArray.getMax(),
|
|
|
|
+ interFrameTime: this.interFrameCircularArray.getAvg(),
|
|
|
|
+ animationTime: this.animationCircularArray.getAvg(),
|
|
|
|
+ meshSelectTime: this.meshSelectCircularArray.getAvg(),
|
|
|
|
+ drawcallTime: this.drawCallTimeCircularArray.getAvg(),
|
|
|
|
+ idleTime: this._idleTime,
|
|
|
|
+ registerBeforeRenderTime: this.regBeforeRenderCircularArray.getAvg(),
|
|
|
|
+ registerAfterRenderTime: this.regAfterRenderCircularArray.getAvg(),
|
|
|
|
+ renderTargetRenderTime: this.renderTargetCircularArray.getAvg(),
|
|
|
|
+ fps: (1e3 / (this.renderTimeCircularArray.getAvg() + this.interFrameCircularArray.getAvg())).toFixed(2),
|
|
|
|
+ drawcall: this.drawCallCntCircularArray.getAvg(),
|
|
|
|
+ triangle: activeTriangle.toString(),
|
|
|
|
+ engineSloppyCnt: this.engineSloppyCnt,
|
|
|
|
+ maxInterFrameTime: this.interFrameCircularArray.getMax(),
|
|
|
|
+ maxDrawcallTime: this.drawCallTimeCircularArray.getMax(),
|
|
|
|
+ maxMeshSelectTime: this.meshSelectCircularArray.getMax(),
|
|
|
|
+ maxAnimationTime: this.animationCircularArray.getMax(),
|
|
|
|
+ maxRegisterBeforeRenderTime: this.regBeforeRenderCircularArray.getMax(),
|
|
|
|
+ maxRegisterAfterRenderTime: this.regAfterRenderCircularArray.getMax(),
|
|
|
|
+ maxRenderTargetRenderTime: this.renderTargetCircularArray.getMax(),
|
|
|
|
+ activeParticles: _activeParticlesCurrent,
|
|
|
|
+ activeBones: _activeBonesCurrent,
|
|
|
|
+ activeAnimation: activeAnimatablesLength,
|
|
|
|
+ totalMeshes: meshesLength,
|
|
|
|
+ totalRootNodes: rootNodesLength,
|
|
|
|
+ totalGeometries: geometriesLength,
|
|
|
|
+ totalTextures: texturesLength,
|
|
|
|
+ totalMaterials: materialsLength,
|
|
|
|
+ registerBeforeCount: beforeRenderObservableLength,
|
|
|
|
+ registerAfterCount: afterRenderObservableLength,
|
|
|
|
+ hardwareInfo: hardwareInfo
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
)
|
|
)
|
|
}
|
|
}
|
|
async updateBillboard() {
|
|
async updateBillboard() {
|
|
- const {options: {skinId: e}} = this.room
|
|
|
|
- , r = (await this.room.modelManager.findAssetList(e)).filter(a=>a.typeName === AssetTypeName.Textures && a.className === AssetClassName.SayBubble)
|
|
|
|
|
|
+ const {options: {skinId: skinId}} = this.room
|
|
|
|
+ , r = (await this.room.modelManager.findAssetList(skinId)).filter(a=>a.typeName === AssetTypeName.Textures && a.className === AssetClassName.SayBubble)
|
|
, n = ["bubble01", "bubble02", "bubble03"]
|
|
, n = ["bubble01", "bubble02", "bubble03"]
|
|
, o = ["bubble01_npc", "bubble02_npc", "bubble03_npc"];
|
|
, o = ["bubble01_npc", "bubble02_npc", "bubble03_npc"];
|
|
if (r.length) {
|
|
if (r.length) {
|