Skip to content

Commit 7583695

Browse files
committed
Inlined spriteBatch.add
1 parent 6566a38 commit 7583695

2 files changed

Lines changed: 88 additions & 11 deletions

File tree

v3/src/gameobjects/image/ImageWebGLRenderer.js

Lines changed: 84 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,92 @@ var ImageWebGLRenderer = function (renderer, src, interpolationPercentage)
1919
// var bg = src.color._glBg;
2020
// renderer.batch.add(frame.source, src.blendMode, verts, frame.uvs, index, alpha, tint, bg);
2121

22+
// Not inlined
23+
//renderer.setBlendMode(src.color._blendMode);
24+
//renderer.spriteBatch.add(
25+
// src.frame,
26+
// src.anchorX, src.anchorY,
27+
// transform.worldMatrix.matrix,
28+
// src.color._glTint
29+
//);
30+
31+
/*******************/
32+
33+
// Inline spriteBatch.add gives a huge boost
2234
var transform = src.transform;
35+
var spriteBatch = renderer.spriteBatch;
36+
var anchorX = src.anchorX;
37+
var anchorY = src.anchorY;
38+
var matrix = transform.worldMatrix.matrix;
39+
var vertexColor = src.color._glTint;
40+
2341
renderer.setBlendMode(src.color._blendMode);
24-
renderer.spriteBatch.add(
25-
frame,
26-
src.anchorX, src.anchorY,
27-
transform.worldMatrix.matrix,
28-
src.color._glTint
29-
);
42+
renderer.setBatch(spriteBatch, frame.texture.source[frame.sourceIndex].glTexture);
43+
// The user must check if the buffers are full before flushing
44+
// this is to give freedom of when should the renderer flush. var vertexDataBuffer = this.vertexDataBuffer;
45+
var vertexDataBuffer = spriteBatch.vertexDataBuffer;
46+
var vertexBufferF32 = vertexDataBuffer.floatView;
47+
var vertexBufferU32 = vertexDataBuffer.uintView;
48+
var vertexOffset = vertexDataBuffer.allocate(44);
49+
var uvs = frame.uvs;
50+
var width = frame.width;
51+
var height = frame.height;
52+
var x = width * -anchorX + frame.x;
53+
var y = height * -anchorY + frame.y;
54+
var a = matrix[0];
55+
var b = matrix[1];
56+
var c = matrix[2];
57+
var d = matrix[3];
58+
var tx = matrix[4];
59+
var ty = matrix[5];
60+
var xw = x + width;
61+
var yh = y + height;
62+
63+
vertexBufferF32[vertexOffset++] = x;
64+
vertexBufferF32[vertexOffset++] = y;
65+
vertexBufferF32[vertexOffset++] = uvs.x0;
66+
vertexBufferF32[vertexOffset++] = uvs.y0;
67+
vertexBufferF32[vertexOffset++] = a;
68+
vertexBufferF32[vertexOffset++] = b;
69+
vertexBufferF32[vertexOffset++] = c;
70+
vertexBufferF32[vertexOffset++] = d;
71+
vertexBufferF32[vertexOffset++] = tx;
72+
vertexBufferF32[vertexOffset++] = ty;
73+
vertexBufferU32[vertexOffset++] = vertexColor.topLeft;
74+
vertexBufferF32[vertexOffset++] = x;
75+
vertexBufferF32[vertexOffset++] = yh;
76+
vertexBufferF32[vertexOffset++] = uvs.x1;
77+
vertexBufferF32[vertexOffset++] = uvs.y1;
78+
vertexBufferF32[vertexOffset++] = a;
79+
vertexBufferF32[vertexOffset++] = b;
80+
vertexBufferF32[vertexOffset++] = c;
81+
vertexBufferF32[vertexOffset++] = d;
82+
vertexBufferF32[vertexOffset++] = tx;
83+
vertexBufferF32[vertexOffset++] = ty;
84+
vertexBufferU32[vertexOffset++] = vertexColor.bottomLeft;
85+
vertexBufferF32[vertexOffset++] = xw;
86+
vertexBufferF32[vertexOffset++] = yh;
87+
vertexBufferF32[vertexOffset++] = uvs.x2;
88+
vertexBufferF32[vertexOffset++] = uvs.y2;
89+
vertexBufferF32[vertexOffset++] = a;
90+
vertexBufferF32[vertexOffset++] = b;
91+
vertexBufferF32[vertexOffset++] = c;
92+
vertexBufferF32[vertexOffset++] = d;
93+
vertexBufferF32[vertexOffset++] = tx;
94+
vertexBufferF32[vertexOffset++] = ty;
95+
vertexBufferU32[vertexOffset++] = vertexColor.bottomRight;
96+
vertexBufferF32[vertexOffset++] = xw;
97+
vertexBufferF32[vertexOffset++] = y;
98+
vertexBufferF32[vertexOffset++] = uvs.x3;
99+
vertexBufferF32[vertexOffset++] = uvs.y3;
100+
vertexBufferF32[vertexOffset++] = a;
101+
vertexBufferF32[vertexOffset++] = b;
102+
vertexBufferF32[vertexOffset++] = c;
103+
vertexBufferF32[vertexOffset++] = d;
104+
vertexBufferF32[vertexOffset++] = tx;
105+
vertexBufferF32[vertexOffset++] = ty;
106+
vertexBufferU32[vertexOffset++] = vertexColor.topRight;
107+
spriteBatch.elementCount += 6;
30108
};
31109

32110
module.exports = ImageWebGLRenderer;

v3/src/renderer/webgl/WebGLRenderer.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -256,14 +256,13 @@ WebGLRenderer.prototype = {
256256
* by the amount of time that will be simulated the next time update()
257257
* runs. Useful for interpolating frames.
258258
*/
259-
render: function (state, interpolationPercentage)
260259
{
261-
262260
// Could move to the State Systems or MainLoop
263-
for (var c = 0; c < state.sys.children.list.length; c++)
261+
var list = state.sys.children.list;
262+
var length = list.length;
263+
for (var index = 0; index < length; ++index)
264264
{
265-
var child = state.sys.children.list[c];
266-
265+
var child = list[index];
267266
child.renderWebGL(this, child, interpolationPercentage);
268267
var batch = this.batch;
269268
if (batch && batch.isFull())

0 commit comments

Comments
 (0)