Skip to content

Commit 8e7171c

Browse files
committed
Use fbo stack and free-up callback hooks
1 parent 6d56ee0 commit 8e7171c

1 file changed

Lines changed: 16 additions & 13 deletions

File tree

src/renderer/webgl/pipelines/BitmapMaskPipeline.js

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)