Skip to content

Commit

Permalink
Merge pull request #1287 from xiaoguzhu/LayaAir_3.0
Browse files Browse the repository at this point in the history
fix: Texture's bitmap reference management issue
  • Loading branch information
xiaoguzhu committed Dec 9, 2023
2 parents f39434b + 57ccabf commit b393cfb
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 47 deletions.
88 changes: 45 additions & 43 deletions src/layaAir/laya/display/Stage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -930,19 +930,31 @@ export class Stage extends Sprite {
var document: any = Browser.document;
var canvas: any = Render.canvas;
if (value) {
canvas.addEventListener('mousedown', this._requestFullscreen);
canvas.addEventListener('touchstart', this._requestFullscreen);
document.addEventListener("fullscreenchange", this._fullScreenChanged);
document.addEventListener("mozfullscreenchange", this._fullScreenChanged);
document.addEventListener("webkitfullscreenchange", this._fullScreenChanged);
document.addEventListener("msfullscreenchange", this._fullScreenChanged);
canvas.addEventListener('mousedown', requestFullscreen);
canvas.addEventListener('touchstart', requestFullscreen);
document.addEventListener("fullscreenchange", fullScreenChanged);
document.addEventListener("mozfullscreenchange", fullScreenChanged);
document.addEventListener("webkitfullscreenchange", fullScreenChanged);
document.addEventListener("msfullscreenchange", fullScreenChanged);
} else {
canvas.removeEventListener('mousedown', this._requestFullscreen);
canvas.removeEventListener('touchstart', this._requestFullscreen);
document.removeEventListener("fullscreenchange", this._fullScreenChanged);
document.removeEventListener("mozfullscreenchange", this._fullScreenChanged);
document.removeEventListener("webkitfullscreenchange", this._fullScreenChanged);
document.removeEventListener("msfullscreenchange", this._fullScreenChanged);
canvas.removeEventListener('mousedown', requestFullscreen);
canvas.removeEventListener('touchstart', requestFullscreen);
document.removeEventListener("fullscreenchange", fullScreenChanged);
document.removeEventListener("mozfullscreenchange", fullScreenChanged);
document.removeEventListener("webkitfullscreenchange", fullScreenChanged);
document.removeEventListener("msfullscreenchange", fullScreenChanged);
}
}

/**退出全屏模式*/
exitFullscreen(): void {
var document: any = Browser.document;
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
}

Expand Down Expand Up @@ -977,37 +989,6 @@ export class Stage extends Sprite {
}
}

/**@private */
private _requestFullscreen(): void {
var element: any = Browser.document.documentElement;
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.webkitRequestFullscreen) {
element.webkitRequestFullscreen();
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
}
}

/**@private */
private _fullScreenChanged(): void {
this.event(Event.FULL_SCREEN_CHANGE);
}

/**退出全屏模式*/
exitFullscreen(): void {
var document: any = Browser.document;
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
}

/**@private */
isGlobalRepaint(): boolean {
return this._globalRepaintGet;
Expand All @@ -1018,3 +999,24 @@ export class Stage extends Sprite {
this._globalRepaintSet = true;
}
}

function requestFullscreen(): void {
var element: any = Browser.document.documentElement;
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.webkitRequestFullscreen) {
element.webkitRequestFullscreen();
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
}

var canvas: any = Render.canvas;
canvas.removeEventListener('mousedown', requestFullscreen);
canvas.removeEventListener('touchstart', requestFullscreen);
}

function fullScreenChanged(): void {
ILaya.stage.event(Event.FULL_SCREEN_CHANGE);
}
2 changes: 1 addition & 1 deletion src/layaAir/laya/loaders/TextureLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class Texture2DLoader implements IResourceLoader {
if (meta) {
let platform = Browser.platform;
let fileIndex = meta.platforms?.[platform] || 0;
let fileInfo = meta.files[fileIndex];
let fileInfo = meta.files?.[fileIndex];
if (fileInfo.file) {
url = AssetDb.inst.getSubAssetURL(url, task.uuid, fileInfo.file, fileInfo.ext);
ext = fileInfo.ext;
Expand Down
22 changes: 19 additions & 3 deletions src/layaAir/laya/resource/Texture.ts
Original file line number Diff line number Diff line change
Expand Up @@ -222,9 +222,9 @@ export class Texture extends Resource {
set bitmap(value: BaseTexture) {
if (this._bitmap == value)
return;
this._bitmap && this._bitmap._removeReference();
this._bitmap && this._bitmap._removeReference(this._referenceCount);
this._bitmap = value;
value && (value._addReference());
value && (value._addReference(this._referenceCount));
}

/**
Expand All @@ -239,6 +239,22 @@ export class Texture extends Resource {
this.setTo(bitmap, uv, sourceWidth, sourceHeight);
}

/**
* @internal
*/
_addReference(count: number = 1): void {
super._addReference(count);
this._bitmap && this._bitmap._addReference(count);
}

/**
* @internal
*/
_removeReference(count: number = 1): void {
this._bitmap && this._bitmap._removeReference(count);
super._removeReference(count);
}

/**
* @internal
*/
Expand Down Expand Up @@ -441,7 +457,7 @@ export class Texture extends Resource {
let bit = this._bitmap;
this._bitmap = null;
if (bit)
bit._removeReference();
bit._removeReference(this._referenceCount);
}

/**
Expand Down

0 comments on commit b393cfb

Please sign in to comment.