Skip to content

Commit 7c96e93

Browse files
committed
Canvas RenderTexture rendering added
1 parent f621090 commit 7c96e93

4 files changed

Lines changed: 94 additions & 15 deletions

File tree

src/gameobjects/rendertexture/RenderTexture.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ var Class = require('../../utils/Class');
22
var Components = require('../components');
33
var GameObject = require('../GameObject');
44
var RenderTextureWebGL = require('./RenderTextureWebGL');
5+
var RenderTextureCanvas = require('./RenderTextureCanvas');
56
var Render = require('./RenderTextureRender');
7+
var CanvasPool = require('../../display/canvas/CanvasPool');
68

79
var RenderTexture = new Class({
810

@@ -48,11 +50,12 @@ var RenderTexture = new Class({
4850
}
4951
else
5052
{
51-
// For now we'll just add canvas stubs
52-
this.fill = function () {};
53-
this.clear = function () {};
54-
this.draw = function () {};
55-
this.drawFrame = function () {};
53+
this.fill = RenderTextureCanvas.fill;
54+
this.clear = RenderTextureCanvas.clear;
55+
this.draw = RenderTextureCanvas.draw;
56+
this.drawFrame = RenderTextureCanvas.drawFrame;
57+
this.canvas = CanvasPool.create2D(null, width, height);
58+
this.context = this.canvas.getContext('2d');
5659
}
5760

5861
this.setPosition(x, y);
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
var RenderTextureCanvas = {
2+
3+
fill: function (rgb)
4+
{
5+
var ur = ((rgb >> 16)|0) & 0xff;
6+
var ug = ((rgb >> 8)|0) & 0xff;
7+
var ub = (rgb|0) & 0xff;
8+
9+
this.context.fillStyle = 'rgb(' + ur + ',' + ug + ',' + ub + ')';
10+
this.context.fillRect(0, 0, this.canvas.width, this.canvas.height);
11+
return this;
12+
},
13+
14+
clear: function ()
15+
{
16+
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
17+
return this;
18+
},
19+
20+
draw: function (texture, frame, x, y)
21+
{
22+
var matrix = this.currentMatrix;
23+
this.context.setTransform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
24+
this.context.drawImage(texture.source[frame.sourceIndex].image, frame.x, frame.y, frame.width, frame.height, x, y, frame.width, frame.height);
25+
return this;
26+
}
27+
28+
};
29+
30+
module.exports = RenderTextureCanvas;

src/gameobjects/rendertexture/RenderTextureCanvasRenderer.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,59 @@ var RenderTextureCanvasRenderer = function (renderer, renderTexture, interpolati
77
return;
88
}
99

10+
var ctx = renderer.currentContext;
11+
12+
if (renderer.currentBlendMode !== renderTexture.blendMode)
13+
{
14+
renderer.currentBlendMode = renderTexture.blendMode;
15+
ctx.globalCompositeOperation = renderer.blendModes[renderTexture.blendMode];
16+
}
17+
18+
if (renderer.currentAlpha !== renderTexture.alpha)
19+
{
20+
renderer.currentAlpha = renderTexture.alpha;
21+
ctx.globalAlpha = renderTexture.alpha;
22+
}
23+
24+
if (renderer.currentScaleMode !== renderTexture.scaleMode)
25+
{
26+
renderer.currentScaleMode = renderTexture.scaleMode;
27+
}
28+
29+
var dx = 0;
30+
var dy = 0;
31+
32+
var fx = 1;
33+
var fy = 1;
34+
35+
if (renderTexture.flipX)
36+
{
37+
fx = -1;
38+
dx -= renderTexture.canvas.width - renderTexture.displayOriginX;
39+
}
40+
else
41+
{
42+
dx -= renderTexture.displayOriginX;
43+
}
44+
45+
if (renderTexture.flipY)
46+
{
47+
fy = -1;
48+
dy -= renderTexture.canvas.height - src.displayOriginY;
49+
}
50+
else
51+
{
52+
dy -= renderTexture.displayOriginY;
53+
}
54+
55+
ctx.save();
56+
ctx.translate(renderTexture.x - camera.scrollX * renderTexture.scrollFactorX, renderTexture.y - camera.scrollY * renderTexture.scrollFactorY);
57+
ctx.rotate(renderTexture.rotation);
58+
ctx.scale(renderTexture.scaleX, renderTexture.scaleY);
59+
ctx.scale(fx, fy);
60+
ctx.drawImage(renderTexture.canvas, dx, dy);
61+
ctx.restore();
62+
1063
};
1164

1265
module.exports = RenderTextureCanvasRenderer;

src/gameobjects/rendertexture/RenderTextureWebGL.js

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,11 @@ var RenderTextureWebGL = {
2424
return this;
2525
},
2626

27-
draw: function (texture, x, y)
27+
draw: function (texture, frame, x, y)
2828
{
29+
var glTexture = texture.source[frame.sourceIndex].glTexture;
2930
this.renderer.setFramebuffer(this.framebuffer);
30-
this.renderer.pipelines.TextureTintPipeline.drawTexture(texture, x, y, 0, 0, texture.width, texture.height, this.currentMatrix);
31-
this.renderer.setFramebuffer(null);
32-
return this;
33-
},
34-
35-
drawFrame: function (texture, x, y, frame)
36-
{
37-
this.renderer.setFramebuffer(this.framebuffer);
38-
this.renderer.pipelines.TextureTintPipeline.drawTexture(texture, frame.x, frame.y, frame.width, frame.height, texture.width, texture.height, this.currentMatrix);
31+
this.renderer.pipelines.TextureTintPipeline.drawTexture(glTexture, x, y, frame.x, frame.y, frame.width, frame.height, this.currentMatrix);
3932
this.renderer.setFramebuffer(null);
4033
return this;
4134
}

0 commit comments

Comments
 (0)