Skip to content

Commit 57333ea

Browse files
committed
Fixed issue with null texture on particle emitter batch generation
1 parent 6293233 commit 57333ea

1 file changed

Lines changed: 90 additions & 7 deletions

File tree

src/renderer/webgl/pipelines/TextureTintPipeline.js

Lines changed: 90 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ var TextureTintPipeline = new Class({
277277

278278
this.vertexCount = 0;
279279
batches.length = 0;
280+
this.pushBatch();
280281
this.flushLocked = false;
281282

282283
return this;
@@ -375,7 +376,6 @@ var TextureTintPipeline = new Class({
375376
var vertexViewF32 = this.vertexViewF32;
376377
var vertexViewU32 = this.vertexViewU32;
377378
var renderer = this.renderer;
378-
var resolution = renderer.config.resolution; // eslint-disable-line no-unused-vars
379379
var maxQuads = this.maxQuads;
380380
var cameraScrollX = camera.scrollX;
381381
var cameraScrollY = camera.scrollY;
@@ -505,6 +505,8 @@ var TextureTintPipeline = new Class({
505505
}
506506
}
507507
}
508+
509+
this.setTexture2D(texture, 0);
508510
},
509511

510512
/**
@@ -524,7 +526,6 @@ var TextureTintPipeline = new Class({
524526
var vertexViewF32 = this.vertexViewF32;
525527
var vertexViewU32 = this.vertexViewU32;
526528
var renderer = this.renderer;
527-
var resolution = renderer.config.resolution; // eslint-disable-line no-unused-vars
528529
var list = blitter.getRenderList();
529530
var length = list.length;
530531
var cameraMatrix = camera.matrix.matrix;
@@ -643,7 +644,6 @@ var TextureTintPipeline = new Class({
643644
var vertexViewF32 = this.vertexViewF32;
644645
var vertexViewU32 = this.vertexViewU32;
645646
var renderer = this.renderer;
646-
var resolution = renderer.config.resolution; // eslint-disable-line no-unused-vars
647647
var cameraMatrix = camera.matrix.matrix;
648648
var frame = sprite.frame;
649649
var texture = frame.texture.source[frame.sourceIndex].glTexture;
@@ -771,7 +771,6 @@ var TextureTintPipeline = new Class({
771771
var vertexViewF32 = this.vertexViewF32;
772772
var vertexViewU32 = this.vertexViewU32;
773773
var renderer = this.renderer;
774-
var resolution = renderer.config.resolution; // eslint-disable-line no-unused-vars
775774
var cameraMatrix = camera.matrix.matrix;
776775
var frame = mesh.frame;
777776
var texture = mesh.texture.source[frame.sourceIndex].glTexture;
@@ -850,7 +849,6 @@ var TextureTintPipeline = new Class({
850849
var vertexViewF32 = this.vertexViewF32;
851850
var vertexViewU32 = this.vertexViewU32;
852851
var renderer = this.renderer;
853-
var resolution = renderer.config.resolution; // eslint-disable-line no-unused-vars
854852
var cameraMatrix = camera.matrix.matrix;
855853
var cameraWidth = camera.width + 50;
856854
var cameraHeight = camera.height + 50;
@@ -1074,7 +1072,6 @@ var TextureTintPipeline = new Class({
10741072
var vertexViewF32 = this.vertexViewF32;
10751073
var vertexViewU32 = this.vertexViewU32;
10761074
var renderer = this.renderer;
1077-
var resolution = renderer.config.resolution; // eslint-disable-line no-unused-vars
10781075
var cameraMatrix = camera.matrix.matrix;
10791076
var frame = bitmapText.frame;
10801077
var textureSource = bitmapText.texture.source[frame.sourceIndex];
@@ -1535,7 +1532,6 @@ var TextureTintPipeline = new Class({
15351532
var vertexViewF32 = this.vertexViewF32;
15361533
var vertexViewU32 = this.vertexViewU32;
15371534
var renderer = this.renderer;
1538-
var resolution = renderer.config.resolution; // eslint-disable-line no-unused-vars
15391535
var cameraMatrix = camera.matrix.matrix;
15401536
var width = srcWidth * (flipX ? -1.0 : 1.0);
15411537
var height = srcHeight * (flipY ? -1.0 : 1.0);
@@ -1617,6 +1613,93 @@ var TextureTintPipeline = new Class({
16171613
this.vertexCount += 6;
16181614
},
16191615

1616+
drawTexture: function (
1617+
texture,
1618+
srcX, srcY,
1619+
frameX, frameY, frameWidth, frameHeight,
1620+
transformMatrix
1621+
)
1622+
{
1623+
this.renderer.setPipeline(this);
1624+
1625+
if (this.vertexCount + 6 > this.vertexCapacity)
1626+
{
1627+
this.flush();
1628+
}
1629+
1630+
var vertexViewF32 = this.vertexViewF32;
1631+
var vertexViewU32 = this.vertexViewU32;
1632+
var renderer = this.renderer;
1633+
var width = srcWidth;
1634+
var height = srcHeight;
1635+
var x = srcX;
1636+
var y = srcY;
1637+
var xw = x + width;
1638+
var yh = y + height;
1639+
var mva = transformMatrix[0];
1640+
var mvb = transformMatrix[1];
1641+
var mvc = transformMatrix[2];
1642+
var mvd = transformMatrix[3];
1643+
var mve = transformMatrix[4];
1644+
var mvf = transformMatrix[5];
1645+
var tx0 = x * mva + y * mvc + mve;
1646+
var ty0 = x * mvb + y * mvd + mvf;
1647+
var tx1 = x * mva + yh * mvc + mve;
1648+
var ty1 = x * mvb + yh * mvd + mvf;
1649+
var tx2 = xw * mva + yh * mvc + mve;
1650+
var ty2 = xw * mvb + yh * mvd + mvf;
1651+
var tx3 = xw * mva + y * mvc + mve;
1652+
var ty3 = xw * mvb + y * mvd + mvf;
1653+
var vertexOffset = 0;
1654+
var textureWidth = texture.width;
1655+
var textureHeight = texture.height;
1656+
var u0 = (frameX / textureWidth);
1657+
var v0 = (frameY / textureHeight);
1658+
var u1 = (frameX + frameWidth) / textureWidth;
1659+
var v1 = (frameY + frameHeight) / textureHeight;
1660+
var tint = 0xffffffff;
1661+
1662+
this.setTexture2D(texture, 0);
1663+
1664+
vertexOffset = this.vertexCount * this.vertexComponentCount;
1665+
1666+
vertexViewF32[vertexOffset + 0] = tx0;
1667+
vertexViewF32[vertexOffset + 1] = ty0;
1668+
vertexViewF32[vertexOffset + 2] = u0;
1669+
vertexViewF32[vertexOffset + 3] = v0;
1670+
vertexViewU32[vertexOffset + 4] = tint;
1671+
vertexViewF32[vertexOffset + 5] = tx1;
1672+
vertexViewF32[vertexOffset + 6] = ty1;
1673+
vertexViewF32[vertexOffset + 7] = u0;
1674+
vertexViewF32[vertexOffset + 8] = v1;
1675+
vertexViewU32[vertexOffset + 9] = tint;
1676+
vertexViewF32[vertexOffset + 10] = tx2;
1677+
vertexViewF32[vertexOffset + 11] = ty2;
1678+
vertexViewF32[vertexOffset + 12] = u1;
1679+
vertexViewF32[vertexOffset + 13] = v1;
1680+
vertexViewU32[vertexOffset + 14] = tint;
1681+
vertexViewF32[vertexOffset + 15] = tx0;
1682+
vertexViewF32[vertexOffset + 16] = ty0;
1683+
vertexViewF32[vertexOffset + 17] = u0;
1684+
vertexViewF32[vertexOffset + 18] = v0;
1685+
vertexViewU32[vertexOffset + 19] = tint;
1686+
vertexViewF32[vertexOffset + 20] = tx2;
1687+
vertexViewF32[vertexOffset + 21] = ty2;
1688+
vertexViewF32[vertexOffset + 22] = u1;
1689+
vertexViewF32[vertexOffset + 23] = v1;
1690+
vertexViewU32[vertexOffset + 24] = tint;
1691+
vertexViewF32[vertexOffset + 25] = tx3;
1692+
vertexViewF32[vertexOffset + 26] = ty3;
1693+
vertexViewF32[vertexOffset + 27] = u1;
1694+
vertexViewF32[vertexOffset + 28] = v0;
1695+
vertexViewU32[vertexOffset + 29] = tint;
1696+
1697+
this.vertexCount += 6;
1698+
1699+
// Force an immediate draw
1700+
this.flush();
1701+
},
1702+
16201703
/**
16211704
* [description]
16221705
*

0 commit comments

Comments
 (0)