mirror of
https://github.com/photonstorm/phaser
synced 2024-11-21 20:23:19 +00:00
RenderTarget.resize
will now check the autoResize
property before applying the change. Textures that have been locked to a fixed size, such as FX POT buffers, will no longer be resized to the full canvas dimensions, causing Out of Memory errors on some mobile devices. Fix #6914
This commit is contained in:
parent
22bd58599c
commit
509de6ae51
1 changed files with 27 additions and 15 deletions
|
@ -160,7 +160,7 @@ var RenderTarget = new Class({
|
||||||
*/
|
*/
|
||||||
this.forceClamp = forceClamp;
|
this.forceClamp = forceClamp;
|
||||||
|
|
||||||
this.resize(width, height);
|
this.init(width, height);
|
||||||
|
|
||||||
if (autoResize)
|
if (autoResize)
|
||||||
{
|
{
|
||||||
|
@ -173,6 +173,28 @@ var RenderTarget = new Class({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up this Render Target to the given width and height, creating a new
|
||||||
|
* frame buffer and texture. This method is called automatically by the constructor
|
||||||
|
* and at no other time.
|
||||||
|
*
|
||||||
|
* @method Phaser.Renderer.WebGL.RenderTarget#init
|
||||||
|
* @since 3.86.0
|
||||||
|
*
|
||||||
|
* @param {number} width - The new width of this Render Target.
|
||||||
|
* @param {number} height - The new height of this Render Target.
|
||||||
|
*/
|
||||||
|
init: function (width, height)
|
||||||
|
{
|
||||||
|
var renderer = this.renderer;
|
||||||
|
|
||||||
|
this.texture = renderer.createTextureFromSource(null, width, height, this.minFilter, this.forceClamp);
|
||||||
|
this.framebuffer = renderer.createFramebuffer(width, height, this.texture, this.hasDepthBuffer);
|
||||||
|
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets if this Render Target should automatically resize when the WebGL Renderer
|
* Sets if this Render Target should automatically resize when the WebGL Renderer
|
||||||
* emits a resize event.
|
* emits a resize event.
|
||||||
|
@ -210,9 +232,6 @@ var RenderTarget = new Class({
|
||||||
* them using the new sizes.
|
* them using the new sizes.
|
||||||
*
|
*
|
||||||
* This method is called automatically by the pipeline during its resize handler.
|
* This method is called automatically by the pipeline during its resize handler.
|
||||||
*
|
|
||||||
* Previous to Phaser v3.85 this method would only run if `autoResize` was `true`,
|
|
||||||
* it will now run regardless.
|
|
||||||
*
|
*
|
||||||
* @method Phaser.Renderer.WebGL.RenderTarget#resize
|
* @method Phaser.Renderer.WebGL.RenderTarget#resize
|
||||||
* @since 3.50.0
|
* @since 3.50.0
|
||||||
|
@ -224,7 +243,7 @@ var RenderTarget = new Class({
|
||||||
*/
|
*/
|
||||||
resize: function (width, height)
|
resize: function (width, height)
|
||||||
{
|
{
|
||||||
if (this.willResize(width, height))
|
if (this.autoResize && this.willResize(width, height))
|
||||||
{
|
{
|
||||||
var renderer = this.renderer;
|
var renderer = this.renderer;
|
||||||
|
|
||||||
|
@ -264,16 +283,9 @@ var RenderTarget = new Class({
|
||||||
width = Math.round(width * this.scale);
|
width = Math.round(width * this.scale);
|
||||||
height = Math.round(height * this.scale);
|
height = Math.round(height * this.scale);
|
||||||
|
|
||||||
if (width <= 0)
|
width = Math.max(width, 1);
|
||||||
{
|
height = Math.max(height, 1);
|
||||||
width = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (height <= 0)
|
|
||||||
{
|
|
||||||
height = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (width !== this.width || height !== this.height);
|
return (width !== this.width || height !== this.height);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue