-
Notifications
You must be signed in to change notification settings - Fork 7.1k
Canvas Mode: RenderTexture "fill" method does not set "globalCompositeOperation" #6124
Copy link
Copy link
Closed
Closed
Copy link
Labels
Description
Version
- Phaser Version: 3.55, 3.60.0-beta
- Operating system: Windows, macOS
- Browser: Chrome, Firefox
- Phaser Rendering Mode: CANVAS
Description
Using fill method in RenderTexture does not set CanvasRenderingContext2D.globalCompositeOperation, resulting in reusing value set by last drawn gameObject.
rt.fill(0x0000ff);
rt.erase(...);
rt.draw(...);
console.log(rt.context.globalCompositeOperation); // "source-over"
rt.fill(0x0000ff);acts as expected, resulting in filling RenderTexture with color.

Reversing order of draw end erase methods, causes fill to remove pixels from whole RenderTexture.
rt.fill(0x0000ff);
rt.draw(...);
rt.erase(...);
console.log(rt.context.globalCompositeOperation); // "destination-out"
rt.fill(0x0000ff);Example Test Code
https://codepen.io/mkchomik/pen/QWQaxbz
Additional Information
Digging in the codebase, I found that value of globalCompositeOperation is set in SetTransform function:
https://github.com/photonstorm/phaser/blob/master/src/renderer/canvas/utils/SetTransform.js#L47
I was thinking if doing ctx.save() right before setting blendMode and globalAlpha would help, however I am not sure if it doesn't break other parts of code.
Reactions are currently unavailable
