Skip to content

Commit 373d01c

Browse files
committed
Fixed emitter batch. Now to optimize it.
1 parent 497fa1f commit 373d01c

1 file changed

Lines changed: 50 additions & 128 deletions

File tree

src/renderer/webgl/pipelines/TextureTintPipeline.js

Lines changed: 50 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -411,11 +411,7 @@ var TextureTintPipeline = new Class({
411411

412412
var roundPixels = camera.roundPixels;
413413
var emitters = emitterManager.emitters.list;
414-
var emitterCount = emitters.length;
415-
var vertexViewF32 = this.vertexViewF32;
416-
var vertexViewU32 = this.vertexViewU32;
417414
var renderer = this.renderer;
418-
var maxQuads = this.maxQuads;
419415
var cameraScrollX = camera.scrollX;
420416
var cameraScrollY = camera.scrollY;
421417
var cameraMatrix = camera.matrix.matrix;
@@ -427,8 +423,6 @@ var TextureTintPipeline = new Class({
427423
var cmf = cameraMatrix[5];
428424
var sin = Math.sin;
429425
var cos = Math.cos;
430-
var vertexComponentCount = this.vertexComponentCount;
431-
var vertexCapacity = this.vertexCapacity;
432426
var texture = emitterManager.defaultFrame.source.glTexture;
433427
var pca, pcb, pcc, pcd, pce, pcf;
434428
var pma, pmb, pmc, pmd, pme, pmf;
@@ -445,13 +439,11 @@ var TextureTintPipeline = new Class({
445439

446440
this.setTexture2D(texture, 0);
447441

448-
for (var emitterIndex = 0; emitterIndex < emitterCount; ++emitterIndex)
442+
for (var e = 0; e < emitters.length; e++)
449443
{
450-
var emitter = emitters[emitterIndex];
444+
var emitter = emitters[e];
451445
var particles = emitter.alive;
452446
var aliveLength = particles.length;
453-
var batchCount = Math.ceil(aliveLength / maxQuads);
454-
var particleOffset = 0;
455447
var scrollX = cameraScrollX * emitter.scrollFactorX;
456448
var scrollY = cameraScrollY * emitter.scrollFactorY;
457449

@@ -486,137 +478,67 @@ var TextureTintPipeline = new Class({
486478

487479
renderer.setBlendMode(emitter.blendMode);
488480

489-
if (this.vertexCount >= vertexCapacity)
490-
{
491-
this.flush();
492-
this.setTexture2D(texture, 0);
493-
}
494-
495481
var tintEffect = false;
496482

497-
for (var batchIndex = 0; batchIndex < batchCount; ++batchIndex)
483+
for (var i = 0; i < aliveLength; i++)
498484
{
499-
var batchSize = Math.min(aliveLength, maxQuads);
485+
var particle = particles[i];
500486

501-
for (var index = 0; index < batchSize; ++index)
487+
if (particle.alpha <= 0)
502488
{
503-
var particle = particles[particleOffset + index];
504-
505-
if (particle.alpha <= 0)
506-
{
507-
continue;
508-
}
509-
510-
var frame = particle.frame;
511-
var uvs = frame.uvs;
512-
var x = -(frame.halfWidth);
513-
var y = -(frame.halfHeight);
514-
var color = particle.color;
515-
var xw = x + frame.width;
516-
var yh = y + frame.height;
517-
var sr = sin(particle.rotation);
518-
var cr = cos(particle.rotation);
519-
520-
var sra = cr * particle.scaleX;
521-
var srb = sr * particle.scaleX;
522-
var src = -sr * particle.scaleY;
523-
var srd = cr * particle.scaleY;
524-
var sre = particle.x - scrollX;
525-
var srf = particle.y - scrollY;
526-
527-
var mva = sra * cma + srb * cmc;
528-
var mvb = sra * cmb + srb * cmd;
529-
var mvc = src * cma + srd * cmc;
530-
var mvd = src * cmb + srd * cmd;
531-
var mve = sre * cma + srf * cmc + cme;
532-
var mvf = sre * cmb + srf * cmd + cmf;
533-
534-
var tx0 = x * mva + y * mvc + mve;
535-
var ty0 = x * mvb + y * mvd + mvf;
536-
var tx1 = x * mva + yh * mvc + mve;
537-
var ty1 = x * mvb + yh * mvd + mvf;
538-
var tx2 = xw * mva + yh * mvc + mve;
539-
var ty2 = xw * mvb + yh * mvd + mvf;
540-
var tx3 = xw * mva + y * mvc + mve;
541-
var ty3 = xw * mvb + y * mvd + mvf;
542-
543-
if (roundPixels)
544-
{
545-
tx0 |= 0;
546-
ty0 |= 0;
547-
tx1 |= 0;
548-
ty1 |= 0;
549-
tx2 |= 0;
550-
ty2 |= 0;
551-
tx3 |= 0;
552-
ty3 |= 0;
553-
}
554-
555-
var vertexOffset = (this.vertexCount * vertexComponentCount) - 1;
556-
557-
vertexViewF32[++vertexOffset] = tx0;
558-
vertexViewF32[++vertexOffset] = ty0;
559-
vertexViewF32[++vertexOffset] = uvs.x0;
560-
vertexViewF32[++vertexOffset] = uvs.y0;
561-
vertexViewF32[++vertexOffset] = tintEffect;
562-
vertexViewU32[++vertexOffset] = color;
563-
564-
vertexViewF32[++vertexOffset] = tx1;
565-
vertexViewF32[++vertexOffset] = ty1;
566-
vertexViewF32[++vertexOffset] = uvs.x1;
567-
vertexViewF32[++vertexOffset] = uvs.y1;
568-
vertexViewF32[++vertexOffset] = tintEffect;
569-
vertexViewU32[++vertexOffset] = color;
570-
571-
vertexViewF32[++vertexOffset] = tx2;
572-
vertexViewF32[++vertexOffset] = ty2;
573-
vertexViewF32[++vertexOffset] = uvs.x2;
574-
vertexViewF32[++vertexOffset] = uvs.y2;
575-
vertexViewF32[++vertexOffset] = tintEffect;
576-
vertexViewU32[++vertexOffset] = color;
577-
578-
vertexViewF32[++vertexOffset] = tx0;
579-
vertexViewF32[++vertexOffset] = ty0;
580-
vertexViewF32[++vertexOffset] = uvs.x0;
581-
vertexViewF32[++vertexOffset] = uvs.y0;
582-
vertexViewF32[++vertexOffset] = tintEffect;
583-
vertexViewU32[++vertexOffset] = color;
584-
585-
vertexViewF32[++vertexOffset] = tx2;
586-
vertexViewF32[++vertexOffset] = ty2;
587-
vertexViewF32[++vertexOffset] = uvs.x2;
588-
vertexViewF32[++vertexOffset] = uvs.y2;
589-
vertexViewF32[++vertexOffset] = tintEffect;
590-
vertexViewU32[++vertexOffset] = color;
591-
592-
vertexViewF32[++vertexOffset] = tx3;
593-
vertexViewF32[++vertexOffset] = ty3;
594-
vertexViewF32[++vertexOffset] = uvs.x3;
595-
vertexViewF32[++vertexOffset] = uvs.y3;
596-
vertexViewF32[++vertexOffset] = tintEffect;
597-
vertexViewU32[++vertexOffset] = color;
598-
599-
this.vertexCount += 6;
600-
601-
if (this.vertexCount >= vertexCapacity)
602-
{
603-
this.flush();
604-
this.setTexture2D(texture, 0);
605-
}
489+
continue;
606490
}
607491

608-
particleOffset += batchSize;
609-
aliveLength -= batchSize;
492+
var frame = particle.frame;
493+
var x = -(frame.halfWidth);
494+
var y = -(frame.halfHeight);
495+
var color = particle.color;
496+
var xw = x + frame.width;
497+
var yh = y + frame.height;
498+
var sr = sin(particle.rotation);
499+
var cr = cos(particle.rotation);
500+
501+
var sra = cr * particle.scaleX;
502+
var srb = sr * particle.scaleX;
503+
var src = -sr * particle.scaleY;
504+
var srd = cr * particle.scaleY;
505+
var sre = particle.x - scrollX;
506+
var srf = particle.y - scrollY;
507+
508+
var mva = sra * cma + srb * cmc;
509+
var mvb = sra * cmb + srb * cmd;
510+
var mvc = src * cma + srd * cmc;
511+
var mvd = src * cmb + srd * cmd;
512+
var mve = sre * cma + srf * cmc + cme;
513+
var mvf = sre * cmb + srf * cmd + cmf;
514+
515+
var tx0 = x * mva + y * mvc + mve;
516+
var ty0 = x * mvb + y * mvd + mvf;
517+
var tx1 = x * mva + yh * mvc + mve;
518+
var ty1 = x * mvb + yh * mvd + mvf;
519+
var tx2 = xw * mva + yh * mvc + mve;
520+
var ty2 = xw * mvb + yh * mvd + mvf;
521+
var tx3 = xw * mva + y * mvc + mve;
522+
var ty3 = xw * mvb + y * mvd + mvf;
523+
524+
if (roundPixels)
525+
{
526+
tx0 |= 0;
527+
ty0 |= 0;
528+
tx1 |= 0;
529+
ty1 |= 0;
530+
tx2 |= 0;
531+
ty2 |= 0;
532+
tx3 |= 0;
533+
ty3 |= 0;
534+
}
610535

611-
if (this.vertexCount >= vertexCapacity)
536+
if (this.batchVertices(tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3, frame.u0, frame.v0, frame.u1, frame.v1, color, color, color, color, tintEffect))
612537
{
613-
this.flush();
614538
this.setTexture2D(texture, 0);
615539
}
616540
}
617541
}
618-
619-
this.setTexture2D(texture, 0);
620542
},
621543

622544
/**

0 commit comments

Comments
 (0)