Skip to content

Commit 28b1a17

Browse files
committed
Fixed null mask issue
1 parent 902d04d commit 28b1a17

1 file changed

Lines changed: 39 additions & 45 deletions

File tree

src/display/mask/GeometryMask.js

Lines changed: 39 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,15 @@ var GeometryMask = new Class({
6060
this.isStencil = true;
6161

6262
this.level = 0;
63+
64+
this.name = '';
65+
},
66+
67+
setName: function (name)
68+
{
69+
this.name = name;
70+
71+
return this;
6372
},
6473

6574
/**
@@ -129,26 +138,26 @@ var GeometryMask = new Class({
129138
renderer.currentMask = this;
130139
}
131140

132-
renderer.maskCount++;
133-
134141
this.level = renderer.maskCount;
135142

143+
renderer.maskCount++;
144+
136145
renderer.maskStack.push({ mask: this, camera: camera });
137146

138-
this.applyStencil(renderer, camera, true);
147+
this.applyStencil(renderer, camera, true, this.level);
139148
},
140149

141-
applyStencil: function (renderer, camera, inc)
150+
applyStencil: function (renderer, camera, inc, level)
142151
{
143152
var gl = renderer.gl;
144153
var geometryMask = this.geometryMask;
145-
var level = this.level;
154+
// var level = this.level;
146155

147156
gl.colorMask(false, false, false, false);
148157

149158
if (inc)
150159
{
151-
gl.stencilFunc(gl.EQUAL, level - 1, 0xFF);
160+
gl.stencilFunc(gl.EQUAL, level, 0xFF);
152161
gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);
153162
}
154163
else
@@ -162,17 +171,31 @@ var GeometryMask = new Class({
162171

163172
renderer.flush();
164173

165-
if (this.invertAlpha)
174+
gl.colorMask(true, true, true, true);
175+
gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
176+
177+
if (inc)
166178
{
167-
gl.stencilFunc(gl.NOTEQUAL, level, 0xFF);
179+
if (this.invertAlpha)
180+
{
181+
gl.stencilFunc(gl.NOTEQUAL, level + 1, 0xFF);
182+
}
183+
else
184+
{
185+
gl.stencilFunc(gl.EQUAL, level + 1, 0xFF);
186+
}
168187
}
169188
else
170189
{
171-
gl.stencilFunc(gl.EQUAL, level, 0xFF);
190+
if (this.invertAlpha)
191+
{
192+
gl.stencilFunc(gl.NOTEQUAL, level, 0xFF);
193+
}
194+
else
195+
{
196+
gl.stencilFunc(gl.EQUAL, level, 0xFF);
197+
}
172198
}
173-
174-
gl.colorMask(true, true, true, true);
175-
gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
176199
},
177200

178201
/**
@@ -202,52 +225,23 @@ var GeometryMask = new Class({
202225
}
203226
else
204227
{
205-
// Force flush before disabling stencil test
228+
// Force flush before disabling stencil test
206229
renderer.flush();
207230

208-
var prev = renderer.maskStack[renderer.maskStack.length - 1];
209-
210-
prev.mask.applyStencil(renderer, prev.camera, false);
211-
212-
if (renderer.currentCameraMask !== prev.mask)
213-
{
214-
renderer.currentMask = prev.mask;
215-
}
216-
217-
/*
218231
var level = renderer.maskCount;
219232

220-
gl.colorMask(false, false, false, false);
221-
222-
gl.stencilFunc(gl.EQUAL, level + 1, 0xFF);
223-
gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);
224-
225-
// Get the mask previous to this one
226233
var prev = renderer.maskStack[renderer.maskStack.length - 1];
227-
var geometryMask = prev.mask.geometryMask;
228-
var camera = prev.camera;
234+
235+
prev.mask.applyStencil(renderer, prev.camera, false, level);
229236

230237
if (renderer.currentCameraMask !== prev.mask)
231238
{
232239
renderer.currentMask = prev.mask;
233240
}
234-
235-
geometryMask.renderWebGL(renderer, geometryMask, 0, camera);
236-
237-
renderer.flush();
238-
239-
if (prev.mask.invertAlpha)
240-
{
241-
gl.stencilFunc(gl.NOTEQUAL, level, 0xFF);
242-
}
243241
else
244242
{
245-
gl.stencilFunc(gl.EQUAL, level, 0xFF);
243+
renderer.currentMask = null;
246244
}
247-
248-
gl.colorMask(true, true, true, true);
249-
gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);
250-
*/
251245
}
252246
},
253247

0 commit comments

Comments
 (0)