@@ -15,6 +15,9 @@ var SpineGameObject = require('./gameobject/SpineGameObject');
1515var SpineContainer = require ( './container/SpineContainer' ) ;
1616var NOOP = require ( '../../../src/utils/NOOP' ) ;
1717
18+ // Plugin specific instance of the Spine Scene Renderer
19+ var sceneRenderer ;
20+
1821/**
1922 * @classdesc
2023 * The Spine Plugin is a Scene based plugin that handles the creation and rendering of Spine Game Objects.
@@ -216,6 +219,8 @@ var SpinePlugin = new Class({
216219 /**
217220 * An instance of the Spine WebGL Scene Renderer.
218221 *
222+ * There is only one instance of the Scene Renderer shared across the whole plugin.
223+ *
219224 * Only set if running in WebGL mode.
220225 *
221226 * @name SpinePlugin#sceneRenderer
@@ -246,7 +251,7 @@ var SpinePlugin = new Class({
246251
247252 /**
248253 * A reference to the Spine runtime.
249- * This is the runtime created by Esoteric Software
254+ * This is the runtime created by Esoteric Software.
250255 *
251256 * @name SpinePlugin#plugin
252257 * @type {spine }
@@ -436,8 +441,6 @@ var SpinePlugin = new Class({
436441 */
437442 bootWebGL : function ( )
438443 {
439- this . sceneRenderer = new Spine . webgl . SceneRenderer ( this . renderer . canvas , this . gl , true ) ;
440-
441444 // Monkeypatch the Spine setBlendMode functions, or batching is destroyed!
442445
443446 var setBlendMode = function ( srcBlend , dstBlend )
@@ -457,11 +460,17 @@ var SpinePlugin = new Class({
457460 }
458461 } ;
459462
460- this . sceneRenderer . batcher . setBlendMode = setBlendMode ;
461- this . sceneRenderer . shapes . setBlendMode = setBlendMode ;
463+ if ( ! sceneRenderer )
464+ {
465+ sceneRenderer = new Spine . webgl . SceneRenderer ( this . renderer . canvas , this . gl , true ) ;
466+ sceneRenderer . batcher . setBlendMode = setBlendMode ;
467+ sceneRenderer . shapes . setBlendMode = setBlendMode ;
468+ }
462469
463- this . skeletonRenderer = this . sceneRenderer . skeletonRenderer ;
464- this . skeletonDebugRenderer = this . sceneRenderer . skeletonDebugRenderer ;
470+ // All share the same instance
471+ this . sceneRenderer = sceneRenderer ;
472+ this . skeletonRenderer = sceneRenderer . skeletonRenderer ;
473+ this . skeletonDebugRenderer = sceneRenderer . skeletonDebugRenderer ;
465474
466475 this . temp1 = new Spine . webgl . Vector3 ( 0 , 0 , 0 ) ;
467476 this . temp2 = new Spine . webgl . Vector3 ( 0 , 0 , 0 ) ;
@@ -1059,8 +1068,7 @@ var SpinePlugin = new Class({
10591068 sceneRenderer . camera . position . x = viewportWidth / 2 ;
10601069 sceneRenderer . camera . position . y = viewportHeight / 2 ;
10611070
1062- sceneRenderer . camera . viewportWidth = viewportWidth ;
1063- sceneRenderer . camera . viewportHeight = viewportHeight ;
1071+ sceneRenderer . camera . setViewport ( viewportWidth , viewportHeight ) ;
10641072 } ,
10651073
10661074 /**
@@ -1122,9 +1130,9 @@ var SpinePlugin = new Class({
11221130 {
11231131 this . destroy ( ) ;
11241132
1125- if ( this . sceneRenderer )
1133+ if ( sceneRenderer )
11261134 {
1127- this . sceneRenderer . dispose ( ) ;
1135+ sceneRenderer . dispose ( ) ;
11281136 }
11291137
11301138 this . sceneRenderer = null ;
0 commit comments