Skip to content

Commit 00c6c4a

Browse files
committed
Light2D Pipeline
1 parent 4a63326 commit 00c6c4a

4 files changed

Lines changed: 83 additions & 2 deletions

File tree

src/renderer/webgl/WebGLPipeline.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,18 @@ var WebGLPipeline = new Class({
8080
return this;
8181
},
8282

83+
onPreRender: function ()
84+
{
85+
// called once every frame
86+
return this;
87+
},
88+
89+
onPostRender: function ()
90+
{
91+
// called once every frame
92+
return this;
93+
},
94+
8395
flush: function ()
8496
{
8597
var gl = this.gl;

src/renderer/webgl/WebGLRenderer.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,10 +672,16 @@ var WebGLRenderer = new Class({
672672

673673
var gl = this.gl;
674674
var color = this.game.config.backgroundColor;
675+
var pipelines = this.pipelines;
675676

676677
// Bind custom framebuffer here
677678
gl.clearColor(color.redGL, color.greenGL, color.blueGL, color.alphaGL);
678679
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
680+
681+
for (var key in pipelines)
682+
{
683+
pipelines[key].onPreRender();
684+
}
679685
},
680686

681687
render: function (scene, children, interpolationPercentage, camera)
@@ -731,6 +737,13 @@ var WebGLRenderer = new Class({
731737
this.snapshotState.callback(WebGLSnapshot(this.canvas, this.snapshotState.type, this.snapshotState.encoder));
732738
this.snapshotState.callback = null;
733739
}
740+
741+
var pipelines = this.pipelines;
742+
743+
for (var key in pipelines)
744+
{
745+
pipelines[key].onPostRender();
746+
}
734747
},
735748

736749
snapshot: function (callback, type, encoderOptions)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
var Class = require('../../../utils/Class');
2+
var WebGLPipeline = require('../WebGLPipeline');
3+
var Utils = require('../Utils');
4+
var TextureTintPipeline = require('./TextureTintPipeline');
5+
var ShaderSourceFS = require('../shaders/ForwardDiffuse.frag');
6+
7+
var ForwardDiffuseLightPipeline = new Class({
8+
9+
Extends: TextureTintPipeline,
10+
11+
initialize:
12+
13+
function ForwardDiffuseLightPipeline(game, gl, renderer)
14+
{
15+
TextureTintPipeline.call(game, gl, ShaderSourceFS);
16+
},
17+
18+
onBind: function ()
19+
{
20+
TextureTintPipeline.prototype.onBind.call(this);
21+
22+
var renderer = this.renderer;
23+
var program = this.currentProgram;
24+
25+
this.mvpUpdate();
26+
27+
renderer.setInt1(program, 'uNormSampler', 1);
28+
renderer.setFloat2(program, 'uResolution', this.width, this.height);
29+
30+
return this;
31+
},
32+
33+
updateLightShaderData: function (scene)
34+
{
35+
var program = this.currentProgram;
36+
var lights = lightLayer.lights;
37+
38+
renderer.setFloat4(program, 'uCamera', camera.x, camera.y, camera.rotation, camera.zoom);
39+
renderer.setFloat4(program, 'uAmbientLightColor', lightLayer.ambientLightColorR, lightLayer.ambientLightColorG, lightLayer.ambientLightColorB);
40+
41+
for (var index = 0; index < lights.length; ++index)
42+
{
43+
var light = lights[index];
44+
var lightName = 'uLights[' + index + '].';
45+
renderer.setFloat3(program, lightName + 'position', light.x, light.y, light.z);
46+
renderer.setFloat3(program, lightName + 'color', light.r, light.g, light.b);
47+
renderer.setFloat1(program, lightName + 'attenuation', light.attenuation);
48+
renderer.setFloat1(program, lightName + 'radius', light.radius);
49+
}
50+
51+
return this;
52+
}
53+
54+
});
55+
56+
module.exports = ForwardDiffuseLightPipeline;

src/renderer/webgl/pipelines/TextureTintPipeline.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ var TextureTintPipeline = new Class({
1515

1616
initialize:
1717

18-
function TextureTintPipeline(game, gl, renderer)
18+
function TextureTintPipeline(game, gl, renderer, overrideFragmentShader)
1919
{
2020
WebGLPipeline.call(this, {
2121
name: 'TextureTintPipeline',
@@ -24,7 +24,7 @@ var TextureTintPipeline = new Class({
2424
renderer: renderer,
2525
topology: gl.TRIANGLES,
2626
vertShader: ShaderSourceVS,
27-
fragShader: ShaderSourceFS,
27+
fragShader: (overrideFragmentShader ? overrideFragmentShader : ShaderSourceFS),
2828
vertexCapacity: 6 * 2000,
2929

3030
vertexSize:

0 commit comments

Comments
 (0)