Skip to content

Commit 6e70f0e

Browse files
committed
Shaders now work with camera masks and can have their own geometry masks
1 parent 8620e23 commit 6e70f0e

2 files changed

Lines changed: 33 additions & 5 deletions

File tree

src/display/mask/GeometryMask.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,11 @@ var GeometryMask = new Class({
121121
renderer.maskCount = 0;
122122
}
123123

124-
renderer.currentMask = this;
124+
if (renderer.currentCameraMask !== this)
125+
{
126+
renderer.currentMask = this;
127+
}
128+
125129
renderer.maskStack.push({ mask: this, camera: camera });
126130

127131
var level = renderer.maskCount;
@@ -195,7 +199,10 @@ var GeometryMask = new Class({
195199
var geometryMask = prev.mask.geometryMask;
196200
var camera = prev.camera;
197201

198-
renderer.currentMask = prev.mask;
202+
if (renderer.currentCameraMask !== prev.mask)
203+
{
204+
renderer.currentMask = prev.mask;
205+
}
199206

200207
geometryMask.renderWebGL(renderer, geometryMask, 0, camera);
201208

src/renderer/webgl/WebGLRenderer.js

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,15 @@ var WebGLRenderer = new Class({
497497
*/
498498
this.currentMask = null;
499499

500+
/**
501+
* Internal property that tracks the currently set camera mask.
502+
*
503+
* @name Phaser.Renderer.WebGL.WebGLRenderer#currentCameraMask
504+
* @type {Phaser.Display.Masks.GeometryMask}
505+
* @since 3.17.0
506+
*/
507+
this.currentCameraMask = null;
508+
500509
this.init(this.config);
501510
},
502511

@@ -1014,9 +1023,16 @@ var WebGLRenderer = new Class({
10141023

10151024
gl.disable(gl.DEPTH_TEST);
10161025
gl.disable(gl.CULL_FACE);
1017-
gl.disable(gl.STENCIL_TEST);
1018-
1019-
gl.clear(gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
1026+
1027+
if (!this.currentMask && !this.currentCameraMask)
1028+
{
1029+
gl.disable(gl.STENCIL_TEST);
1030+
gl.clear(gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
1031+
}
1032+
else
1033+
{
1034+
gl.clear(gl.DEPTH_BUFFER_BIT);
1035+
}
10201036

10211037
gl.viewport(0, 0, this.width, this.height);
10221038

@@ -1755,6 +1771,8 @@ var WebGLRenderer = new Class({
17551771

17561772
if (camera.mask)
17571773
{
1774+
this.currentCameraMask = camera.mask;
1775+
17581776
camera.mask.preRenderWebGL(this, camera, camera._maskCamera);
17591777
}
17601778

@@ -1832,6 +1850,8 @@ var WebGLRenderer = new Class({
18321850
if (camera.mask)
18331851
{
18341852
camera.mask.postRenderWebGL(this, camera._maskCamera);
1853+
1854+
this.currentCameraMask = null;
18351855
}
18361856
},
18371857

@@ -1879,6 +1899,7 @@ var WebGLRenderer = new Class({
18791899
}
18801900

18811901
this.currentMask = null;
1902+
this.currentCameraMask = null;
18821903
this.maskStack.length = 0;
18831904

18841905
this.setPipeline(this.pipelines.TextureTintPipeline);

0 commit comments

Comments
 (0)