138 lines
3.6 KiB
TypeScript
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);
|
|
}
|
|
|