Skip to content

Commit 0943f5b

Browse files
committed
fixed issue with light layer and other rendering elements. Also added depth sorting property to light layer
1 parent b21baeb commit 0943f5b

3 files changed

Lines changed: 128 additions & 9 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: '3d87a5a0-7b8b-11e7-b495-ad4ce45c1958'
2+
build: 'a530be80-7bbd-11e7-ba08-d1f8f66bd7c0'
33
};
44
module.exports = CHECKSUM;

v3/src/gameobjects/lightlayer/ForwardRenderer.js

Lines changed: 116 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,122 @@ var ForwardRenderer = function (renderer, lightLayer, interpolationPercentage, c
2121
for (var index = 0; index < length; ++index)
2222
{
2323
var spriteNormalPair = spriteList[index];
24-
renderer.setTexture(
25-
spriteNormalPair.
26-
normalTextureRef.
27-
source[spriteNormalPair.spriteRef.frame.sourceIndex].
28-
glTexture,
29-
1
30-
);
31-
batch.addSprite(spriteNormalPair.spriteRef, camera);
24+
var gameObject = spriteNormalPair.spriteRef;
25+
26+
/* Inlined function of add sprite modified. */
27+
{
28+
var tempMatrix = batch.tempMatrix;
29+
var frame = gameObject.frame;
30+
var forceFlipY = (frame.texture.source[frame.sourceIndex].glTexture.isRenderTexture ? true : false);
31+
var flipX = gameObject.flipX;
32+
var flipY = gameObject.flipY ^ forceFlipY;
33+
var vertexDataBuffer = batch.vertexDataBuffer;
34+
var vertexBufferObjectF32 = vertexDataBuffer.floatView;
35+
var vertexBufferObjectU32 = vertexDataBuffer.uintView;
36+
var vertexOffset = 0;
37+
var uvs = frame.uvs;
38+
var width = frame.width * (flipX ? -1 : 1);
39+
var height = frame.height * (flipY ? -1 : 1);
40+
var translateX = gameObject.x - camera.scrollX * gameObject.scrollFactorX;
41+
var translateY = gameObject.y - camera.scrollY * gameObject.scrollFactorY;
42+
var scaleX = gameObject.scaleX;
43+
var scaleY = gameObject.scaleY;
44+
var rotation = -gameObject.rotation;
45+
var tempMatrixMatrix = tempMatrix.matrix;
46+
var x = -gameObject.displayOriginX + frame.x + ((frame.width) * (flipX ? 1 : 0.0));
47+
var y = -gameObject.displayOriginY + frame.y + ((frame.height) * (flipY ? 1 : 0.0));
48+
var xw = x + width;
49+
var yh = y + height;
50+
var cameraMatrix = camera.matrix.matrix;
51+
var mva, mvb, mvc, mvd, mve, mvf, tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3;
52+
var sra, srb, src, srd, sre, srf, cma, cmb, cmc, cmd, cme, cmf;
53+
var alphaTL = gameObject._alphaTL;
54+
var alphaTR = gameObject._alphaTR;
55+
var alphaBL = gameObject._alphaBL;
56+
var alphaBR = gameObject._alphaBR;
57+
var tintTL = gameObject._tintTL;
58+
var tintTR = gameObject._tintTR;
59+
var tintBL = gameObject._tintBL;
60+
var tintBR = gameObject._tintBR;
61+
62+
tempMatrix.applyITRS(translateX, translateY, rotation, scaleX, scaleY);
63+
64+
sra = tempMatrixMatrix[0];
65+
srb = tempMatrixMatrix[1];
66+
src = tempMatrixMatrix[2];
67+
srd = tempMatrixMatrix[3];
68+
sre = tempMatrixMatrix[4];
69+
srf = tempMatrixMatrix[5];
70+
71+
cma = cameraMatrix[0];
72+
cmb = cameraMatrix[1];
73+
cmc = cameraMatrix[2];
74+
cmd = cameraMatrix[3];
75+
cme = cameraMatrix[4];
76+
cmf = cameraMatrix[5];
77+
78+
mva = sra * cma + srb * cmc;
79+
mvb = sra * cmb + srb * cmd;
80+
mvc = src * cma + srd * cmc;
81+
mvd = src * cmb + srd * cmd;
82+
mve = sre * cma + srf * cmc + cme;
83+
mvf = sre * cmb + srf * cmd + cmf;
84+
85+
tx0 = x * mva + y * mvc + mve;
86+
ty0 = x * mvb + y * mvd + mvf;
87+
tx1 = x * mva + yh * mvc + mve;
88+
ty1 = x * mvb + yh * mvd + mvf;
89+
tx2 = xw * mva + yh * mvc + mve;
90+
ty2 = xw * mvb + yh * mvd + mvf;
91+
tx3 = xw * mva + y * mvc + mve;
92+
ty3 = xw * mvb + y * mvd + mvf;
93+
94+
95+
if (renderer.currentTexture[0] !== frame.texture.source[frame.sourceIndex].glTexture ||
96+
renderer.currentTexture[1] !== spriteNormalPair.normalTextureRef.source[spriteNormalPair.spriteRef.frame.sourceIndex].glTexture)
97+
{
98+
batch.flush(lightLayer.passShader, lightLayer.renderTarget);
99+
renderer.setTexture(frame.texture.source[frame.sourceIndex].glTexture, 0);
100+
renderer.setTexture(spriteNormalPair.normalTextureRef.source[spriteNormalPair.spriteRef.frame.sourceIndex].glTexture, 1);
101+
}
102+
103+
batch.drawIndexed = true;
104+
batch.drawingMesh = false;
105+
vertexOffset = vertexDataBuffer.allocate(24);
106+
batch.elementCount += 6;
107+
108+
// Top Left
109+
vertexBufferObjectF32[vertexOffset++] = tx0;
110+
vertexBufferObjectF32[vertexOffset++] = ty0;
111+
vertexBufferObjectF32[vertexOffset++] = uvs.x0;
112+
vertexBufferObjectF32[vertexOffset++] = uvs.y0;
113+
vertexBufferObjectU32[vertexOffset++] = tintTL;
114+
vertexBufferObjectF32[vertexOffset++] = alphaTL;
115+
116+
// Bottom Left
117+
vertexBufferObjectF32[vertexOffset++] = tx1;
118+
vertexBufferObjectF32[vertexOffset++] = ty1;
119+
vertexBufferObjectF32[vertexOffset++] = uvs.x1;
120+
vertexBufferObjectF32[vertexOffset++] = uvs.y1;
121+
vertexBufferObjectU32[vertexOffset++] = tintBL;
122+
vertexBufferObjectF32[vertexOffset++] = alphaBL;
123+
124+
// Bottom Right
125+
vertexBufferObjectF32[vertexOffset++] = tx2;
126+
vertexBufferObjectF32[vertexOffset++] = ty2;
127+
vertexBufferObjectF32[vertexOffset++] = uvs.x2;
128+
vertexBufferObjectF32[vertexOffset++] = uvs.y2;
129+
vertexBufferObjectU32[vertexOffset++] = tintBR;
130+
vertexBufferObjectF32[vertexOffset++] = alphaBR;
131+
132+
// Top Right
133+
vertexBufferObjectF32[vertexOffset++] = tx3;
134+
vertexBufferObjectF32[vertexOffset++] = ty3;
135+
vertexBufferObjectF32[vertexOffset++] = uvs.x3;
136+
vertexBufferObjectF32[vertexOffset++] = uvs.y3;
137+
vertexBufferObjectU32[vertexOffset++] = tintTR;
138+
vertexBufferObjectF32[vertexOffset++] = alphaTR;
139+
}
32140
}
33141

34142
batch.flush(lightLayer.passShader, lightLayer.renderTarget);

v3/src/gameobjects/lightlayer/LightLayer.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ var LightLayer = new Class({
4747
this.lights = [];
4848
this.sprites = [];
4949
this.lightsLocations = [];
50+
this._z = 0;
5051

5152
if (resourceManager !== undefined && !this.deferred)
5253
{
@@ -115,6 +116,16 @@ var LightLayer = new Class({
115116
this.setOrigin(0, 0);
116117
},
117118

119+
get z()
120+
{
121+
return this._z;
122+
},
123+
124+
set z(newZ)
125+
{
126+
this._z = newZ;
127+
},
128+
118129
setAmbientLightColor: function (r, g, b)
119130
{
120131
this.ambientLightColorR = r;

0 commit comments

Comments
 (0)