@@ -78,8 +78,10 @@ var BitmapMaskPipeline = new Class({
7878 this . set1i ( 'uMaskSampler' , 1 ) ;
7979 } ,
8080
81- onResize : function ( width , height )
81+ resize : function ( width , height )
8282 {
83+ WebGLPipeline . prototype . resize . call ( this , width , height ) ;
84+
8385 this . set2f ( 'uResolution' , width , height ) ;
8486 } ,
8587
@@ -96,19 +98,16 @@ var BitmapMaskPipeline = new Class({
9698 */
9799 beginMask : function ( mask , maskedObject , camera )
98100 {
99- var renderer = this . renderer ;
100101 var gl = this . gl ;
101102
102103 // The renderable Game Object that is being used for the bitmap mask
103- var bitmapMask = mask . bitmapMask ;
104-
105- if ( bitmapMask && gl )
104+ if ( mask . bitmapMask && gl )
106105 {
107- renderer . flush ( ) ;
106+ var renderer = this . renderer ;
108107
109- mask . prevFramebuffer = renderer . currentFramebuffer ;
108+ renderer . flush ( ) ;
110109
111- renderer . setFramebuffer ( mask . mainFramebuffer ) ;
110+ renderer . pushFramebuffer ( mask . mainFramebuffer ) ;
112111
113112 gl . disable ( gl . STENCIL_TEST ) ;
114113 gl . clearColor ( 0 , 0 , 0 , 0 ) ;
@@ -143,11 +142,13 @@ var BitmapMaskPipeline = new Class({
143142
144143 if ( bitmapMask && gl )
145144 {
145+ // mask.mainFramebuffer should now contain all the Game Objects we want masked
146146 renderer . flush ( ) ;
147147
148- // First we draw the mask to the mask fb
149- renderer . setFramebuffer ( mask . maskFramebuffer ) ;
148+ // Swap to the mask framebuffer (push, in case the bitmapMask GO has a post-pipeline)
149+ renderer . pushFramebuffer ( mask . maskFramebuffer ) ;
150150
151+ // Clear it and draw the Game Object that is acting as a mask to it
151152 gl . clearColor ( 0 , 0 , 0 , 0 ) ;
152153 gl . clear ( gl . COLOR_BUFFER_BIT ) ;
153154
@@ -157,7 +158,9 @@ var BitmapMaskPipeline = new Class({
157158
158159 renderer . flush ( ) ;
159160
160- renderer . setFramebuffer ( mask . prevFramebuffer ) ;
161+ // Clear the mask framebuffer + main framebuffer
162+ renderer . popFramebuffer ( ) ;
163+ renderer . popFramebuffer ( ) ;
161164
162165 // Is there a stencil further up the stack?
163166 var prev = renderer . getCurrentStencilMask ( ) ;
@@ -173,7 +176,7 @@ var BitmapMaskPipeline = new Class({
173176 renderer . currentMask . mask = null ;
174177 }
175178
176- // Bind bitmap mask pipeline and draw
179+ // Bind this pipeline and draw
177180 renderer . pipelines . set ( this ) ;
178181
179182 gl . activeTexture ( gl . TEXTURE1 ) ;
@@ -185,7 +188,7 @@ var BitmapMaskPipeline = new Class({
185188 this . set1i ( 'uInvertMaskAlpha' , mask . invertAlpha ) ;
186189
187190 // Finally, draw a triangle filling the whole screen
188- gl . drawArrays ( gl . TRIANGLE , 0 , 3 ) ;
191+ gl . drawArrays ( this . topology , 0 , 3 ) ;
189192
190193 renderer . resetTextures ( ) ;
191194 }
0 commit comments