Skip to content

Commit 12b6041

Browse files
committed
inverseAlpha support added back in and tidied up renderer
1 parent 2bd4586 commit 12b6041

2 files changed

Lines changed: 44 additions & 99 deletions

File tree

src/display/mask/GeometryMask.js

Lines changed: 20 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -95,25 +95,16 @@ var GeometryMask = new Class({
9595
gl.clear(gl.STENCIL_BUFFER_BIT);
9696

9797
renderer.maskCount = 0;
98-
// renderer.maskReverse = true;
9998
}
10099

101-
renderer.maskStack.push({ mask: this.geometryMask, camera: camera });
100+
renderer.maskStack.push({ mask: this, camera: camera });
102101

103102
var level = renderer.maskCount;
104103

105104
gl.colorMask(false, false, false, false);
106105

107-
// if (!renderer.maskReverse)
108-
// {
109-
// gl.stencilFunc(gl.EQUAL, 0xFF - level, 0xFF);
110-
// gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);
111-
// }
112-
// else
113-
// {
114-
gl.stencilFunc(gl.EQUAL, level, 0xFF);
115-
gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);
116-
// }
106+
gl.stencilFunc(gl.EQUAL, level, 0xFF);
107+
gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);
117108

118109
// Write stencil buffer
119110
geometryMask.renderWebGL(renderer, geometryMask, 0, camera);
@@ -123,25 +114,14 @@ var GeometryMask = new Class({
123114
// Use stencil buffer to affect next rendering object
124115
gl.colorMask(true, true, true, true);
125116

126-
// if (!renderer.maskReverse)
127-
// {
128-
// if (this.invertAlpha)
129-
// {
130-
// gl.stencilFunc(gl.NOTEQUAL, 0xFF - (level + 1), 0xFF);
131-
// }
132-
// else
133-
// {
134-
// gl.stencilFunc(gl.EQUAL, 0xFF - (level + 1), 0xFF);
135-
// }
136-
// }
137-
// else if (this.invertAlpha)
138-
// {
139-
// gl.stencilFunc(gl.NOTEQUAL, level + 1, 0xFF);
140-
// }
141-
// else
142-
// {
117+
if (this.invertAlpha)
118+
{
119+
gl.stencilFunc(gl.NOTEQUAL, level + 1, 0xFF);
120+
}
121+
else
122+
{
143123
gl.stencilFunc(gl.EQUAL, level + 1, 0xFF);
144-
// }
124+
}
145125

146126
gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
147127

@@ -177,44 +157,25 @@ var GeometryMask = new Class({
177157

178158
gl.colorMask(false, false, false, false);
179159

180-
// if (!renderer.maskReverse)
181-
// {
182-
// gl.stencilFunc(gl.EQUAL, 0xFF - (level + 1), 0xFF);
183-
// gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);
184-
// }
185-
// else
186-
// {
187-
gl.stencilFunc(gl.EQUAL, level + 1, 0xFF);
188-
gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);
189-
// }
160+
gl.stencilFunc(gl.EQUAL, level + 1, 0xFF);
161+
gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);
190162

191163
var prev = renderer.maskStack[renderer.maskStack.length - 1];
192-
var geometryMask = prev.mask;
164+
var geometryMask = prev.mask.geometryMask;
193165
var camera = prev.camera;
194166

195167
geometryMask.renderWebGL(renderer, geometryMask, 0, camera);
196168

197169
renderer.flush();
198170

199-
// if (!renderer.maskReverse)
200-
// {
201-
// if (this.invertAlpha)
202-
// {
203-
// gl.stencilFunc(gl.NOTEQUAL, 0xFF - (level), 0xFF);
204-
// }
205-
// else
206-
// {
207-
// gl.stencilFunc(gl.EQUAL, 0xFF - (level), 0xFF);
208-
// }
209-
// }
210-
// else if (this.invertAlpha)
211-
// {
212-
// gl.stencilFunc(gl.NOTEQUAL, level, 0xFF);
213-
// }
214-
// else
215-
// {
171+
if (prev.mask.invertAlpha)
172+
{
173+
gl.stencilFunc(gl.NOTEQUAL, level, 0xFF);
174+
}
175+
else
176+
{
216177
gl.stencilFunc(gl.EQUAL, level, 0xFF);
217-
// }
178+
}
218179

219180
gl.colorMask(true, true, true, true);
220181
gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);

src/renderer/webgl/WebGLRenderer.js

Lines changed: 24 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -471,18 +471,21 @@ var WebGLRenderer = new Class({
471471
this._tempMatrix4 = new TransformMatrix();
472472

473473
/**
474-
* A reference to the mask the current camera is using, if any.
474+
* The total number of masks currently stacked.
475475
*
476-
* @name Phaser.Renderer.WebGL.WebGLRenderer#currentMask
477-
* @type {(Phaser.Display.Masks.BitmapMask|Phaser.Display.Masks.GeometryMask)}
476+
* @name Phaser.Renderer.WebGL.WebGLRenderer#maskCount
477+
* @type {integer}
478478
* @since 3.17.0
479479
*/
480-
this.currentMask = null;
481-
482480
this.maskCount = 0;
483481

484-
this.maskReverse = true;
485-
482+
/**
483+
* The mask stack.
484+
*
485+
* @name Phaser.Renderer.WebGL.WebGLRenderer#maskStack
486+
* @type {Phaser.Display.Masks.GeometryMask[]}
487+
* @since 3.17.0
488+
*/
486489
this.maskStack = [];
487490

488491
this.init(this.config);
@@ -1703,9 +1706,6 @@ var WebGLRenderer = new Class({
17031706

17041707
var color = camera.backgroundColor;
17051708

1706-
// Clear the current mask, if set
1707-
this.currentMask = null;
1708-
17091709
if (camera.renderToTexture)
17101710
{
17111711
this.flush();
@@ -1716,7 +1716,7 @@ var WebGLRenderer = new Class({
17161716

17171717
if (camera.mask)
17181718
{
1719-
this.setCameraMask(camera);
1719+
camera.mask.preRenderWebGL(this, camera, camera._maskCamera);
17201720
}
17211721

17221722
this.setFramebuffer(camera.framebuffer);
@@ -1746,7 +1746,7 @@ var WebGLRenderer = new Class({
17461746

17471747
if (camera.mask)
17481748
{
1749-
this.setCameraMask(camera);
1749+
camera.mask.preRenderWebGL(this, camera, camera._maskCamera);
17501750
}
17511751

17521752
if (color.alphaGL > 0)
@@ -1822,7 +1822,7 @@ var WebGLRenderer = new Class({
18221822

18231823
if (camera.mask)
18241824
{
1825-
this.clearCameraMask(camera);
1825+
camera.mask.postRenderWebGL(this, camera._maskCamera);
18261826
}
18271827
},
18281828

@@ -1920,13 +1920,18 @@ var WebGLRenderer = new Class({
19201920
this.setBlendMode(child.blendMode);
19211921
}
19221922

1923-
if (child.mask)
1923+
var mask = child.mask;
1924+
1925+
if (mask)
19241926
{
1925-
this.setChildMask(this, child, interpolationPercentage, camera);
1927+
mask.preRenderWebGL(this, child, camera);
19261928
}
1927-
else
1929+
1930+
child.renderWebGL(this, child, interpolationPercentage, camera);
1931+
1932+
if (mask)
19281933
{
1929-
child.renderWebGL(this, child, interpolationPercentage, camera);
1934+
mask.postRenderWebGL(this, camera);
19301935
}
19311936
}
19321937

@@ -1967,29 +1972,6 @@ var WebGLRenderer = new Class({
19671972
}
19681973
},
19691974

1970-
setCameraMask: function (camera)
1971-
{
1972-
var mask = camera.mask;
1973-
1974-
mask.preRenderWebGL(this, camera, camera._maskCamera);
1975-
},
1976-
1977-
clearCameraMask: function (camera)
1978-
{
1979-
camera.mask.postRenderWebGL(this, camera._maskCamera);
1980-
},
1981-
1982-
setChildMask: function (renderer, child, interpolationPercentage, camera)
1983-
{
1984-
var mask = child.mask;
1985-
1986-
mask.preRenderWebGL(renderer, child, camera);
1987-
1988-
child.renderWebGL(renderer, child, interpolationPercentage, camera);
1989-
1990-
mask.postRenderWebGL(renderer, camera);
1991-
},
1992-
19931975
/**
19941976
* Schedules a snapshot of the entire game viewport to be taken after the current frame is rendered.
19951977
*
@@ -2546,6 +2528,8 @@ var WebGLRenderer = new Class({
25462528
delete this.gl;
25472529
delete this.game;
25482530

2531+
this.maskStack.length = 0;
2532+
25492533
this.contextLost = true;
25502534
this.extensions = {};
25512535
this.nativeTextures.length = 0;

0 commit comments

Comments
 (0)