-
Notifications
You must be signed in to change notification settings - Fork 7.1k
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.
vzhou842 and mohsen159