Skip to content

Commit 260490f

Browse files
committed
Fixed issue in PIXI.canUseNewCanvasBlendModes which would create false positives in browsers that supported multiply in Canvas path/fill ops, but not for drawImage (Samsung S5 for example). Now uses more accurate magenta / yellow mix test.
1 parent d6ea8fb commit 260490f

2 files changed

Lines changed: 19 additions & 7 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ Version 2.3.0 - "Tarabon" - in dev
7777
* SoundManager.unlock checks for audio `start` support and falls back to `noteOn` if not found.
7878
* Sprite.frame and AnimationManager.frame wouldn't return the correct index if a sprite sheet was being used unless it had first been set via the setter.
7979
* Error in diffX and diffY calculation in Tilemap.paste (thanks @amelia410 #1446)
80+
* Fixed issue in PIXI.canUseNewCanvasBlendModes which would create false positives in browsers that supported `multiply` in Canvas path/fill ops, but not for `drawImage` (Samsung S5 for example). Now uses more accurate magenta / yellow mix test.
8081

8182
For changes in previous releases please see the extensive [Version History](https://github.com/photonstorm/phaser/blob/master/CHANGELOG.md).
8283

src/pixi/utils/Utils.js

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,24 +166,35 @@ PIXI.unpackColorRGB = function(r, g, b)//r, g, b, a)
166166
*/
167167

168168
/**
169-
* Checks whether the Canvas BlendModes are supported by the current browser
169+
* Checks whether the Canvas BlendModes are supported by the current browser for drawImage
170170
*
171171
* @method canUseNewCanvasBlendModes
172172
* @return {Boolean} whether they are supported
173173
*/
174174
PIXI.canUseNewCanvasBlendModes = function()
175175
{
176176
if (typeof document === 'undefined') return false;
177+
178+
var pngHead = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAABAQMAAADD8p2OAAAAA1BMVEX/';
179+
var pngEnd = 'AAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==';
180+
181+
var magenta = new Image();
182+
magenta.src = pngHead + 'AP804Oa6' + pngEnd;
183+
184+
var yellow = new Image();
185+
yellow.src = pngHead + '/wCKxvRF' + pngEnd;
186+
177187
var canvas = document.createElement('canvas');
178-
canvas.width = 1;
188+
canvas.width = 6;
179189
canvas.height = 1;
180190
var context = canvas.getContext('2d');
181-
context.fillStyle = '#000';
182-
context.fillRect(0,0,1,1);
183191
context.globalCompositeOperation = 'multiply';
184-
context.fillStyle = '#fff';
185-
context.fillRect(0,0,1,1);
186-
return context.getImageData(0,0,1,1).data[0] === 0;
192+
context.drawImage(magenta, 0, 0);
193+
context.drawImage(yellow, 2, 0);
194+
195+
var data = context.getImageData(2,0,1,1).data;
196+
197+
return (data[0] === 255 && data[1] === 0 && data[2] === 0);
187198
};
188199

189200
/**

0 commit comments

Comments
 (0)