@@ -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