11var Class = require ( '../../utils/Class' ) ;
22
33var BitmapMask = new Class ( {
4-
5- initialize :
6-
7- function BitmapMask ( scene , renderable )
8- {
9- var renderer = scene . sys . game . renderer ;
10- var resourceManager = renderer . resourceManager ;
11- this . bitmapMask = renderable ;
12- this . maskRenderTarget = null ;
13- this . mainRenderTarget = null ;
14- this . maskTexture = null ;
15- this . mainTexture = null ;
16- this . dirty = true ;
17-
18- if ( resourceManager !== undefined )
19- {
20- var width = renderer . width ;
21- var height = renderer . height ;
22- var pot = ( ( width & ( width - 1 ) ) == 0 && ( height & ( height - 1 ) ) == 0 ) ;
23- var gl = renderer . gl ;
24- var wrap = pot ? gl . REPEAT : gl . CLAMP_TO_EDGE ;
25-
26- this . maskTexture = resourceManager . createTexture (
4+
5+ initialize :
6+
7+ function BitmapMask ( scene , renderable )
8+ {
9+ var renderer = scene . sys . game . renderer ;
10+ var resourceManager = renderer . resourceManager ;
11+ this . bitmapMask = renderable ;
12+ this . maskRenderTarget = null ;
13+ this . mainRenderTarget = null ;
14+ this . maskTexture = null ;
15+ this . mainTexture = null ;
16+ this . dirty = true ;
17+
18+ if ( resourceManager !== undefined )
19+ {
20+ var width = renderer . width ;
21+ var height = renderer . height ;
22+ var pot = ( ( width & ( width - 1 ) ) == 0 && ( height & ( height - 1 ) ) == 0 ) ;
23+ var gl = renderer . gl ;
24+ var wrap = pot ? gl . REPEAT : gl . CLAMP_TO_EDGE ;
25+
26+ this . maskTexture = resourceManager . createTexture (
2727 0 ,
2828 gl . LINEAR , gl . LINEAR ,
2929 wrap , wrap ,
3030 gl . RGBA ,
3131 null , width , height
3232 ) ;
3333
34- this . mainTexture = resourceManager . createTexture (
34+ this . mainTexture = resourceManager . createTexture (
3535 0 ,
3636 gl . LINEAR , gl . LINEAR ,
3737 wrap , wrap ,
3838 gl . RGBA ,
3939 null , width , height
4040 ) ;
4141
42- this . maskRenderTarget = resourceManager . createRenderTarget (
43- width , height ,
44- this . maskTexture ,
45- null
46- ) ;
47- this . mainRenderTarget = resourceManager . createRenderTarget (
48- width , height ,
49- this . mainTexture ,
50- null
51- ) ;
42+ this . maskRenderTarget = resourceManager . createRenderTarget (
43+ width , height ,
44+ this . maskTexture ,
45+ null
46+ ) ;
47+ this . mainRenderTarget = resourceManager . createRenderTarget (
48+ width , height ,
49+ this . mainTexture ,
50+ null
51+ ) ;
5252
5353 scene . sys . game . renderer . currentTexture [ 0 ] = null ;
54- }
54+ }
5555
56- var _this = this ;
56+ var _this = this ;
5757
5858 renderer . addContextRestoredCallback ( function ( renderer ) {
5959 var resourceManager = renderer . resourceManager ;
@@ -75,70 +75,76 @@ var BitmapMask = new Class({
7575 null , width , height
7676 ) ;
7777
78- _this . maskRenderTarget = resourceManager . createRenderTarget (
79- width , height ,
80- _this . maskTexture ,
81- null
82- ) ;
83- _this . mainRenderTarget = resourceManager . createRenderTarget (
84- width , height ,
85- _this . mainTexture ,
86- null
87- ) ;
78+ _this . maskRenderTarget = resourceManager . createRenderTarget (
79+ width , height ,
80+ _this . maskTexture ,
81+ null
82+ ) ;
83+ _this . mainRenderTarget = resourceManager . createRenderTarget (
84+ width , height ,
85+ _this . mainTexture ,
86+ null
87+ ) ;
8888
8989 // force rebinding of prev texture
9090 scene . sys . game . renderer . currentTexture [ 0 ] = null ;
9191 } ) ;
92- } ,
93-
94- setBitmap : function ( renderable )
95- {
96- this . bitmapMask = renderable ;
97- } ,
98-
99- preRenderWebGL : function ( renderer , gameObject , camera )
100- {
101- var bitmapMask = this . bitmapMask ;
102- var maskRenderTarget = this . maskRenderTarget ;
103- var mainRenderTarget = this . mainRenderTarget ;
104-
105- if ( bitmapMask )
106- {
107- /* Clear render targets first */
108- var gl = renderer . gl ;
109-
110- gl . clearColor ( 0.0 , 0.0 , 0.0 , 0.0 ) ;
111- gl . bindFramebuffer ( gl . FRAMEBUFFER , maskRenderTarget . framebufferObject ) ;
112- gl . clear ( gl . COLOR_BUFFER_BIT ) ;
113- gl . bindFramebuffer ( gl . FRAMEBUFFER , mainRenderTarget . framebufferObject ) ;
114- gl . clear ( gl . COLOR_BUFFER_BIT ) ;
115- gl . bindFramebuffer ( gl . FRAMEBUFFER , null ) ;
116-
117- // Inject mask render target & reset it after rendering.
118- bitmapMask . renderTarget = maskRenderTarget ;
119- bitmapMask . renderWebGL ( renderer , bitmapMask , 0.0 , camera ) ;
120- renderer . currentRenderer . flush ( null , maskRenderTarget ) ;
121- bitmapMask . renderTarget = null ;
122-
123- // Inject main render target & reset it at post rendering.
124- gameObject . renderTarget = this . mainRenderTarget ;
92+ } ,
93+
94+ setBitmap : function ( renderable )
95+ {
96+ this . bitmapMask = renderable ;
97+ } ,
98+
99+ preRenderWebGL : function ( renderer , gameObject , camera )
100+ {
101+ var bitmapMask = this . bitmapMask ;
102+ var maskRenderTarget = this . maskRenderTarget ;
103+ var mainRenderTarget = this . mainRenderTarget ;
104+ var prevRenderTarget = null ;
105+ var visible = bitmapMask . visible ;
106+
107+ if ( bitmapMask )
108+ {
109+ /* Clear render targets first */
110+ var gl = renderer . gl ;
111+
112+ gl . clearColor ( 0.0 , 0.0 , 0.0 , 0.0 ) ;
113+ gl . bindFramebuffer ( gl . FRAMEBUFFER , maskRenderTarget . framebufferObject ) ;
114+ gl . clear ( gl . COLOR_BUFFER_BIT ) ;
115+ gl . bindFramebuffer ( gl . FRAMEBUFFER , mainRenderTarget . framebufferObject ) ;
116+ gl . clear ( gl . COLOR_BUFFER_BIT ) ;
117+ gl . bindFramebuffer ( gl . FRAMEBUFFER , null ) ;
118+
119+ // Inject mask render target & reset it after rendering.
120+ prevRenderTarget = bitmapMask . renderTarget ;
121+ bitmapMask . renderTarget = maskRenderTarget ;
122+ bitmapMask . visible = true ;
123+ bitmapMask . renderWebGL ( renderer , bitmapMask , 0.0 , camera ) ;
124+ renderer . currentRenderer . flush ( null , maskRenderTarget ) ;
125+ bitmapMask . renderTarget = prevRenderTarget ;
126+ bitmapMask . visible = visible ;
127+
128+ // Inject main render target & reset it at post rendering.
129+ gameObject . renderTarget = this . mainRenderTarget ;
125130 renderer . setBlendMode ( 0 ) ;
126- }
131+ }
127132
128- } ,
133+ } ,
129134
130- postRenderWebGL : function ( renderer , gameObject )
131- {
132- var maskRenderer = renderer . maskRenderer ;
135+ postRenderWebGL : function ( renderer , gameObject )
136+ {
137+ var maskRenderer = renderer . maskRenderer ;
133138 var gl = renderer . gl ;
139+ var prevRenderTarget = gameObject . renderTarget ;
134140
135- // flush and reset
136- renderer . currentRenderer . flush ( null , this . mainRenderTarget ) ;
137- gameObject . renderTarget = null ;
141+ // flush and reset
142+ renderer . currentRenderer . flush ( null , this . mainRenderTarget ) ;
143+ gameObject . renderTarget = prevRenderTarget ;
138144
139- // Apply alpha masking using mask renderer
140- maskRenderer . draw ( null , null , this . mainTexture , this . maskTexture ) ;
141- }
145+ // Apply alpha masking using mask renderer
146+ maskRenderer . draw ( null , null , this . mainTexture , this . maskTexture ) ;
147+ }
142148
143149} ) ;
144150
0 commit comments