Skip to content

Commit 8c479a5

Browse files
committed
Effect Layer
1 parent 6fe063b commit 8c479a5

26 files changed

Lines changed: 536 additions & 197 deletions

v3/src/components/RenderTarget.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var RenderTarget = {
2+
3+
renderTarget: null
4+
5+
};
6+
7+
module.exports = RenderTarget;

v3/src/components/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module.exports = {
99
Flip: require('./Flip'),
1010
GetBounds: require('./GetBounds'),
1111
Origin: require('./Origin'),
12+
RenderTarget: require('./RenderTarget'),
1213
ScaleMode: require('./ScaleMode'),
1314
Size: require('./Size'),
1415
Texture: require('./Texture'),

v3/src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextWebGLRenderer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ var DynamicBitmapTextWebGLRenderer = function (renderer, src, interpolationPerce
169169
blitterBatch.flush();
170170
}
171171

172-
renderer.setBatch(blitterBatch, texture);
172+
renderer.setRenderer(blitterBatch, texture);
173173
vertexOffset = vertexDataBuffer.allocate(20);
174174
blitterBatch.elementCount += 6;
175175

v3/src/gameobjects/bitmaptext/static/BitmapTextWebGLRenderer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ var BitmapTextWebGLRenderer = function (renderer, src, interpolationPercentage,
135135
blitterBatch.flush();
136136
}
137137

138-
renderer.setBatch(blitterBatch, texture);
138+
renderer.setRenderer(blitterBatch, texture);
139139
vertexOffset = vertexDataBuffer.allocate(20);
140140
blitterBatch.elementCount += 6;
141141

v3/src/gameobjects/blitter/BlitterWebGLRenderer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ var BlitterWebGLRenderer = function (renderer, src, interpolationPercentage, cam
4444
blitterBatch.flush();
4545
}
4646

47-
renderer.setBatch(blitterBatch, frame.texture.source[frame.sourceIndex].glTexture);
47+
renderer.setRenderer(blitterBatch, frame.texture.source[frame.sourceIndex].glTexture);
4848
vertexOffset = vertexDataBuffer.allocate(20);
4949
blitterBatch.elementCount += 6;
5050
x += frame.x;
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
var Class = require('../../utils/Class');
2+
var GameObject = require('../GameObject');
3+
var Components = require('../../components');
4+
var Render = require('./EffectLayerRender');
5+
var TexturedAndNormalizedTintedShader = require('../../renderer/webgl/shaders/TexturedAndNormalizedTintedShader');
6+
7+
var EffectLayer = new Class({
8+
9+
Extends: GameObject,
10+
11+
Mixins: [
12+
Components.Flip,
13+
Components.Alpha,
14+
Components.Transform,
15+
Components.Visible,
16+
Components.Size,
17+
Components.Origin,
18+
Components.RenderTarget,
19+
Components.BlendMode,
20+
Render
21+
],
22+
23+
initialize:
24+
25+
function EffectLayer(state, x, y, width, height, effectName, fragmentShader)
26+
{
27+
var resourceManager = state.game.renderer.resourceManager;
28+
var gl;
29+
30+
this.dstRenderTarget = null
31+
this.dstRenderTexture = null;
32+
this.dstShader = null;
33+
34+
if (resourceManager !== undefined)
35+
{
36+
gl = state.game.renderer.gl;
37+
this.dstShader = resourceManager.createShader(effectName, {
38+
vert: TexturedAndNormalizedTintedShader.vert,
39+
frag: fragmentShader
40+
});
41+
this.dstRenderTexture = resourceManager.createTexture(
42+
0,
43+
gl.LINEAR, gl.LINEAR,
44+
gl.CLAMP_TO_EDGE, gl.CLAMP_TO_EDGE,
45+
gl.RGBA,
46+
null, width, height
47+
);
48+
this.dstRenderTarget = resourceManager.createRenderTarget(width, height, this.dstRenderTexture, null);
49+
//state.game.renderer.currentTexture = null; // force rebinding of prev texture
50+
}
51+
this.flipY = true;
52+
this.setPosition(x, y);
53+
this.setSize(width, height);
54+
this.setOrigin(0, 0);
55+
},
56+
57+
add: function (gameObject)
58+
{
59+
if (gameObject.renderTarget !== undefined)
60+
{
61+
gameObject.renderTarget = this.dstRenderTarget;
62+
}
63+
},
64+
65+
remove: function (gameObject)
66+
{
67+
if (gameObject.renderTarget !== undefined)
68+
{
69+
gameObject.renderTarget = null;
70+
}
71+
}
72+
73+
});
74+
75+
module.exports = EffectLayer;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var EffectLayerCanvasRenderer = function (renderer, src, interpolationPercentage, camera)
2+
{
3+
4+
};
5+
6+
module.exports = EffectLayerCanvasRenderer;
7+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var EffectLayer = require('./EffectLayer');
2+
var FactoryContainer = require('../../gameobjects/FactoryContainer');
3+
4+
var EffectLayerFactory = {
5+
6+
KEY: 'effectLayer',
7+
8+
add: function (x, y, width, height, effectName, fragmentShader)
9+
{
10+
return this.children.add(new EffectLayer(this.state, x, y, width, height, effectName, fragmentShader));
11+
},
12+
13+
make: function (x, y, width, height, effectName, fragmentShader)
14+
{
15+
return new EffectLayer(this.state, x, y, width, height, effectName, fragmentShader);
16+
}
17+
18+
};
19+
20+
module.exports = FactoryContainer.register(EffectLayerFactory);
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
module.exports = {
2+
3+
renderCanvas: require('./EffectLayerCanvasRenderer'),
4+
renderWebGL: require('./EffectLayerWebGLRenderer')
5+
6+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
var EffectLayerWebGLRenderer = function (renderer, src, interpolationPercentage, camera)
2+
{
3+
if (this.renderMask !== this.renderFlags)
4+
{
5+
return;
6+
}
7+
renderer.effectRenderer.renderEffect(src, camera, src.dstRenderTexture, src.width, src.height);
8+
};
9+
10+
module.exports = EffectLayerWebGLRenderer;
11+

0 commit comments

Comments
 (0)