Phaser 3 + iOS/iPadOS15 major issues

Hi,

I work for an online gaming company and we have a slot game engine which has been running Phaser CE up until recently but we are now updating the engine to use Phaser 3.

Android and desktop have always been pretty great performance-wise using Phaser CE but iOS and iPadOS had some issues where either Canvas or WebGL would perform bad and so we had to change the renderer for various devices.

So now we come to Phaser 3 and we are having big issues.
The canvas renderer is giving us 1-2fps on an iPhone 12.
Using WebGL we are getting around 30fps maximum on the same device.

This is a massive performance drop and we have deduced that our mask that we use on the reels is knocking around 20fps from the game…which is nuts!

Does anyone have any idea what might be causing these issues in Phaser 3 + iOS/iPadOS15?

Regards.

:wave:

https://bugs.webkit.org/show_bug.cgi?id=230749

That particle demo in the issue report runs 60fps on my iPhone.
I’m not denying it is a genuine issue, but is this related to my post as I don’t seem to get slowdown with that particle demo link?

Regards.

I don’t know if it’s related but it’s the only iOS 15 WebGL performance bug I’m aware of. :slight_smile:

Maybe there’s a better way to do the masking.

I’m also having the same issue with masks on iOS 15. We have looked into geometry masking, bitmap masking and texture cropping, but are seeing consistent fps drops.

Any suggestions for a better way to do the masking?

We are doing similar to this:

const shape = game.make.graphics();
shape.beginPath();          
shape.fillRect(x, y, width, height);      
this.mask = shape.createGeometryMask();        
this.graphics.setMask(this.mask);

That’s correct, although setCrop() is probably better for plain rectangle “masks”.

I don’t know any general strategies for mask performance besides use fewer masks.

If you only see problems on iOS 15 then you may just have to wait for the Safari fix. :frowning:

Unfortunately setCrop only works on image based display objects, not on containers or groups…which is what a slot engine like ours would need to use.

Thanks for the replies though buddy, much appreciated.

I wonder if the issue is to do with setting a mask on a container?