Skip to content

Commit 2a3f966

Browse files
committed
Light Layer update work in progress
1 parent b0c5784 commit 2a3f966

7 files changed

Lines changed: 63 additions & 42 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: '83ce9c80-77f8-11e7-8ef9-b95451dc5563'
2+
build: '02d42da0-7886-11e7-9365-efeeaffc968c'
33
};
44
module.exports = CHECKSUM;

v3/src/gameobjects/effectlayer/EffectLayer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ var EffectLayer = new Class({
6161
);
6262

6363
this.dstRenderTarget = resourceManager.createRenderTarget(width, height, this.renderTexture, null);
64-
scene.game.renderer.currentTexture = null; // force rebinding of prev texture
64+
scene.game.renderer.currentTexture[0] = null; // force rebinding of prev texture
6565
}
6666

6767
this.flipY = true;
Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,33 @@
1-
var ForwardRenderer = function (renderer, src, interpolationPercentage, camera)
1+
var ForwardRenderer = function (renderer, lightLayer, interpolationPercentage, camera)
22
{
33
if (this.renderMask !== this.renderFlags)
44
{
55
return;
66
}
7+
8+
var spriteList = lightLayer.sprites;
9+
var length = spriteList.length;
10+
var batch = renderer.spriteBatch;
11+
12+
batch.bind(lightLayer.passShader);
13+
batch.indexBufferObject.bind();
14+
lightLayer.updateLights();
15+
16+
for (var index = 0; index < length; ++index)
17+
{
18+
var spriteNormalPair = spriteList[index];
19+
renderer.setTexture(
20+
spriteNormalPair.
21+
normalTextureRef.
22+
source[spriteNormalPair.spriteRef.frame.sourceIndex].
23+
glTexture,
24+
1
25+
);
26+
batch.addSprite(spriteNormalPair.spriteRef, camera);
27+
}
28+
29+
batch.flush(lightLayer.passShader, lightLayer.renderTarget);
30+
731
};
832

933
module.exports = ForwardRenderer;

v3/src/gameobjects/lightlayer/LightLayer.js

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var Render = require('./LightLayerRender');
66
var Light = require('./Light');
77
var SpriteNormalPair = require('./SpriteNormalPair');
88
var WebGLSupportedExtensions = require('../../renderer/webgl/WebGLSupportedExtensions');
9+
var TexturedAndNormalizedTintedShader = require('../../renderer/webgl/shaders/TexturedAndNormalizedTintedShader');
910
var Const = require('./Const');
1011

