Files
heros/assets/resources/expbg.ts
2024-08-03 23:54:37 +08:00

138 lines
3.6 KiB
TypeScript

import { _decorator, cclegacy, Color, Component, Director, director, dynamicAtlasManager, Label, macro, profiler, Scene, setDisplayStats, Toggle } from 'cc';
import { MultBatch2D } from './multTextures/MultTextures';
const { ccclass, property } = _decorator;
//仅供测试使用,不用复制到项目
macro.CLEANUP_IMAGE_CACHE = false;
dynamicAtlasManager.enabled = true;
let isAutoBatch = true;
let isMultexture = true;
@ccclass('expbg')
export class expbg extends Component {
@property(Label)
drawcall!:Label;
@property(Label)
fps!:Label;
@property(Label)
render!:Label;
@property(Label)
triangle!:Label;
toggle:Array<Toggle> = [];
protected start(): void {
profiler.showStats();
this.toggle = this.node.getComponentsInChildren(Toggle)!;
isMultexture = this.toggle[0].isChecked = MultBatch2D.enable;
isAutoBatch = this.toggle[1].isChecked = dynamicAtlasManager.enabled;
this.changeColor();
}
changeColor(){
let all = isMultexture&&isAutoBatch;
if(all){
this.drawcall.color = Color.GREEN;
}else{
this.drawcall.color = isMultexture? new Color(255,100,0,255):Color.RED;
}
}
btMultexture(){
isMultexture = this.toggle[0].isChecked;
// _mulMaterial.enable = isMultexture;
// resetRenders = !isMultexture;
this.changeColor();
}
btAutoBatch(){
isAutoBatch = this.toggle[1].isChecked;
// dynamicAtlasManager.enabled = isAutoBatch;
// resetRenders = !isAutoBatch;
this.changeColor();
}
btExit(){
director.loadScene('main');
}
lateUpdate(dt:number){
let state = null;
if(cclegacy.profiler.stats){
state = cclegacy.profiler.stats;
}else{
state = cclegacy.profiler._stats;
}
let dc = state.draws.counter._value;
let tris = state.tricount.counter._value;
let fps = state.fps.counter._averageValue;
let render = state.render.counter._averageValue;
//director.root!.device.numDrawCalls;
this.drawcall.string = "dc: " + dc;
this.fps.string = 'fps: '+fps.toFixed(2);
// this.triangle.string = "triangles: "+tris;
this.render.string = 'render: '+render.toFixed(2);
}
}
let renders:Set<any> = new Set();
director.on(Director.EVENT_BEFORE_DRAW,()=>{
let resetRenders = false;
if(MultBatch2D.enable != isMultexture){
MultBatch2D.enable = isMultexture;
resetRenders = true;
}
if(dynamicAtlasManager.enabled != isAutoBatch){
dynamicAtlasManager.enabled = isAutoBatch;
resetRenders = true;
}
if(resetRenders){
resetRenders = false;
renders.forEach((render)=>{
if(render){
let rd = render.renderData;
rd && render.markForUpdateRenderData(true);
}
});
}
});
let UIMeshRenderer = cclegacy.UIMeshRenderer.prototype;
let UIMeshDisable = UIMeshRenderer.onDisable;
let UIMeshEnable = UIMeshRenderer.onEnable;
UIMeshRenderer.onEnable = function(){
renders.add(this);
UIMeshEnable.call(this);
}
UIMeshRenderer.onDisable = function(){
renders.delete(this);
UIMeshDisable.call(this);
}
let UIRenderer = cclegacy.internal.UIRenderer.prototype;
let UIDisable = UIRenderer.onDisable;
let UIEnable = UIRenderer.onEnable;
UIRenderer.onEnable = function(){
renders.add(this);
UIEnable.call(this);
}
UIRenderer.onDisable = function(){
renders.delete(this);
UIDisable.call(this);
}