@@ -4,28 +4,36 @@ var GeometryMask = new Class({
44
55 initialize :
66
7- function GeometryMask ( scene , geometry )
7+ function GeometryMask ( scene , graphicsGeometry )
88 {
9- this . geometry = geometry ;
10- this . shape = scene . create . graphics ( ) ;
9+ this . geometryMask = graphicsGeometry ;
1110 } ,
1211
13- setShape : function ( geometry )
12+ setShape : function ( graphicsGeometry )
1413 {
15- this . geometry = geometry ;
14+ this . geometryMask = graphicsGeometry ;
1615 } ,
1716
1817 preRenderWebGL : function ( renderer , mask , camera )
1918 {
2019 var gl = renderer . gl ;
20+ var geometryMask = this . geometryMask ;
2121
22+ // Force flushing before drawing to stencil buffer
23+ renderer . currentRenderer . flush ( ) ;
24+
25+ // Enable and setup GL state to write to stencil buffer
2226 gl . enable ( gl . STENCIL_TEST ) ;
2327 gl . clear ( gl . STENCIL_BUFFER_BIT ) ;
2428 gl . colorMask ( false , false , false , false ) ;
2529 gl . stencilFunc ( gl . NOTEQUAL , 1 , 1 ) ;
2630 gl . stencilOp ( gl . REPLACE , gl . REPLACE , gl . REPLACE ) ;
2731
32+ // Write stencil buffer
33+ geometryMask . renderWebGL ( renderer , geometryMask , 0.0 , camera ) ;
34+ renderer . currentRenderer . flush ( ) ;
2835
36+ // Use stencil buffer to affect next rendering object
2937 gl . colorMask ( true , true , true , true ) ;
3038 gl . stencilFunc ( gl . EQUAL , 1 , 1 ) ;
3139 gl . stencilOp ( gl . INVERT , gl . INVERT , gl . INVERT ) ;
@@ -35,6 +43,8 @@ var GeometryMask = new Class({
3543 {
3644 var gl = renderer . gl ;
3745
46+ // Force flush before disabling stencil test
47+ renderer . currentRenderer . flush ( ) ;
3848 gl . disable ( gl . STENCIL_TEST ) ;
3949 }
4050
0 commit comments