@@ -170,6 +170,7 @@ var ParticleRenderer = new Class({
170170 ) ;
171171 } ,
172172
173+ /*
173174 renderEmitter: function (emitter, camera)
174175 {
175176 var particles = emitter.alive;
@@ -213,7 +214,7 @@ var ParticleRenderer = new Class({
213214 var cameraScrollX = camera.scrollX * emitter.scrollFactorX;
214215 var cameraScrollY = camera.scrollY * emitter.scrollFactorY;
215216
216- this . manager . setRenderer ( this , emitter . frame . source . glTexture , renderTarget ) ;
217+ this.manager.setRenderer(this, emitter.defaultFrame .source.glTexture, renderTarget);
217218
218219 // If there are more particles than fit into a single batch (16000) then it flushes after each one
219220 for (var batchIndex = 0; batchIndex < batchCount; ++batchIndex)
@@ -309,6 +310,159 @@ var ParticleRenderer = new Class({
309310 elementCount = 0;
310311 }
311312 },
313+ */
314+
315+ renderEmitterManager : function ( emitterManager , camera )
316+ {
317+ var renderTarget = emitterManager . renderTarget ;
318+
319+ this . manager . setRenderer ( this , emitterManager . defaultFrame . source . glTexture , renderTarget ) ;
320+
321+ var emitters = emitterManager . emitters ;
322+
323+ for ( var i = 0 ; i < emitters . length ; i ++ )
324+ {
325+ var emitter = emitters [ i ] ;
326+ var particles = emitter . alive ;
327+ var length = particles . length ;
328+
329+ if ( ! emitter . visible || length === 0 )
330+ {
331+ continue ;
332+ }
333+
334+ if ( emitter . blendMode !== this . manager . blendMode )
335+ {
336+ this . manager . setBlendMode ( emitter . blendMode ) ;
337+ }
338+
339+ var data = this . vertexDataBuffer ;
340+ var vbF32 = data . floatView ;
341+ var vbU32 = data . uintView ;
342+ var vtxOffset = 0 ;
343+
344+ var cameraMatrix = camera . matrix . matrix ;
345+ var cma = cameraMatrix [ 0 ] ;
346+ var cmb = cameraMatrix [ 1 ] ;
347+ var cmc = cameraMatrix [ 2 ] ;
348+ var cmd = cameraMatrix [ 3 ] ;
349+ var cme = cameraMatrix [ 4 ] ;
350+ var cmf = cameraMatrix [ 5 ] ;
351+
352+ var elementCount = this . elementCount ;
353+
354+ var particleCount = 0 ;
355+ var batchCount = Math . ceil ( length / CONST . MAX ) ;
356+
357+ // var renderTarget = emitter.renderTarget;
358+
359+ var tempMatrix = this . tempMatrix ;
360+ var tempMatrixMatrix = tempMatrix . matrix ;
361+
362+ var particleOffset = 0 ;
363+
364+ var cameraScrollX = camera . scrollX * emitter . scrollFactorX ;
365+ var cameraScrollY = camera . scrollY * emitter . scrollFactorY ;
366+
367+ // If there are more particles than fit into a single batch (16000) then it flushes after each one
368+ for ( var batchIndex = 0 ; batchIndex < batchCount ; ++ batchIndex )
369+ {
370+ var batchSize = Math . min ( length , CONST . MAX ) ;
371+
372+ for ( var index = 0 ; index < batchSize ; index ++ )
373+ {
374+ var particle = particles [ particleOffset + index ] ;
375+
376+ var frame = particle . frame ;
377+ var uvs = frame . uvs ;
378+
379+ var x = - ( frame . halfWidth ) ;
380+ var y = - ( frame . halfHeight ) ;
381+
382+ var color = particle . color ;
383+
384+ var xw = x + frame . width ;
385+ var yh = y + frame . height ;
386+
387+ tempMatrix . applyITRS (
388+ particle . x - cameraScrollX * particle . scrollFactorX ,
389+ particle . y - cameraScrollY * particle . scrollFactorY ,
390+ particle . rotation ,
391+ particle . scaleX ,
392+ particle . scaleY
393+ ) ;
394+
395+ var sra = tempMatrixMatrix [ 0 ] ;
396+ var srb = tempMatrixMatrix [ 1 ] ;
397+ var src = tempMatrixMatrix [ 2 ] ;
398+ var srd = tempMatrixMatrix [ 3 ] ;
399+ var sre = tempMatrixMatrix [ 4 ] ;
400+ var srf = tempMatrixMatrix [ 5 ] ;
401+
402+ var mva = sra * cma + srb * cmc ;
403+ var mvb = sra * cmb + srb * cmd ;
404+ var mvc = src * cma + srd * cmc ;
405+ var mvd = src * cmb + srd * cmd ;
406+ var mve = sre * cma + srf * cmc + cme ;
407+ var mvf = sre * cmb + srf * cmd + cmf ;
408+
409+ var tx0 = x * mva + y * mvc + mve ;
410+ var ty0 = x * mvb + y * mvd + mvf ;
411+ var tx1 = x * mva + yh * mvc + mve ;
412+ var ty1 = x * mvb + yh * mvd + mvf ;
413+ var tx2 = xw * mva + yh * mvc + mve ;
414+ var ty2 = xw * mvb + yh * mvd + mvf ;
415+ var tx3 = xw * mva + y * mvc + mve ;
416+ var ty3 = xw * mvb + y * mvd + mvf ;
417+
418+ vtxOffset = data . allocate ( 20 ) ;
419+ elementCount += 6 ;
420+
421+ // Top Left
422+ vbF32 [ vtxOffset ++ ] = tx0 ;
423+ vbF32 [ vtxOffset ++ ] = ty0 ;
424+ vbF32 [ vtxOffset ++ ] = uvs . x0 ;
425+ vbF32 [ vtxOffset ++ ] = uvs . y0 ;
426+ vbU32 [ vtxOffset ++ ] = color ;
427+
428+ // Bottom Left
429+ vbF32 [ vtxOffset ++ ] = tx1 ;
430+ vbF32 [ vtxOffset ++ ] = ty1 ;
431+ vbF32 [ vtxOffset ++ ] = uvs . x1 ;
432+ vbF32 [ vtxOffset ++ ] = uvs . y1 ;
433+ vbU32 [ vtxOffset ++ ] = color ;
434+
435+ // Bottom Right
436+ vbF32 [ vtxOffset ++ ] = tx2 ;
437+ vbF32 [ vtxOffset ++ ] = ty2 ;
438+ vbF32 [ vtxOffset ++ ] = uvs . x2 ;
439+ vbF32 [ vtxOffset ++ ] = uvs . y2 ;
440+ vbU32 [ vtxOffset ++ ] = color ;
441+
442+ // Top Right
443+ vbF32 [ vtxOffset ++ ] = tx3 ;
444+ vbF32 [ vtxOffset ++ ] = ty3 ;
445+ vbF32 [ vtxOffset ++ ] = uvs . x3 ;
446+ vbF32 [ vtxOffset ++ ] = uvs . y3 ;
447+ vbU32 [ vtxOffset ++ ] = color ;
448+ }
449+
450+ particleOffset += batchSize ;
451+
452+ length -= batchSize ;
453+
454+ this . elementCount = elementCount ;
455+
456+ if ( this . isFull ( ) )
457+ {
458+ this . flush ( undefined , renderTarget ) ;
459+ elementCount = 0 ;
460+ }
461+ }
462+ }
463+
464+ this . flush ( undefined , renderTarget ) ;
465+ } ,
312466
313467 destroy : function ( )
314468 {
0 commit comments