Skip to content

Commit 98893e1

Browse files
committed
Modified WebGLPipeline and it's child classes to make them easier to generate custom Pipelines. Added functions to WebGLPipeline to modify uniforms. Exposed Renderer namespace for usage outside the engine
1 parent 865f0a6 commit 98893e1

9 files changed

Lines changed: 166 additions & 47 deletions

File tree

src/phaser.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ var Phaser = {
3333
Loader: require('./loader'),
3434
Math: require('./math'),
3535
Physics: require('./physics'),
36+
Renderer: require('./renderer'),
3637
Scene: require('./scene/Scene'),
3738
Scenes: require('./scene'),
3839
Sound: require('./sound'),

src/renderer/webgl/WebGLPipeline.js

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,19 @@ var WebGLPipeline = new Class({
198198
this.flushLocked = false;
199199
},
200200

201+
addAttribute: function (name, size, type, normalized, offset)
202+
{
203+
this.attributes.push({
204+
name: name,
205+
size: size,
206+
type: this.renderer.glFormats[type],
207+
normalized: normalized,
208+
offset: offset
209+
});
210+
211+
return this;
212+
},
213+
201214
/**
202215
* [description]
203216
*
@@ -381,6 +394,75 @@ var WebGLPipeline = new Class({
381394
delete this.vertexBuffer;
382395
delete this.gl;
383396

397+
return this;
398+
},
399+
400+
setFloat1: function (name, x)
401+
{
402+
this.renderer.setFloat1(this.program, name, x);
403+
return this;
404+
},
405+
406+
setFloat2: function (name, x, y)
407+
{
408+
409+
this.renderer.setFloat2(this.program, name, x, y);
410+
return this;
411+
},
412+
413+
setFloat3: function (name, x, y, z)
414+
{
415+
416+
this.renderer.setFloat3(this.program, name, x, y, z);
417+
return this;
418+
},
419+
420+
setFloat4: function (name, x, y, z, w)
421+
{
422+
423+
this.renderer.setFloat4(this.program, name, x, y, z, w);
424+
return this;
425+
},
426+
427+
setInt1: function (name, x)
428+
{
429+
this.renderer.setInt1(this.program, name, x);
430+
return this;
431+
},
432+
433+
setInt2: function (name, x, y)
434+
{
435+
this.renderer.setInt2(this.program, name, x, y);
436+
return this;
437+
},
438+
439+
setInt3: function (name, x, y, z)
440+
{
441+
this.renderer.setInt3(this.program, name, x, y, z);
442+
return this;
443+
},
444+
445+
setInt4: function (name, x, y, z, w)
446+
{
447+
this.renderer.setInt4(this.program, name, x, y, z, w);
448+
return this;
449+
},
450+
451+
setMatrix2: function (name, transpose, matrix)
452+
{
453+
this.renderer.setMatrix2(this.program, name, transpose, matrix);
454+
return this;
455+
},
456+
457+
setMatrix3: function (name, transpose, matrix)
458+
{
459+
this.renderer.setMatrix3(this.program, name, transpose, matrix);
460+
return this;
461+
},
462+
463+
setMatrix4: function (name, transpose, matrix)
464+
{
465+
this.renderer.setMatrix4(this.program, name, transpose, matrix);
384466
return this;
385467
}
386468

src/renderer/webgl/WebGLRenderer.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,8 @@ var WebGLRenderer = new Class({
354354
*/
355355
this.extensions = {};
356356

357+
this.glFormats = [];
358+
357359
this.init(this.config);
358360
},
359361

@@ -390,6 +392,12 @@ var WebGLRenderer = new Class({
390392
this.blendModes[2].func = [ gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA ];
391393
this.blendModes[3].func = [ gl.ONE, gl.ONE_MINUS_SRC_COLOR ];
392394

395+
this.glFormats[0] = gl.BYTE;
396+
this.glFormats[1] = gl.SHORT;
397+
this.glFormats[2] = gl.UNSIGNED_BYTE;
398+
this.glFormats[3] = gl.UNSIGNED_SHORT;
399+
this.glFormats[4] = gl.FLOAT;
400+
393401
// Load supported extensions
394402
this.supportedExtensions = gl.getSupportedExtensions();
395403

@@ -409,10 +417,10 @@ var WebGLRenderer = new Class({
409417
// Clear previous pipelines and reload default ones
410418
this.pipelines = {};
411419

412-
this.addPipeline('TextureTintPipeline', new TextureTintPipeline(this.game, gl, this));
413-
this.addPipeline('FlatTintPipeline', new FlatTintPipeline(this.game, gl, this));
414-
this.addPipeline('BitmapMaskPipeline', new BitmapMaskPipeline(this.game, gl, this));
415-
this.addPipeline('Light2D', new ForwardDiffuseLightPipeline(this.game, gl, this));
420+
this.addPipeline('TextureTintPipeline', new TextureTintPipeline({ game: this.game, renderer: this }));
421+
this.addPipeline('FlatTintPipeline', new FlatTintPipeline({ game: this.game, renderer: this }));
422+
this.addPipeline('BitmapMaskPipeline', new BitmapMaskPipeline({ game: this.game, renderer: this }));
423+
this.addPipeline('Light2D', new ForwardDiffuseLightPipeline({ game: this.game, renderer: this }));
416424

417425
this.setBlendMode(CONST.BlendModes.NORMAL);
418426
this.resize(this.width, this.height);
@@ -602,7 +610,7 @@ var WebGLRenderer = new Class({
602610
* @param {string} pipelineName - [description]
603611
* @param {Phaser.Renderer.WebGL.WebGLPipeline} pipelineInstance - [description]
604612
*
605-
* @return {Phaser.Renderer.WebGL.WebGLRenderer} [description]
613+
* @return {Phaser.Renderer.WebGL.WebGLPipeline} [description]
606614
*/
607615
addPipeline: function (pipelineName, pipelineInstance)
608616
{
@@ -612,7 +620,7 @@ var WebGLRenderer = new Class({
612620
pipelineInstance.name = pipelineName;
613621
this.pipelines[pipelineName].resize(this.width, this.height, this.config.resolution);
614622

615-
return this;
623+
return pipelineInstance;
616624
},
617625

618626
/**

src/renderer/webgl/index.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ module.exports = {
1212

1313
Utils: require('./Utils'),
1414
WebGLPipeline: require('./WebGLPipeline'),
15-
WebGLRenderer: require('./WebGLRenderer')
15+
WebGLRenderer: require('./WebGLRenderer'),
16+
Pipelines: require('./pipelines'),
17+
18+
// Constants
19+
BYTE: 0,
20+
SHORT: 1,
21+
UNSIGNED_BYTE: 2,
22+
UNSIGNED_SHORT: 3,
23+
FLOAT: 4
1624

1725
};

src/renderer/webgl/pipelines/BitmapMaskPipeline.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,19 @@ var BitmapMaskPipeline = new Class({
2929

3030
initialize:
3131

32-
function BitmapMaskPipeline (game, gl, renderer)
32+
function BitmapMaskPipeline (config)
3333
{
3434
WebGLPipeline.call(this, {
35-
game: game,
36-
gl: gl,
37-
renderer: renderer,
38-
topology: gl.TRIANGLES,
39-
vertShader: ShaderSourceVS,
40-
fragShader: ShaderSourceFS,
41-
vertexCapacity: 3,
35+
game: config.game,
36+
renderer: config.renderer,
37+
gl: config.renderer.gl,
38+
topology: (config.topology ? config.topology : config.renderer.gl.TRIANGLES),
39+
vertShader: (config.vertShader ? config.vertShader : ShaderSourceVS),
40+
fragShader: (config.fragShader ? config.fragShader : ShaderSourceFS),
41+
vertexCapacity: (config.vertexCapacity ? config.vertexCapacity : 3),
4242

43-
vertexSize:
44-
Float32Array.BYTES_PER_ELEMENT * 2,
43+
vertexSize: (config.vertexSize ? config.vertexSize :
44+
Float32Array.BYTES_PER_ELEMENT * 2),
4545

4646
vertices: new Float32Array([
4747
-1, +1, -1, -7, +7, +1
@@ -51,7 +51,7 @@ var BitmapMaskPipeline = new Class({
5151
{
5252
name: 'inPosition',
5353
size: 2,
54-
type: gl.FLOAT,
54+
type: config.renderer.gl.FLOAT,
5555
normalized: false,
5656
offset: 0
5757
}

src/renderer/webgl/pipelines/FlatTintPipeline.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,33 +58,33 @@ var FlatTintPipeline = new Class({
5858

5959
initialize:
6060

61-
function FlatTintPipeline (game, gl, renderer)
61+
function FlatTintPipeline (config)
6262
{
6363
WebGLPipeline.call(this, {
64-
game: game,
65-
gl: gl,
66-
renderer: renderer,
67-
topology: gl.TRIANGLES,
68-
vertShader: ShaderSourceVS,
69-
fragShader: ShaderSourceFS,
70-
vertexCapacity: 12000,
71-
72-
vertexSize:
64+
game: config.game,
65+
renderer: config.renderer,
66+
gl: config.renderer.gl,
67+
topology: (config.topology ? config.topology : config.renderer.gl.TRIANGLES),
68+
vertShader: (config.vertShader ? config.vertShader : ShaderSourceVS),
69+
fragShader: (config.fragShader ? config.fragShader : ShaderSourceFS),
70+
vertexCapacity: (config.vertexCapcity ? config.vertexCapacity : 12000),
71+
72+
vertexSize: (config.vertexSize ? config.vertexSize :
7373
Float32Array.BYTES_PER_ELEMENT * 2 +
74-
Uint8Array.BYTES_PER_ELEMENT * 4,
74+
Uint8Array.BYTES_PER_ELEMENT * 4),
7575

7676
attributes: [
7777
{
7878
name: 'inPosition',
7979
size: 2,
80-
type: gl.FLOAT,
80+
type: config.renderer.gl.FLOAT,
8181
normalized: false,
8282
offset: 0
8383
},
8484
{
8585
name: 'inTint',
8686
size: 4,
87-
type: gl.UNSIGNED_BYTE,
87+
type: config.renderer.gl.UNSIGNED_BYTE,
8888
normalized: true,
8989
offset: Float32Array.BYTES_PER_ELEMENT * 2
9090
}

src/renderer/webgl/pipelines/ForwardDiffuseLightPipeline.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ var ForwardDiffuseLightPipeline = new Class({
3030

3131
initialize:
3232

33-
function ForwardDiffuseLightPipeline (game, gl, renderer)
33+
function ForwardDiffuseLightPipeline (config)
3434
{
35-
TextureTintPipeline.call(this, game, gl, renderer, ShaderSourceFS.replace('%LIGHT_COUNT%', LIGHT_COUNT.toString()));
35+
config.fragShader = ShaderSourceFS.replace('%LIGHT_COUNT%', LIGHT_COUNT.toString());
36+
37+
TextureTintPipeline.call(this, config);
3638
},
3739

3840
/**

src/renderer/webgl/pipelines/TextureTintPipeline.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,41 +36,41 @@ var TextureTintPipeline = new Class({
3636

3737
initialize:
3838

39-
function TextureTintPipeline (game, gl, renderer, overrideFragmentShader)
39+
function TextureTintPipeline (config)
4040
{
4141
WebGLPipeline.call(this, {
42-
game: game,
43-
gl: gl,
44-
renderer: renderer,
45-
topology: gl.TRIANGLES,
46-
vertShader: ShaderSourceVS,
47-
fragShader: (overrideFragmentShader ? overrideFragmentShader : ShaderSourceFS),
48-
vertexCapacity: 6 * 2000,
49-
50-
vertexSize:
42+
game: config.game,
43+
renderer: config.renderer,
44+
gl: config.renderer.gl,
45+
topology: (config.topology ? config.topology : config.renderer.gl.TRIANGLES),
46+
vertShader: (config.vertShader ? config.vertShader : ShaderSourceVS),
47+
fragShader: (config.fragShader ? config.fragShader : ShaderSourceFS),
48+
vertexCapacity: (config.vertexCapacity ? config.vertexCapacity : 6 * 2000),
49+
50+
vertexSize: (config.vertexSize ? config.vertexSize :
5151
Float32Array.BYTES_PER_ELEMENT * 2 +
5252
Float32Array.BYTES_PER_ELEMENT * 2 +
53-
Uint8Array.BYTES_PER_ELEMENT * 4,
53+
Uint8Array.BYTES_PER_ELEMENT * 4),
5454

5555
attributes: [
5656
{
5757
name: 'inPosition',
5858
size: 2,
59-
type: gl.FLOAT,
59+
type: config.renderer.gl.FLOAT,
6060
normalized: false,
6161
offset: 0
6262
},
6363
{
6464
name: 'inTexCoord',
6565
size: 2,
66-
type: gl.FLOAT,
66+
type: config.renderer.gl.FLOAT,
6767
normalized: false,
6868
offset: Float32Array.BYTES_PER_ELEMENT * 2
6969
},
7070
{
7171
name: 'inTint',
7272
size: 4,
73-
type: gl.UNSIGNED_BYTE,
73+
type: config.renderer.gl.UNSIGNED_BYTE,
7474
normalized: true,
7575
offset: Float32Array.BYTES_PER_ELEMENT * 4
7676
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* @author Richard Davey <rich@photonstorm.com>
3+
* @copyright 2018 Photon Storm Ltd.
4+
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
5+
*/
6+
7+
/**
8+
* @namespace Phaser.Renderer.WebGL.Pipelines
9+
*/
10+
11+
module.exports = {
12+
13+
BitmapMaskPipeline: require('./BitmapMaskPipeline'),
14+
FlatTintPipeline: require('./FlatTintPipeline'),
15+
ForwardDiffuseLightPipeline: require('./ForwardDiffuseLightPipeline'),
16+
TextureTintPipeline: require('./TextureTintPipeline')
17+
18+
};

0 commit comments

Comments
 (0)