@@ -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