Skip to content

Commit fd4d25a

Browse files
committed
RenderPass update
1 parent 6aa2fb0 commit fd4d25a

3 files changed

Lines changed: 38 additions & 22 deletions

File tree

v3/src/gameobjects/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ require('./text/static/TextFactory');
1212
require('./layer/LayerFactory');
1313
require('./zone/ZoneFactory');
1414
require('./effectlayer/EffectLayerFactory');
15+
require('./renderpass/RenderPassFactory');
1516

1617
// Phaser.GameObjects
1718

@@ -26,6 +27,7 @@ module.exports = {
2627
Graphics: require('./graphics/Graphics.js'),
2728
Image: require('./image/Image'),
2829
Layer: require('./layer/Layer'),
30+
RenderPass: require('./renderpass/RenderPass.js'),
2931
Sprite: require('./sprite/Sprite'),
3032
Text: require('./text/static/Text'),
3133
Zone: require('./zone/Zone'),

v3/src/gameobjects/renderpass/RenderPass.js

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
// RenderPass Will only work with Sprite and Image GameObjects.
2+
13
var Class = require('../../utils/Class');
24
var GameObject = require('../GameObject');
35
var Components = require('../../components');
46
var Render = require('./RenderPassRender');
7+
var TexturedAndNormalizedTintedShader = require('../../renderer/webgl/shaders/TexturedAndNormalizedTintedShader');
58

69
var RenderPass = new Class({
710

@@ -30,36 +33,33 @@ var RenderPass = new Class({
3033
var resourceManager = state.game.renderer.resourceManager;
3134
var gl;
3235

33-
this.dstRenderTarget = null
34-
this.dstRenderTexture = null;
35-
this.dstShader = null;
36+
this.renderer = state.game.renderer;
37+
this.passRenderTarget = null
38+
this.passRenderTexture = null;
39+
this.passShader = null;
3640
this.uniforms = {};
3741

3842
if (resourceManager !== undefined)
3943
{
40-
/*gl = state.game.renderer.gl;
41-
this.dstShader = resourceManager.createShader(shaderName, {
42-
vert: TexturedAndNormalizedTintedShader.vert,
43-
frag: fragmentShader
44-
});
45-
this.dstRenderTexture = resourceManager.createTexture(
46-
0,
47-
gl.LINEAR, gl.LINEAR,
48-
gl.CLAMP_TO_EDGE, gl.CLAMP_TO_EDGE,
49-
gl.RGBA,
50-
null, width, height
51-
);
52-
this.dstRenderTarget = resourceManager.createRenderTarget(width, height, this.dstRenderTexture, null); */
44+
gl = state.game.renderer.gl;
45+
this.passShader = resourceManager.createShader(shaderName, {vert: TexturedAndNormalizedTintedShader.vert, frag: fragmentShader});
46+
this.passRenderTexture = resourceManager.createTexture(0, gl.LINEAR, gl.LINEAR, gl.CLAMP_TO_EDGE, gl.CLAMP_TO_EDGE, gl.RGBA, null, width, height);
47+
this.passRenderTarget = resourceManager.createRenderTarget(width, height, this.passRenderTexture, null);
5348
state.game.renderer.currentTexture = null; // force rebinding of prev texture
5449
}
55-
this.flipY = true;
50+
5651
this.setPosition(x, y);
5752
this.setSize(width, height);
5853
this.setOrigin(0, 0);
54+
5955
},
6056

61-
render: function (gameObject)
57+
render: function (gameObject, camera)
6258
{
59+
var gl = this.renderer.gl;
60+
this.renderer.spriteBatch.addSprite(gameObject, camera);
61+
this.renderer.spriteBatch.flush(this.passShader, this.passRenderTarget.framebufferObject);
62+
this.renderer.setRenderer(null, null, null);
6363
},
6464

6565
getUniformLocation: function (uniformName)

v3/src/renderer/webgl/renderers/spritebatch/SpriteBatch.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ SpriteBatch.prototype = {
111111
this.vertexBufferObject.bind();
112112
},
113113

114-
flush: function (shader)
114+
flush: function (shader, renderTarget)
115115
{
116116
var gl = this.glContext;
117117
var vertexDataBuffer = this.vertexDataBuffer;
@@ -121,23 +121,37 @@ SpriteBatch.prototype = {
121121
return;
122122
}
123123

124+
if (renderTarget)
125+
{
126+
gl.bindFramebuffer(gl.FRAMEBUFFER, renderTarget);
127+
}
128+
124129
this.bind(shader);
125130
this.vertexBufferObject.updateResource(vertexDataBuffer.getUsedBufferAsFloat(), 0);
126131
gl.drawElements(gl.TRIANGLES, this.elementCount, gl.UNSIGNED_SHORT, 0);
127132
vertexDataBuffer.clear();
128133
this.elementCount = 0;
134+
135+
if (renderTarget)
136+
{
137+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
138+
}
129139
},
130140

131141
resize: function (width, height, resolution, shader)
132142
{
133143
var gl = this.glContext;
134144
var activeShader = shader !== undefined ? shader : this.shader;
135-
145+
var location = activeShader == this.shader ? this.viewMatrixLocation : activeShader.getUniformLocation('u_view_matrix');
136146
this.width = width * resolution;
137147
this.height = height * resolution;
148+
this.setProjectionMatrix(activeShader, location);
149+
},
138150

139-
activeShader.setConstantMatrix4x4(
140-
this.viewMatrixLocation,
151+
setProjectionMatrix: function (shader, location)
152+
{
153+
shader.setConstantMatrix4x4(
154+
location,
141155
new Float32Array([
142156
2 / this.width, 0, 0, 0,
143157
0, -2 / this.height, 0, 0,

0 commit comments

Comments
 (0)