mirror of
https://github.com/photonstorm/phaser
synced 2024-11-10 15:14:47 +00:00
The WebGLRenderer method canvasToTexture
has a new optional argument noRepeat
which will stop it from using gl.REPEAT
entirely. This is now used by the Text object to avoid it potentially switching between a REPEAT and CLAMP texture, causing texture black-outs
This commit is contained in:
parent
4beffe842a
commit
9dc53d1e5a
4 changed files with 38 additions and 16 deletions
|
@ -15,7 +15,8 @@
|
||||||
* `TileSprite.setFrame` has had both the `updateSize` and `updateOrigin` arguments removed as they didn't do anything for TileSprites and were misleading.
|
* `TileSprite.setFrame` has had both the `updateSize` and `updateOrigin` arguments removed as they didn't do anything for TileSprites and were misleading.
|
||||||
* `CameraManager.remove` has a new argument `runDestroy` which, if set, will automatically call `Camera.destroy` on the Cameras removed from the Camera Manager. You should nearly always allow this to happen (thanks jamespierce)
|
* `CameraManager.remove` has a new argument `runDestroy` which, if set, will automatically call `Camera.destroy` on the Cameras removed from the Camera Manager. You should nearly always allow this to happen (thanks jamespierce)
|
||||||
* Device.OS has been restructured to allow fake UAs from Chrome dev tools to register iOS devices.
|
* Device.OS has been restructured to allow fake UAs from Chrome dev tools to register iOS devices.
|
||||||
* Texture batching during the batch flush has been implemented in the TextureTintPipeline which resolves the issues of very low frame rates, especially on iOS devices, when using non-batched textures such as those used by Text or TileSprites. Fix #4110 #4086 (thanks @ivan @sachinhosmani @maximtsai @alexeymolchan)
|
* Texture batching during the batch flush has been implemented in the TextureTintPipeline which resolves the issues of very low frame rates, especially on iOS devices, when using non-batched textures such as those used by Text or TileSprites. Fix #4110 #4086 (thanks @ivanpopelyshev @sachinhosmani @maximtsai @alexeymolchan)
|
||||||
|
* The WebGLRenderer method `canvasToTexture` has a new optional argument `noRepeat` which will stop it from using `gl.REPEAT` entirely. This is now used by the Text object to avoid it potentially switching between a REPEAT and CLAMP texture, causing texture black-outs (thanks @ivanpopelyshev)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
|
@ -23,7 +24,6 @@
|
||||||
* If you set `pixelArt` to true in your game config (or `antialias` to false) then TileSprites will now respect this when using the Canvas Renderer and disable smoothing on the internal fill canvas.
|
* If you set `pixelArt` to true in your game config (or `antialias` to false) then TileSprites will now respect this when using the Canvas Renderer and disable smoothing on the internal fill canvas.
|
||||||
* TileSprites that were set to be interactive before they had rendered once wouldn't receive a valid input hit area, causing input to fail. They now define their size immediately, allowing them to be made interactive without having rendered. Fix #4085 (thanks @DotTheGreat)
|
* TileSprites that were set to be interactive before they had rendered once wouldn't receive a valid input hit area, causing input to fail. They now define their size immediately, allowing them to be made interactive without having rendered. Fix #4085 (thanks @DotTheGreat)
|
||||||
* The Particle Emitter Manager has been given a NOOP method called `setBlendMode` to stop warnings from being thrown if you added an emitter to a Container in the Canvas renderer. Fix #4083 (thanks @maximtsai)
|
* The Particle Emitter Manager has been given a NOOP method called `setBlendMode` to stop warnings from being thrown if you added an emitter to a Container in the Canvas renderer. Fix #4083 (thanks @maximtsai)
|
||||||
*
|
|
||||||
|
|
||||||
### Examples and TypeScript
|
### Examples and TypeScript
|
||||||
|
|
||||||
|
|
|
@ -253,6 +253,14 @@ var Text = new Class({
|
||||||
// Set the resolution
|
// Set the resolution
|
||||||
this.frame.source.resolution = this.style.resolution;
|
this.frame.source.resolution = this.style.resolution;
|
||||||
|
|
||||||
|
if (this.renderer && this.renderer.gl)
|
||||||
|
{
|
||||||
|
// Clear the default 1x1 glTexture, as we override it later
|
||||||
|
this.renderer.deleteTexture(this.frame.source.glTexture);
|
||||||
|
|
||||||
|
this.frame.source.glTexture = null;
|
||||||
|
}
|
||||||
|
|
||||||
this.initRTL();
|
this.initRTL();
|
||||||
|
|
||||||
if (style && style.padding)
|
if (style && style.padding)
|
||||||
|
@ -1168,7 +1176,7 @@ var Text = new Class({
|
||||||
|
|
||||||
if (this.renderer.gl)
|
if (this.renderer.gl)
|
||||||
{
|
{
|
||||||
this.frame.source.glTexture = this.renderer.canvasToTexture(canvas, this.frame.source.glTexture);
|
this.frame.source.glTexture = this.renderer.canvasToTexture(canvas, this.frame.source.glTexture, true);
|
||||||
|
|
||||||
this.frame.glTexture = this.frame.source.glTexture;
|
this.frame.glTexture = this.frame.source.glTexture;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1824,28 +1824,40 @@ var WebGLRenderer = new Class({
|
||||||
*
|
*
|
||||||
* @param {HTMLCanvasElement} srcCanvas - The Canvas element that will be used to populate the texture.
|
* @param {HTMLCanvasElement} srcCanvas - The Canvas element that will be used to populate the texture.
|
||||||
* @param {WebGLTexture} [dstTexture] - Is this going to replace an existing texture? If so, pass it here.
|
* @param {WebGLTexture} [dstTexture] - Is this going to replace an existing texture? If so, pass it here.
|
||||||
|
* @param {boolean} [noRepeat=false] - Should this canvas never be allowed to set REPEAT? (such as for Text objects)
|
||||||
*
|
*
|
||||||
* @return {WebGLTexture} The newly created WebGL Texture.
|
* @return {WebGLTexture} The newly created WebGL Texture.
|
||||||
*/
|
*/
|
||||||
canvasToTexture: function (srcCanvas, dstTexture)
|
canvasToTexture: function (srcCanvas, dstTexture, noRepeat)
|
||||||
{
|
{
|
||||||
|
if (noRepeat === undefined) { noRepeat = false; }
|
||||||
|
|
||||||
var gl = this.gl;
|
var gl = this.gl;
|
||||||
|
|
||||||
var wrapping = gl.CLAMP_TO_EDGE;
|
if (!dstTexture)
|
||||||
|
|
||||||
if (IsSizePowerOfTwo(srcCanvas.width, srcCanvas.height))
|
|
||||||
{
|
{
|
||||||
wrapping = gl.REPEAT;
|
var wrapping = gl.CLAMP_TO_EDGE;
|
||||||
|
|
||||||
|
if (!noRepeat && IsSizePowerOfTwo(srcCanvas.width, srcCanvas.height))
|
||||||
|
{
|
||||||
|
wrapping = gl.REPEAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
dstTexture = this.createTexture2D(0, gl.NEAREST, gl.NEAREST, wrapping, wrapping, gl.RGBA, srcCanvas, srcCanvas.width, srcCanvas.height, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.setTexture2D(dstTexture, 0);
|
||||||
|
|
||||||
|
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, srcCanvas);
|
||||||
|
|
||||||
|
dstTexture.width = srcCanvas.width;
|
||||||
|
dstTexture.height = srcCanvas.height;
|
||||||
|
|
||||||
|
this.setTexture2D(null, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
var newTexture = this.createTexture2D(0, gl.NEAREST, gl.NEAREST, wrapping, wrapping, gl.RGBA, srcCanvas, srcCanvas.width, srcCanvas.height, true);
|
return dstTexture;
|
||||||
|
|
||||||
if (newTexture && dstTexture)
|
|
||||||
{
|
|
||||||
this.deleteTexture(dstTexture);
|
|
||||||
}
|
|
||||||
|
|
||||||
return newTexture;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -238,6 +238,7 @@ var TextureSource = new Class({
|
||||||
|
|
||||||
// Update all the Frames using this TextureSource
|
// Update all the Frames using this TextureSource
|
||||||
|
|
||||||
|
/*
|
||||||
var index = this.texture.getTextureSourceIndex(this);
|
var index = this.texture.getTextureSourceIndex(this);
|
||||||
|
|
||||||
var frames = this.texture.getFramesFromTextureSource(index, true);
|
var frames = this.texture.getFramesFromTextureSource(index, true);
|
||||||
|
@ -246,6 +247,7 @@ var TextureSource = new Class({
|
||||||
{
|
{
|
||||||
frames[i].glTexture = this.glTexture;
|
frames[i].glTexture = this.glTexture;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue