@@ -277,33 +277,12 @@ var WebGLPipeline = new Class({
277277 */
278278 boot : function ( )
279279 {
280- var gl = this . gl ;
281- var vertexBuffer = this . vertexBuffer ;
282- var attributes = this . attributes ;
283- var program = this . program ;
284280 var renderer = this . renderer ;
285- var vertexSize = this . vertexSize ;
286281
287- renderer . setProgram ( program ) ;
288- renderer . setVertexBuffer ( vertexBuffer ) ;
282+ renderer . setProgram ( this . program ) ;
283+ renderer . setVertexBuffer ( this . vertexBuffer ) ;
289284
290- for ( var i = 0 ; i < attributes . length ; i ++ )
291- {
292- var element = attributes [ i ] ;
293- var location = gl . getAttribLocation ( program , element . name ) ;
294-
295- if ( location >= 0 )
296- {
297- gl . enableVertexAttribArray ( location ) ;
298- gl . vertexAttribPointer ( location , element . size , element . type , element . normalized , vertexSize , element . offset ) ;
299- element . enabled = true ;
300- element . location = location ;
301- }
302- else if ( location !== - 1 )
303- {
304- gl . disableVertexAttribArray ( location ) ;
305- }
306- }
285+ this . setAttribPointers ( true ) ;
307286
308287 this . hasBooted = true ;
309288
@@ -404,18 +383,22 @@ var WebGLPipeline = new Class({
404383 * @method Phaser.Renderer.WebGL.WebGLPipeline#bind
405384 * @since 3.0.0
406385 *
386+ * @param {boolean } [reset=false] - Should the pipeline be fully re-bound after a renderer pipeline clear?
387+ *
407388 * @return {this } This WebGLPipeline instance.
408389 */
409- bind : function ( )
390+ bind : function ( reset )
410391 {
392+ if ( reset === undefined ) { reset = false ; }
393+
411394 var vertexBuffer = this . vertexBuffer ;
412395 var program = this . program ;
413396 var renderer = this . renderer ;
414397
415398 renderer . setProgram ( program ) ;
416399 renderer . setVertexBuffer ( vertexBuffer ) ;
417400
418- this . setAttribPointers ( ) ;
401+ this . setAttribPointers ( reset ) ;
419402
420403 return this ;
421404 } ,
@@ -427,19 +410,40 @@ var WebGLPipeline = new Class({
427410 * @method Phaser.Renderer.WebGL.WebGLPipeline#setAttribPointers
428411 * @since 3.50.0
429412 *
413+ * @param {boolean } [reset=false] - Reset the vertex attribute locations?
414+ *
430415 * @return {this } This WebGLPipeline instance.
431416 */
432- setAttribPointers : function ( )
417+ setAttribPointers : function ( reset )
433418 {
419+ if ( reset === undefined ) { reset = false ; }
420+
434421 var gl = this . gl ;
435422 var attributes = this . attributes ;
436423 var vertexSize = this . vertexSize ;
424+ var program = this . program ;
437425
438426 for ( var i = 0 ; i < attributes . length ; i ++ )
439427 {
440428 var element = attributes [ i ] ;
441429
442- if ( element . enabled )
430+ if ( reset )
431+ {
432+ var location = gl . getAttribLocation ( program , element . name ) ;
433+
434+ if ( location >= 0 )
435+ {
436+ gl . enableVertexAttribArray ( location ) ;
437+ gl . vertexAttribPointer ( location , element . size , element . type , element . normalized , vertexSize , element . offset ) ;
438+ element . enabled = true ;
439+ element . location = location ;
440+ }
441+ else if ( location !== - 1 )
442+ {
443+ gl . disableVertexAttribArray ( location ) ;
444+ }
445+ }
446+ else if ( element . enabled )
443447 {
444448 gl . vertexAttribPointer ( element . location , element . size , element . type , element . normalized , vertexSize , element . offset ) ;
445449 }
0 commit comments