Skip to content

Commit 70b5b01

Browse files
committed
Restore previous framebuffer
1 parent cf878ca commit 70b5b01

1 file changed

Lines changed: 28 additions & 35 deletions

File tree

src/renderer/webgl/pipelines/BitmapMaskPipeline.js

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -165,36 +165,24 @@ var BitmapMaskPipeline = new Class({
165165

166166
if (bitmapMask && gl)
167167
{
168-
if (maskedObject.mask && renderer.currentMask === maskedObject.mask)
169-
{
170-
renderer.setFramebuffer(maskedObject.mask.mainFramebuffer);
171-
}
172-
else
173-
{
174-
renderer.flush();
168+
renderer.flush();
175169

176-
// First we clear the mask framebuffer
177-
renderer.setFramebuffer(mask.maskFramebuffer);
170+
mask.prevFramebuffer = renderer.currentFramebuffer;
178171

179-
gl.clearColor(0, 0, 0, 0);
180-
gl.clear(gl.COLOR_BUFFER_BIT);
181-
182-
// We render our mask source
183-
bitmapMask.renderWebGL(renderer, bitmapMask, 0, camera);
172+
renderer.setFramebuffer(mask.mainFramebuffer);
184173

185-
renderer.flush();
186-
187-
// Bind and clear our main source (masked object)
188-
renderer.setFramebuffer(mask.mainFramebuffer);
189-
190-
gl.clearColor(0, 0, 0, 0);
191-
gl.clear(gl.COLOR_BUFFER_BIT);
174+
gl.clearColor(0, 0, 0, 0);
175+
gl.clear(gl.COLOR_BUFFER_BIT);
176+
177+
if (renderer.currentCameraMask !== mask)
178+
{
179+
renderer.currentMask = mask;
192180
}
193181
}
194182
},
195183

196184
/**
197-
* The masked game object's framebuffer is unbound and it's texture
185+
* The masked game objects framebuffer is unbound and its texture
198186
* is bound together with the mask texture and the mask shader and
199187
* a draw call with a single quad is processed. Here is where the
200188
* masking effect is applied.
@@ -204,28 +192,33 @@ var BitmapMaskPipeline = new Class({
204192
*
205193
* @param {Phaser.GameObjects.GameObject} mask - GameObject used as a mask.
206194
*/
207-
endMask: function (mask)
195+
endMask: function (mask, camera)
208196
{
209-
var renderer = this.renderer;
210197
var gl = this.gl;
198+
var renderer = this.renderer;
211199

212200
// The renderable Game Object that is being used for the bitmap mask
213201
var bitmapMask = mask.bitmapMask;
214202

215203
if (bitmapMask && gl)
216204
{
217-
// Return to default framebuffer
218-
219-
if (renderer.currentMask && renderer.currentMask.mainFramebuffer)
220-
{
221-
renderer.setFramebuffer(renderer.currentMask.mainFramebuffer);
222-
}
223-
else
224-
{
225-
renderer.setFramebuffer(null);
226-
}
205+
renderer.flush();
206+
207+
// First we draw the mask to the mask fb
208+
renderer.setFramebuffer(mask.maskFramebuffer);
209+
210+
gl.clearColor(0, 0, 0, 0);
211+
gl.clear(gl.COLOR_BUFFER_BIT);
212+
213+
bitmapMask.renderWebGL(renderer, bitmapMask, 0, camera);
214+
215+
renderer.flush();
216+
217+
renderer.setFramebuffer(mask.prevFramebuffer);
218+
219+
renderer.currentMask = null;
227220

228-
// Bind bitmap mask pipeline and draw
221+
// Bind bitmap mask pipeline and draw
229222
renderer.setPipeline(this);
230223

231224
renderer.setTexture2D(mask.maskTexture, 1);

0 commit comments

Comments
 (0)