1112
var LightLayer = new Class({
@@ -51,29 +52,7 @@ var LightLayer = new Class({
5152
if (resourceManager !== undefined && !this.deferred)
5253
{
5354
this.gl = scene.game.renderer.gl;
54-
this.passShader = resourceManager.createShader('Phong2DShaderForward', {vert: `
55-
precision mediump float;
56-
57-
uniform mat4 uProjection;
58-
59-
attribute vec2 vertPosition;
60-
attribute vec2 vertTexCoord;
61-
attribute vec3 vertColor;
62-
attribute float vertAlpha;
63-
64-
varying vec2 fragTexCoord;
65-
varying vec3 fragColor;
66-
varying float fragAlpha;
67-
68-
void main()
69-
{
70-
fragTexCoord = vertTexCoord;
71-
fragColor = vertColor;
72-
fragAlpha = vertAlpha;
73-
74-
gl_Position = uProjection * vec4(vertPosition, 0.0, 1.0);
75-
}
76-
`, frag: `
55+
this.passShader = resourceManager.createShader('Phong2DShaderForward', {vert: TexturedAndNormalizedTintedShader.vert, frag: `
7756
precision mediump float;
7857
7958
struct Light
@@ -88,17 +67,29 @@ var LightLayer = new Class({
8867
uniform vec3 uAmbientLightColor;
8968
uniform Light uLights[` + Const.MAX_LIGHTS + `];
9069
91-
varying vec2 fragTexCoord;
92-
varying vec3 fragColor;
93-
varying float fragAlpha;
70+
varying vec2 v_tex_coord;
71+
varying vec3 v_color;
72+
varying float v_alpha;
9473
9574
void main()
9675
{
9776
/* Just Pass through for now */
98-
gl_FragColor = texture2D(uMainTexture, fragTexCoord) * vec4(fragColor, fragAlpha);
77+
vec4 finalColor = vec4(1.0, 0.0, 1.0, 1.0);
78+
vec4 normal = texture2D(uNormTexture, v_tex_coord);
79+
vec4 color = texture2D(uMainTexture, v_tex_coord);
80+
81+
finalColor = color * normal;
82+
83+
gl_FragColor = finalColor * vec4(v_color, v_alpha);
9984
}
10085
`});
10186
this.ambientLightColorLoc = this.passShader.getUniformLocation('uAmbientLightColor');
87+
this.uMainTextureLoc = this.passShader.getUniformLocation('uMainTexture');
88+
this.uNormTextureLoc = this.passShader.getUniformLocation('uNormTexture');
89+
90+
this.passShader.setConstantInt1(this.uMainTextureLoc, 0);
91+
this.passShader.setConstantInt1(this.uNormTextureLoc, 1);
92+
10293
for (var index = 0; index < Const.MAX_LIGHTS; ++index)
10394
{
10495
this.lightsLocations[index] = {
@@ -135,6 +126,7 @@ var LightLayer = new Class({
135126
{
136127
spriteNormalPair = new SpriteNormalPair(sprite, normalTexture);
137128
}
129+
this.scene.sys.displayList.remove(sprite);
138130
this.sprites.push(spriteNormalPair);
139131
},
140132

v3/src/gameobjects/lightlayer/SpriteNormalPair.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ var SpriteNormalPair = new Class({
1717
}
1818

1919
});
20+
21+
module.exports = SpriteNormalPair;

v3/src/gameobjects/renderpass/RenderPass.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ var RenderPass = new Class({
5656
this.passShader = resourceManager.createShader(shaderName, {vert: TexturedAndNormalizedTintedShader.vert, frag: fragmentShader});
5757
this.renderTexture = resourceManager.createTexture(0, gl.LINEAR, gl.LINEAR, wrap, wrap, gl.RGBA, null, width, height);
5858
this.passRenderTarget = resourceManager.createRenderTarget(width, height, this.renderTexture, null);
59-
scene.game.renderer.currentTexture = null; // force rebinding of prev texture
59+
scene.game.renderer.currentTexture[0] = null; // force rebinding of prev texture
6060
}
6161

6262
this.flipY = true;

v3/src/renderer/webgl/WebGLRenderer.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ var WebGLRenderer = new Class({
6363
this.shapeBatch = null;
6464
this.effectRenderer = null;
6565
this.currentRenderer = null;
66-
this.currentTexture = null;
66+
this.currentTexture = [];
6767
this.shaderCache = {};
6868
this.currentShader = null;
6969
this.resourceManager = null;
@@ -217,18 +217,19 @@ var WebGLRenderer = new Class({
217217
}
218218
}
219219

220-
this.currentTexture = null;
220+
this.currentTexture[0] = null;
221221
},
222222

223-
setTexture: function (texture)
223+
setTexture: function (texture, unit)
224224
{
225-
if (this.currentTexture !== texture)
225+
unit = unit || 0;
226+
if (this.currentTexture[unit] !== texture)
226227
{
227228
var gl = this.gl;
228229

229230
this.currentRenderer.flush();
230231

231-
gl.activeTexture(gl.TEXTURE0);
232+
gl.activeTexture(gl.TEXTURE0 + unit);
232233

233234
if (texture !== null)
234235
{
@@ -239,7 +240,7 @@ var WebGLRenderer = new Class({
239240
gl.bindTexture(gl.TEXTURE_2D, null);
240241
}
241242

242-
this.currentTexture = texture;
243+
this.currentTexture[unit] = texture;
243244
}
244245
},
245246

@@ -539,9 +540,9 @@ var WebGLRenderer = new Class({
539540
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, glFilter);
540541
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, glFilter);
541542

542-
if (this.currentTexture !== null)
543+
if (this.currentTexture[0] !== null)
543544
{
544-
gl.bindTexture(gl.TEXTURE_2D, this.currentTexture.texture);
545+
gl.bindTexture(gl.TEXTURE_2D, this.currentTexture[0].texture);
545546
}
546547
else
547548
{
@@ -563,11 +564,13 @@ var WebGLRenderer = new Class({
563564
dstTexture.texture = gl.createTexture();
564565
}
565566

566-
if (dstTexture != this.currentTexture)
567+
if (dstTexture != this.currentTexture[0])
567568
{
568569
this.currentRenderer.flush();
569570
}
570571

572+
gl.activeTexture(gl.TEXTURE0);
573+
571574
if (!shouldReallocate)
572575
{
573576
// Update resource
@@ -588,9 +591,9 @@ var WebGLRenderer = new Class({
588591
}
589592

590593
// We must rebind old texture
591-
if (dstTexture != this.currentTexture && this.currentTexture !== null)
594+
if (dstTexture != this.currentTexture[0] && this.currentTexture[0] !== null)
592595
{
593-
gl.bindTexture(gl.TEXTURE_2D, this.currentTexture.texture);
596+
gl.bindTexture(gl.TEXTURE_2D, this.currentTexture[0].texture);
594597
}
595598

596599
return dstTexture;

0 commit comments

Comments
 (0)