Skip to content

Commit 1a0f411

Browse files
committed
Cameras working with BlitterBatch
1 parent fbb591f commit 1a0f411

5 files changed

Lines changed: 73 additions & 135 deletions

File tree

v3/src/checksum.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
var CHECKSUM = {
2-
build: '2d175030-f855-11e6-8baa-a7d5f1237a30'
2+
build: '9824f700-f86a-11e6-b8eb-f13c1d2880b2'
33
};
44
module.exports = CHECKSUM;

v3/src/gameobjects/blitter/BlitterWebGLRenderer.js

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1-
var BlitterWebGLRenderer = function (renderer, src, interpolationPercentage)
1+
var BlitterWebGLRenderer = function (renderer, src, interpolationPercentage, camera)
22
{
33
var worldAlpha = src.color.worldAlpha;
44
var list = src.getRenderList();
5-
5+
var blitterBatch = renderer.blitterBatch;
6+
var cameraMatrix = camera.matrix.matrix;
7+
var a = cameraMatrix[0];
8+
var b = cameraMatrix[1];
9+
var c = cameraMatrix[2];
10+
var d = cameraMatrix[3];
11+
var e = cameraMatrix[4];
12+
var f = cameraMatrix[5];
13+
var cameraScrollX = camera.scrollX;
14+
var cameraScrollY = camera.scrollY;
615
// Skip rendering?
716

817
if (src.skipRender || !src.visible || worldAlpha === 0 || list.length === 0)
@@ -12,11 +21,57 @@ var BlitterWebGLRenderer = function (renderer, src, interpolationPercentage)
1221

1322
// Render bobs
1423

15-
for (var i = 0; i < list.length; i++)
24+
for (var i = 0, l = list.length; i < l; i++)
1625
{
1726
var bob = list[i];
27+
var frame = bob.frame;
28+
var alpha = bob.alpha;
29+
var vertexDataBuffer = blitterBatch.vertexDataBuffer;
30+
var vertexBuffer = vertexDataBuffer.floatView;
31+
var vertexOffset = 0;
32+
var uvs = frame.uvs;
33+
var width = frame.width;
34+
var height = frame.height;
35+
var x = bob.x + frame.x - cameraScrollX;
36+
var y = bob.y + frame.y - cameraScrollY;
37+
var xw = x + width;
38+
var yh = y + height;
39+
var tx = x * a + y * c + e;
40+
var ty = x * b + y * d + f;
41+
var txw = xw * a + yh * c + e;
42+
var tyh = xw * b + yh * d + f;
43+
44+
if (blitterBatch.elementCount >= blitterBatch.maxParticles)
45+
{
46+
blitterBatch.flush();
47+
}
48+
49+
renderer.setBatch(blitterBatch, frame.texture.source[frame.sourceIndex].glTexture);
50+
vertexOffset = vertexDataBuffer.allocate(20);
51+
blitterBatch.elementCount += 6;
52+
x += frame.x;
53+
y += frame.y;
1854

19-
renderer.blitterBatch.add(bob.x, bob.y, bob.frame, bob.alpha);
55+
vertexBuffer[vertexOffset++] = tx;
56+
vertexBuffer[vertexOffset++] = ty;
57+
vertexBuffer[vertexOffset++] = uvs.x0;
58+
vertexBuffer[vertexOffset++] = uvs.y0;
59+
vertexBuffer[vertexOffset++] = alpha;
60+
vertexBuffer[vertexOffset++] = tx;
61+
vertexBuffer[vertexOffset++] = tyh;
62+
vertexBuffer[vertexOffset++] = uvs.x1;
63+
vertexBuffer[vertexOffset++] = uvs.y1;
64+
vertexBuffer[vertexOffset++] = alpha;
65+
vertexBuffer[vertexOffset++] = txw;
66+
vertexBuffer[vertexOffset++] = tyh;
67+
vertexBuffer[vertexOffset++] = uvs.x2;
68+
vertexBuffer[vertexOffset++] = uvs.y2;
69+
vertexBuffer[vertexOffset++] = alpha;
70+
vertexBuffer[vertexOffset++] = txw;
71+
vertexBuffer[vertexOffset++] = ty;
72+
vertexBuffer[vertexOffset++] = uvs.x3;
73+
vertexBuffer[vertexOffset++] = uvs.y3;
74+
vertexBuffer[vertexOffset++] = alpha;
2075
}
2176
};
2277

v3/src/gameobjects/image/ImageWebGLRenderer.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11

