RenderTarget added to renderable game objects

This commit is contained in:
Felipe Alfonso 2017-04-11 10:15:38 -03:00
parent 5cdf2f0e96
commit 581fdb50ee
11 changed files with 242 additions and 1 deletions

View file

@ -12,6 +12,7 @@ var DynamicBitmapText = new Class({
Components.Alpha,
Components.BlendMode,
Components.Origin,
Components.RenderTarget,
Components.Size,
Components.Texture,
Components.Transform,

View file

@ -12,6 +12,7 @@ var BitmapText = new Class({
Components.Alpha,
Components.BlendMode,
Components.Origin,
Components.RenderTarget,
Components.Size,
Components.Texture,
Components.Transform,

View file

@ -30,6 +30,7 @@ var Blitter = new Class({
Mixins: [
Components.Alpha,
Components.BlendMode,
Components.RenderTarget,
Components.ScaleMode,
Components.Size,
Components.Texture,

View file

@ -14,6 +14,7 @@ var Graphics = new Class({
Components.Alpha,
Components.BlendMode,
Components.Transform,
Components.RenderTarget,
Components.Visible,
Render
],

View file

@ -0,0 +1,196 @@
var Class = require('../../utils/Class');
var GameObject = require('../GameObject');
var Components = require('../../components');
var Render = require('./RenderPassRender');
var RenderPass = new Class({
Extends: GameObject,
Mixins: [
Components.Alpha,
Components.BlendMode,
Components.Flip,
Components.GetBounds,
Components.Origin,
Components.RenderTarget,
Components.ScaleMode,
Components.Size,
Components.Transform,
Components.Visible,
Render
],
initialize:
function RenderPass(state, x, y, width, height, shaderName, fragmentShader)
{
GameObject.call(this, state);
var resourceManager = state.game.renderer.resourceManager;
var gl;
this.dstRenderTarget = null
this.dstRenderTexture = null;
this.dstShader = null;
this.uniforms = {};
if (resourceManager !== undefined)
{
/*gl = state.game.renderer.gl;
this.dstShader = resourceManager.createShader(shaderName, {
vert: TexturedAndNormalizedTintedShader.vert,
frag: fragmentShader
});
this.dstRenderTexture = resourceManager.createTexture(
0,
gl.LINEAR, gl.LINEAR,
gl.CLAMP_TO_EDGE, gl.CLAMP_TO_EDGE,
gl.RGBA,
null, width, height
);
this.dstRenderTarget = resourceManager.createRenderTarget(width, height, this.dstRenderTexture, null); */
state.game.renderer.currentTexture = null; // force rebinding of prev texture
}
this.flipY = true;
this.setPosition(x, y);
this.setSize(width, height);
this.setOrigin(0, 0);
},
render: function (gameObject)
{
},
getUniformLocation: function (uniformName)
{
var dstShader = this.dstShader;
var uniforms = this.uniforms;
var location;
if (uniformName in uniforms)
{
location = uniforms[uniformName];
}
else
{
location = dstShader.getUniformLocation(uniformName);
uniforms[uniformName] = location;
}
return location;
},
setFloat: function (uniformName, x)
{
var dstShader = this.dstShader;
if (dstShader === null)
return;
dstShader.setConstantFloat1(this.getUniformLocation(uniformName), x);
},
setFloat2: function (uniformName, x, y)
{
var dstShader = this.dstShader;
if (dstShader === null)
return;
dstShader.setConstantFloat2(this.getUniformLocation(uniformName), x, y);
},
setFloat3: function (uniformName, x, y, z)
{
var dstShader = this.dstShader;
if (dstShader === null)
return;
dstShader.setConstantFloat3(this.getUniformLocation(uniformName), x, y, z);
},
setFloat4: function (uniformName, x, y, z, w)
{
var dstShader = this.dstShader;
if (dstShader === null)
return;
dstShader.setConstantFloat4(this.getUniformLocation(uniformName), x, y, z, w);
},
setInt: function (uniformName, x)
{
var dstShader = this.dstShader;
if (dstShader === null)
return;
dstShader.setConstantInt1(this.getUniformLocation(uniformName), x);
},
setInt2: function (uniformName, x, y)
{
var dstShader = this.dstShader;
if (dstShader === null)
return;
dstShader.setConstantInt2(this.getUniformLocation(uniformName), x, y);
},
setInt3: function (uniformName, x, y, z)
{
var dstShader = this.dstShader;
if (dstShader === null)
return;
dstShader.setConstantInt3(this.getUniformLocation(uniformName), x, y, z);
},
setInt4: function (uniformName, x, y, z, w)
{
var dstShader = this.dstShader;
if (dstShader === null)
return;
dstShader.setConstantInt4(this.getUniformLocation(uniformName), x, y, z, w);
},
setMatrix2x2: function (uniformName, matrix)
{
var dstShader = this.dstShader;
if (dstShader === null)
return;
dstShader.setConstantMatrix2x2(this.getUniformLocation(uniformName), matrix);
},
setMatrix3x3: function (uniformName, matrix)
{
var dstShader = this.dstShader;
if (dstShader === null)
return;
dstShader.setConstantMatrix3x3(this.getUniformLocation(uniformName), matrix);
},
setMatrix4x4: function (uniformName, matrix)
{
var dstShader = this.dstShader;
if (dstShader === null)
return;
dstShader.setConstantMatrix4x4(this.getUniformLocation(uniformName), matrix);
}
});
module.exports = RenderPass;

View file

@ -0,0 +1,7 @@
var RenderPassCanvasRenderer = function (renderer, src, interpolationPercentage, camera)
{
};
module.exports = RenderPassCanvasRenderer;

View file

@ -0,0 +1,20 @@
var RenderPass = require('./RenderPass');
var FactoryContainer = require('../../gameobjects/FactoryContainer');
var RenderPassFactory = {
KEY: 'renderPass',
add: function (x, y, width, height, shaderName, fragmentShader)
{
return this.children.add(new RenderPass(this.state, x, y, width, height, shaderName, fragmentShader));
},
make: function (x, y, width, height, shaderName, fragmentShader)
{
return new RenderPass(this.state, x, y, width, height, shaderName, fragmentShader);
}
};
module.exports = FactoryContainer.register(RenderPassFactory);

View file

@ -0,0 +1,6 @@
module.exports = {
renderCanvas: require('./RenderPassCanvasRenderer'),
renderWebGL: require('./RenderPassWebGLRenderer')
};

View file

@ -0,0 +1,7 @@
var RenderPassWebGLRenderer = function (renderer, src, interpolationPercentage, camera)
{
};
module.exports = RenderPassWebGLRenderer;

View file

@ -16,6 +16,7 @@ var Text = new Class({
Components.BlendMode,
Components.GetBounds,
Components.Origin,
Components.RenderTarget,
Components.ScaleMode,
Components.Transform,
Components.Visible,

View file

@ -446,7 +446,7 @@ WebGLRenderer.prototype = {
dstTexture.height = srcCanvas.height;
/* we must rebind old texture */
gl.bindTexture(gl.TEXTURE_2D, this.currentTexture.texture);
this.currentTexture = null;
return dstTexture;
}