Skip to content

Commit 679bbef

Browse files
committed
Deferred renderer added to Light Layer
1 parent 2955df2 commit 679bbef

7 files changed

Lines changed: 337 additions & 13 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: 'b28c18c0-7cff-11e7-b7e1-779245c06136'
2+
build: '6ff2d290-7d5b-11e7-a786-3d8b38c88055'
33
};
44
module.exports = CHECKSUM;
Lines changed: 152 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,160 @@
1-
var DeferredRenderer = function (renderer, src, interpolationPercentage, camera)
1+
var DeferredRenderer = function (renderer, lightLayer, interpolationPercentage, camera)
22
{
3+
var spriteList = lightLayer.sprites;
4+
var length = spriteList.length;
5+
var batch = renderer.spriteBatch;
6+
var gl = renderer.gl;
7+
38
if (this.renderMask !== this.renderFlags)
49
{
510
return;
611
}
12+
13+
if (renderer.currentRenderer !== null)
14+
{
15+
renderer.currentRenderer.flush();
16+
}
17+
18+
batch.bind(lightLayer.gBufferShaderPass);
19+
batch.indexBufferObject.bind();
20+
lightLayer.updateLights(renderer, camera, this.lightPassShader);
21+
22+
gl.bindFramebuffer(gl.FRAMEBUFFER, lightLayer.gBufferFbo);
23+
gl.clearColor(0, 0, 0, 0);
24+
gl.clear(gl.COLOR_BUFFER_BIT);
25+
for (var index = 0; index < length; ++index)
26+
{
27+
var spriteNormalPair = spriteList[index];
28+
var gameObject = spriteNormalPair.spriteRef;
29+
30+
/* Inlined function of add sprite modified. */
31+
{
32+
var tempMatrix = batch.tempMatrix;
33+
var frame = gameObject.frame;
34+
var forceFlipY = (frame.texture.source[frame.sourceIndex].glTexture.isRenderTexture ? true : false);
35+
var flipX = gameObject.flipX;
36+
var flipY = gameObject.flipY ^ forceFlipY;
37+
var vertexDataBuffer = batch.vertexDataBuffer;
38+
var vertexBufferObjectF32 = vertexDataBuffer.floatView;
39+
var vertexBufferObjectU32 = vertexDataBuffer.uintView;
40+
var vertexOffset = 0;
41+
var uvs = frame.uvs;
42+
var width = frame.width * (flipX ? -1 : 1);
43+
var height = frame.height * (flipY ? -1 : 1);
44+
var translateX = gameObject.x - camera.scrollX * gameObject.scrollFactorX;
45+
var translateY = gameObject.y - camera.scrollY * gameObject.scrollFactorY;
46+
var scaleX = gameObject.scaleX;
47+
var scaleY = gameObject.scaleY;
48+
var rotation = -gameObject.rotation;
49+
var tempMatrixMatrix = tempMatrix.matrix;
50+
var x = -gameObject.displayOriginX + frame.x + ((frame.width) * (flipX ? 1 : 0.0));
51+
var y = -gameObject.displayOriginY + frame.y + ((frame.height) * (flipY ? 1 : 0.0));
52+
var xw = x + width;
53+
var yh = y + height;
54+
var cameraMatrix = camera.matrix.matrix;
55+
var mva, mvb, mvc, mvd, mve, mvf, tx0, ty0, tx1, ty1, tx2, ty2, tx3, ty3;
56+
var sra, srb, src, srd, sre, srf, cma, cmb, cmc, cmd, cme, cmf;
57+
var alphaTL = gameObject._alphaTL;
58+
var alphaTR = gameObject._alphaTR;
59+
var alphaBL = gameObject._alphaBL;
60+
var alphaBR = gameObject._alphaBR;
61+
var tintTL = gameObject._tintTL;
62+
var tintTR = gameObject._tintTR;
63+
var tintBL = gameObject._tintBL;
64+
var tintBR = gameObject._tintBR;
65+
66+
tempMatrix.applyITRS(translateX, translateY, rotation, scaleX, scaleY);
67+
68+
sra = tempMatrixMatrix[0];
69+
srb = tempMatrixMatrix[1];
70+
src = tempMatrixMatrix[2];
71+
srd = tempMatrixMatrix[3];
72+
sre = tempMatrixMatrix[4];
73+
srf = tempMatrixMatrix[5];
74+
75+
cma = cameraMatrix[0];
76+
cmb = cameraMatrix[1];
77+
cmc = cameraMatrix[2];
78+
cmd = cameraMatrix[3];
79+
cme = cameraMatrix[4];
80+
cmf = cameraMatrix[5];
81+
82+
mva = sra * cma + srb * cmc;
83+
mvb = sra * cmb + srb * cmd;
84+
mvc = src * cma + srd * cmc;
85+
mvd = src * cmb + srd * cmd;
86+
mve = sre * cma + srf * cmc + cme;
87+
mvf = sre * cmb + srf * cmd + cmf;
88+
89+
tx0 = x * mva + y * mvc + mve;
90+
ty0 = x * mvb + y * mvd + mvf;
91+
tx1 = x * mva + yh * mvc + mve;
92+
ty1 = x * mvb + yh * mvd + mvf;
93+
tx2 = xw * mva + yh * mvc + mve;
94+
ty2 = xw * mvb + yh * mvd + mvf;
95+
tx3 = xw * mva + y * mvc + mve;
96+
ty3 = xw * mvb + y * mvd + mvf;
97+
98+
99+
if (renderer.currentTexture[0] !== frame.texture.source[frame.sourceIndex].glTexture ||
100+
renderer.currentTexture[1] !== spriteNormalPair.normalTextureRef.source[spriteNormalPair.spriteRef.frame.sourceIndex].glTexture)
101+
{
102+
batch.flush(lightLayer.gBufferShaderPass, lightLayer.renderTarget);
103+
renderer.setTexture(frame.texture.source[frame.sourceIndex].glTexture, 0);
104+
renderer.setTexture(spriteNormalPair.normalTextureRef.source[spriteNormalPair.spriteRef.frame.sourceIndex].glTexture, 1);
105+
}
106+
107+
batch.drawIndexed = true;
108+
batch.drawingMesh = false;
109+
vertexOffset = vertexDataBuffer.allocate(24);
110+
batch.elementCount += 6;
111+
112+
// Top Left
113+
vertexBufferObjectF32[vertexOffset++] = tx0;
114+
vertexBufferObjectF32[vertexOffset++] = ty0;
115+
vertexBufferObjectF32[vertexOffset++] = uvs.x0;
116+
vertexBufferObjectF32[vertexOffset++] = uvs.y0;
117+
vertexBufferObjectU32[vertexOffset++] = tintTL;
118+
vertexBufferObjectF32[vertexOffset++] = alphaTL;
119+
120+
// Bottom Left
121+
vertexBufferObjectF32[vertexOffset++] = tx1;
122+
vertexBufferObjectF32[vertexOffset++] = ty1;
123+
vertexBufferObjectF32[vertexOffset++] = uvs.x1;
124+
vertexBufferObjectF32[vertexOffset++] = uvs.y1;
125+
vertexBufferObjectU32[vertexOffset++] = tintBL;
126+
vertexBufferObjectF32[vertexOffset++] = alphaBL;
127+
128+
// Bottom Right
129+
vertexBufferObjectF32[vertexOffset++] = tx2;
130+
vertexBufferObjectF32[vertexOffset++] = ty2;
131+
vertexBufferObjectF32[vertexOffset++] = uvs.x2;
132+
vertexBufferObjectF32[vertexOffset++] = uvs.y2;
133+
vertexBufferObjectU32[vertexOffset++] = tintBR;
134+
vertexBufferObjectF32[vertexOffset++] = alphaBR;
135+
136+
// Top Right
137+
vertexBufferObjectF32[vertexOffset++] = tx3;
138+
vertexBufferObjectF32[vertexOffset++] = ty3;
139+
vertexBufferObjectF32[vertexOffset++] = uvs.x3;
140+
vertexBufferObjectF32[vertexOffset++] = uvs.y3;
141+
vertexBufferObjectU32[vertexOffset++] = tintTR;
142+
vertexBufferObjectF32[vertexOffset++] = alphaTR;
143+
}
144+
}
145+
146+
batch.flush(lightLayer.gBufferShaderPass, lightLayer.renderTarget);
147+
renderer.setTexture({texture: lightLayer.gBufferColorTex}, 0);
148+
renderer.setTexture({texture: lightLayer.gBufferNormalTex}, 1);
149+
150+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
151+
gl.useProgram(lightLayer.lightPassShader.program);
152+
gl.bindBuffer(gl.ARRAY_BUFFER, lightLayer.lightPassVBO);
153+
gl.enableVertexAttribArray(0);
154+
gl.vertexAttribPointer(0, 2, gl.FLOAT, false, Float32Array.BYTES_PER_ELEMENT, 0);
155+
gl.drawArrays(gl.TRIANGLES, 0, 3);
156+
157+
batch.bind();
7158
};
8159

9160
module.exports = DeferredRenderer;

v3/src/gameobjects/lightlayer/ForwardRenderer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var ForwardRenderer = function (renderer, lightLayer, interpolationPercentage, c
1616

1717
batch.bind(lightLayer.passShader);
1818
batch.indexBufferObject.bind();
19-
lightLayer.updateLights(renderer, camera);
19+
lightLayer.updateLights(renderer, camera, this.passShader);
2020

2121
for (var index = 0; index < length; ++index)
2222
{

0 commit comments

Comments
 (0)