22
var ImageWebGLRenderer = function (renderer, src, interpolationPercentage, camera)
33
{
4+
//--------------------
5+
// Inlined quad push
6+
//--------------------
7+
48
var frame = src.frame;
59
var alpha = 16777216;
610
var transform2D = src.transform;
@@ -11,7 +15,7 @@ var ImageWebGLRenderer = function (renderer, src, interpolationPercentage, camer
1115
var vertexDataBuffer = spriteBatch.vertexDataBuffer;
1216
var vertexBufferF32 = vertexDataBuffer.floatView;
1317
var vertexBufferU32 = vertexDataBuffer.uintView;
14-
var vertexOffset = vertexDataBuffer.allocate(40);
18+
var vertexOffset = 0;
1519
var uvs = frame.uvs;
1620
var width = frame.width;
1721
var height = frame.height;
@@ -37,7 +41,9 @@ var ImageWebGLRenderer = function (renderer, src, interpolationPercentage, camer
3741
var tyh = xw * b + yh * d + f;
3842

3943
renderer.setBatch(spriteBatch, frame.texture.source[frame.sourceIndex].glTexture);
40-
44+
vertexOffset = vertexDataBuffer.allocate(40);
45+
spriteBatch.elementCount += 6;
46+
4147
vertexBufferF32[vertexOffset++] = tx;
4248
vertexBufferF32[vertexOffset++] = ty;
4349
vertexBufferF32[vertexOffset++] = uvs.x0;
@@ -78,8 +84,6 @@ var ImageWebGLRenderer = function (renderer, src, interpolationPercentage, camer
7884
vertexBufferF32[vertexOffset++] = scaleY;
7985
vertexBufferF32[vertexOffset++] = rotation;
8086
vertexBufferU32[vertexOffset++] = vertexColor.topRight;
81-
82-
spriteBatch.elementCount += 6;
8387
};
8488

8589
module.exports = ImageWebGLRenderer;

v3/src/renderer/webgl/batches/blitter/BlitterBatch.js

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -112,52 +112,6 @@ BlitterBatch.prototype = {
112112
return (this.vertexDataBuffer.getByteLength() >= this.vertexDataBuffer.getByteCapacity());
113113
},
114114

115-
add: function (x, y, frame, alpha)
116-
{
117-
this.manager.setBatch(this, frame.texture.source[frame.sourceIndex].glTexture);
118-
119-
if (this.elementCount >= this.maxParticles)
120-
{
121-
this.flush();
122-
}
123-
124-
var vertexDataBuffer = this.vertexDataBuffer;
125-
var vertexBuffer = vertexDataBuffer.floatView;
126-
var vertexOffset = vertexDataBuffer.allocate(CONST.PARTICLE_VERTEX_COMPONENT_COUNT * CONST.PARTICLE_VERTEX_COUNT);
127-
var uvs = frame.uvs;
128-
var width = frame.width;
129-
var height = frame.height;
130-
131-
x += frame.x;
132-
y += frame.y;
133-
134-
vertexBuffer[vertexOffset++] = x;
135-
vertexBuffer[vertexOffset++] = y;
136-
vertexBuffer[vertexOffset++] = uvs.x0;
137-
vertexBuffer[vertexOffset++] = uvs.y0;
138-
vertexBuffer[vertexOffset++] = alpha;
139-
140-
vertexBuffer[vertexOffset++] = x;
141-
vertexBuffer[vertexOffset++] = y + height;
142-
vertexBuffer[vertexOffset++] = uvs.x1;
143-
vertexBuffer[vertexOffset++] = uvs.y1;
144-
vertexBuffer[vertexOffset++] = alpha;
145-
146-
vertexBuffer[vertexOffset++] = x + width;
147-
vertexBuffer[vertexOffset++] = y + height;
148-
vertexBuffer[vertexOffset++] = uvs.x2;
149-
vertexBuffer[vertexOffset++] = uvs.y2;
150-
vertexBuffer[vertexOffset++] = alpha;
151-
152-
vertexBuffer[vertexOffset++] = x + width;
153-
vertexBuffer[vertexOffset++] = y;
154-
vertexBuffer[vertexOffset++] = uvs.x3;
155-
vertexBuffer[vertexOffset++] = uvs.y3;
156-
vertexBuffer[vertexOffset++] = alpha;
157-
158-
this.elementCount += CONST.PARTICLE_INDEX_COUNT;
159-
},
160-
161115
bind: function ()
162116
{
163117
var gl = this.glContext;

v3/src/renderer/webgl/batches/sprite/SpriteBatch.js

Lines changed: 5 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -112,86 +112,6 @@ SpriteBatch.prototype = {
112112
return (this.vertexDataBuffer.getByteLength() >= this.vertexDataBuffer.getByteCapacity());
113113
},
114114

115-
add: function (frame, anchorX, anchorY, transform2D, vertexColor, camera)
116-
{
117-
this.manager.setBatch(this, frame.texture.source[frame.sourceIndex].glTexture);
118-
119-
// The user must check if the buffers are full before flushing
120-
// this is to give freedom of when should the renderer flush. var vertexDataBuffer = this.vertexDataBuffer;
121-
var vertexDataBuffer = this.vertexDataBuffer;
122-
var vertexBufferF32 = vertexDataBuffer.floatView;
123-
var vertexBufferU32 = vertexDataBuffer.uintView;
124-
var vertexOffset = vertexDataBuffer.allocate(CONST.SPRITE_VERTEX_COMPONENT_COUNT * CONST.SPRITE_VERTEX_COUNT);
125-
var uvs = frame.uvs;
126-
var width = frame.width;
127-
var height = frame.height;
128-
var translateX = transform2D.x - camera.scrollX;
129-
var translateY = transform2D.y - camera.scrollY;
130-
var scaleX = transform2D.scaleX;
131-
var scaleY = transform2D.scaleY;
132-
var rotation = transform2D.angle;
133-
var a = cameraMatrix[0];
134-
var b = cameraMatrix[1];
135-
var c = cameraMatrix[2];
136-
var d = cameraMatrix[3];
137-
var e = cameraMatrix[4];
138-
var f = cameraMatrix[5];
139-
var x = width * -anchorX + frame.x;
140-
var y = height * -anchorY + frame.y;
141-
var xw = x + width;
142-
var yh = y + height;
143-
var tx = x * a + y * c + e;
144-
var ty = x * b + y * d + f;
145-
var txw = xw * a + yh * c + e;
146-
var tyh = xw * b + yh * d + f;
147-
148-
vertexBufferF32[vertexOffset++] = tx;
149-
vertexBufferF32[vertexOffset++] = ty;
150-
vertexBufferF32[vertexOffset++] = uvs.x0;
151-
vertexBufferF32[vertexOffset++] = uvs.y0;
152-
vertexBufferF32[vertexOffset++] = translateX;
153-
vertexBufferF32[vertexOffset++] = translateY;
154-
vertexBufferF32[vertexOffset++] = scaleX;
155-
vertexBufferF32[vertexOffset++] = scaleY;
156-
vertexBufferF32[vertexOffset++] = rotation;
157-
vertexBufferU32[vertexOffset++] = vertexColor.topLeft;
158-
159-
vertexBufferF32[vertexOffset++] = tx;
160-
vertexBufferF32[vertexOffset++] = tyh;
161-
vertexBufferF32[vertexOffset++] = uvs.x1;
162-
vertexBufferF32[vertexOffset++] = uvs.y1;
163-
vertexBufferF32[vertexOffset++] = translateX;
164-
vertexBufferF32[vertexOffset++] = translateY;
165-
vertexBufferF32[vertexOffset++] = scaleX;
166-
vertexBufferF32[vertexOffset++] = scaleY;
167-
vertexBufferF32[vertexOffset++] = rotation;
168-
vertexBufferU32[vertexOffset++] = vertexColor.bottomLeft;
169-
170-
vertexBufferF32[vertexOffset++] = txw;
171-
vertexBufferF32[vertexOffset++] = tyh;
172-
vertexBufferF32[vertexOffset++] = uvs.x2;
173-
vertexBufferF32[vertexOffset++] = uvs.y2;
174-
vertexBufferF32[vertexOffset++] = translateX;
175-
vertexBufferF32[vertexOffset++] = translateY;
176-
vertexBufferF32[vertexOffset++] = scaleX;
177-
vertexBufferF32[vertexOffset++] = scaleY;
178-
vertexBufferF32[vertexOffset++] = rotation;
179-
vertexBufferU32[vertexOffset++] = vertexColor.bottomRight;
180-
181-
vertexBufferF32[vertexOffset++] = txw;
182-
vertexBufferF32[vertexOffset++] = ty;
183-
vertexBufferF32[vertexOffset++] = uvs.x3;
184-
vertexBufferF32[vertexOffset++] = uvs.y3;
185-
vertexBufferF32[vertexOffset++] = translateX;
186-
vertexBufferF32[vertexOffset++] = translateY;
187-
vertexBufferF32[vertexOffset++] = scaleX;
188-
vertexBufferF32[vertexOffset++] = scaleY;
189-
vertexBufferF32[vertexOffset++] = rotation;
190-
vertexBufferU32[vertexOffset++] = vertexColor.topRight;
191-
192-
this.elementCount += CONST.SPRITE_INDEX_COUNT;
193-
},
194-
195115
bind: function ()
196116
{
197117
var gl = this.glContext;
@@ -213,6 +133,11 @@ SpriteBatch.prototype = {
213133

214134
flush: function ()
215135
{
136+
if (this.elementCount === 0)
137+
{
138+
return;
139+
}
140+
216141
var gl = this.glContext;
217142
var vertexDataBuffer = this.vertexDataBuffer;
218143

0 commit comments

Comments
 (0)