Skip to content

Commit 90ba260

Browse files
committed
Added in Camera alpha support to all canvas renderers
1 parent 6dff47b commit 90ba260

9 files changed

Lines changed: 125 additions & 56 deletions

File tree

src/gameobjects/bitmaptext/dynamic/DynamicBitmapTextCanvasRenderer.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,21 @@ var DynamicBitmapTextCanvasRenderer = function (renderer, src, interpolationPerc
6868
var rotation = 0;
6969
var scale = (src.fontSize / src.fontData.size);
7070

71+
// Alpha
72+
73+
var alpha = camera.alpha * src.alpha;
74+
75+
if (alpha === 0)
76+
{
77+
// Nothing to see, so abort early
78+
return;
79+
}
80+
else if (renderer.currentAlpha !== alpha)
81+
{
82+
renderer.currentAlpha = alpha;
83+
ctx.globalAlpha = alpha;
84+
}
85+
7186
// Blend Mode
7287
if (renderer.currentBlendMode !== src.blendMode)
7388
{

src/gameobjects/bitmaptext/static/BitmapTextCanvasRenderer.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,28 @@ var BitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage,
6363

6464
var scale = (src.fontSize / src.fontData.size);
6565

66+
// Alpha
67+
68+
var alpha = camera.alpha * src.alpha;
69+
70+
if (alpha === 0)
71+
{
72+
// Nothing to see, so abort early
73+
return;
74+
}
75+
else if (renderer.currentAlpha !== alpha)
76+
{
77+
renderer.currentAlpha = alpha;
78+
ctx.globalAlpha = alpha;
79+
}
80+
6681
// Blend Mode
6782
if (renderer.currentBlendMode !== src.blendMode)
6883
{
6984
renderer.currentBlendMode = src.blendMode;
7085
ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];
7186
}
7287

73-
// Alpha
74-
if (renderer.currentAlpha !== src.alpha)
75-
{
76-
renderer.currentAlpha = src.alpha;
77-
ctx.globalAlpha = src.alpha;
78-
}
79-
8088
// Smoothing
8189
if (renderer.currentScaleMode !== src.scaleMode)
8290
{

src/gameobjects/graphics/GraphicsCanvasRenderer.js

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,32 +49,43 @@ var GraphicsCanvasRenderer = function (renderer, src, interpolationPercentage, c
4949
var green = 0;
5050
var blue = 0;
5151

52+
// Alpha
53+
54+
var alpha = camera.alpha * src.alpha;
55+
56+
if (alpha === 0)
57+
{
58+
// Nothing to see, so abort early
59+
return;
60+
}
61+
else if (renderer.currentAlpha !== alpha)
62+
{
63+
renderer.currentAlpha = alpha;
64+
ctx.globalAlpha = alpha;
65+
}
66+
5267
// Blend Mode
5368
if (renderer.currentBlendMode !== src.blendMode)
5469
{
5570
renderer.currentBlendMode = src.blendMode;
5671
ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];
5772
}
5873

59-
// Alpha
60-
if (renderer.currentAlpha !== src.alpha)
61-
{
62-
renderer.currentAlpha = src.alpha;
63-
ctx.globalAlpha = src.alpha;
64-
}
65-
6674
// Smoothing
6775
if (renderer.currentScaleMode !== src.scaleMode)
6876
{
6977
renderer.currentScaleMode = src.scaleMode;
7078
}
7179

7280
ctx.save();
81+
7382
if (parentMatrix)
7483
{
7584
var matrix = parentMatrix.matrix;
85+
7686
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
7787
}
88+
7889
ctx.translate(srcX - cameraScrollX, srcY - cameraScrollY);
7990
ctx.rotate(srcRotation);
8091
ctx.scale(srcScaleX, srcScaleY);
@@ -253,10 +264,6 @@ var GraphicsCanvasRenderer = function (renderer, src, interpolationPercentage, c
253264
);
254265
index += 1;
255266
break;
256-
257-
default:
258-
// console.error('Phaser: Invalid Graphics Command ID ' + commandID);
259-
break;
260267
}
261268
}
262269

src/gameobjects/particles/ParticleManagerCanvasRenderer.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@ var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpol
3333
var ctx = renderer.currentContext;
3434

3535
ctx.save();
36+
3637
if (parentMatrix !== undefined)
3738
{
3839
var matrix = parentMatrix.matrix;
40+
3941
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
4042
}
4143

@@ -51,8 +53,8 @@ var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpol
5153
continue;
5254
}
5355

54-
5556
var lastAlpha = ctx.globalAlpha;
57+
5658
var cameraScrollX = camera.scrollX * emitter.scrollFactorX;
5759
var cameraScrollY = camera.scrollY * emitter.scrollFactorY;
5860

@@ -68,9 +70,9 @@ var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpol
6870
{
6971
var particle = particles[index];
7072

71-
var alpha = ((particle.color >> 24) & 0xFF) / 255.0;
73+
var particleAlpha = camera.alpha * ((particle.color >> 24) & 0xFF) / 255;
7274

73-
if (alpha <= 0)
75+
if (particleAlpha <= 0)
7476
{
7577
continue;
7678
}
@@ -94,7 +96,7 @@ var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpol
9496
ty |= 0;
9597
}
9698

97-
ctx.globalAlpha = alpha;
99+
ctx.globalAlpha = particleAlpha;
98100

99101
ctx.save();
100102

src/gameobjects/rendertexture/RenderTextureCanvasRenderer.js

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,30 @@ var RenderTextureCanvasRenderer = function (renderer, renderTexture, interpolati
3030

3131
var ctx = renderer.currentContext;
3232

33+
// Alpha
34+
35+
var alpha = camera.alpha * renderTexture.alpha;
36+
37+
if (alpha === 0)
38+
{
39+
// Nothing to see, so abort early
40+
return;
41+
}
42+
else if (renderer.currentAlpha !== alpha)
43+
{
44+
renderer.currentAlpha = alpha;
45+
ctx.globalAlpha = alpha;
46+
}
47+
48+
// Blend Mode
49+
3350
if (renderer.currentBlendMode !== renderTexture.blendMode)
3451
{
3552
renderer.currentBlendMode = renderTexture.blendMode;
3653
ctx.globalCompositeOperation = renderer.blendModes[renderTexture.blendMode];
3754
}
3855

39-
if (renderer.currentAlpha !== renderTexture.alpha)
40-
{
41-
renderer.currentAlpha = renderTexture.alpha;
42-
ctx.globalAlpha = renderTexture.alpha;
43-
}
56+
// Scale Mode
4457

4558
if (renderer.currentScaleMode !== renderTexture.scaleMode)
4659
{
@@ -74,11 +87,14 @@ var RenderTextureCanvasRenderer = function (renderer, renderTexture, interpolati
7487
}
7588

7689
ctx.save();
90+
7791
if (parentMatrix !== undefined)
7892
{
7993
var matrix = parentMatrix.matrix;
94+
8095
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
8196
}
97+
8298
ctx.translate(renderTexture.x - camera.scrollX * renderTexture.scrollFactorX, renderTexture.y - camera.scrollY * renderTexture.scrollFactorY);
8399
ctx.rotate(renderTexture.rotation);
84100
ctx.scale(renderTexture.scaleX, renderTexture.scaleY);

src/gameobjects/text/static/TextCanvasRenderer.js

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,31 @@ var TextCanvasRenderer = function (renderer, src, interpolationPercentage, camer
3030

3131
var ctx = renderer.currentContext;
3232

33-
// var resolution = src.resolution;
33+
// Alpha
34+
35+
var alpha = camera.alpha * src.alpha;
3436

37+
if (alpha === 0)
38+
{
39+
// Nothing to see, so abort early
40+
return;
41+
}
42+
else if (renderer.currentAlpha !== alpha)
43+
{
44+
renderer.currentAlpha = alpha;
45+
ctx.globalAlpha = alpha;
46+
}
47+
3548
// Blend Mode
49+
3650
if (renderer.currentBlendMode !== src.blendMode)
3751
{
3852
renderer.currentBlendMode = src.blendMode;
3953
ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];
4054
}
4155

42-
// Alpha
43-
if (renderer.currentAlpha !== src.alpha)
44-
{
45-
renderer.currentAlpha = src.alpha;
46-
ctx.globalAlpha = src.alpha;
47-
}
48-
4956
// Smoothing
57+
5058
if (renderer.currentScaleMode !== src.scaleMode)
5159
{
5260
renderer.currentScaleMode = src.scaleMode;

src/gameobjects/tilesprite/TileSpriteCanvasRenderer.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,27 @@ var TileSpriteCanvasRenderer = function (renderer, src, interpolationPercentage,
3333

3434
src.updateTileTexture();
3535

36-
// Blend Mode
36+
// Alpha
3737

38-
if (renderer.currentBlendMode !== src.blendMode)
38+
var alpha = camera.alpha * src.alpha;
39+
40+
if (alpha === 0)
3941
{
40-
renderer.currentBlendMode = src.blendMode;
41-
ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];
42+
// Nothing to see, so abort early
43+
return;
44+
}
45+
else if (renderer.currentAlpha !== alpha)
46+
{
47+
renderer.currentAlpha = alpha;
48+
ctx.globalAlpha = alpha;
4249
}
4350

44-
// Alpha
51+
// Blend Mode
4552

46-
if (renderer.currentAlpha !== src.alpha)
53+
if (renderer.currentBlendMode !== src.blendMode)
4754
{
48-
renderer.currentAlpha = src.alpha;
49-
ctx.globalAlpha = src.alpha;
55+
renderer.currentBlendMode = src.blendMode;
56+
ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];
5057
}
5158

5259
// Smoothing

src/renderer/canvas/CanvasRenderer.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -395,11 +395,9 @@ var CanvasRenderer = new Class({
395395
ctx.fillRect(camera.x, camera.y, camera.width, camera.height);
396396
}
397397

398-
if (this.currentAlpha !== 1)
399-
{
400-
ctx.globalAlpha = 1;
401-
this.currentAlpha = 1;
402-
}
398+
ctx.globalAlpha = camera.alpha;
399+
400+
this.currentAlpha = camera.alpha;
403401

404402
if (this.currentBlendMode !== 0)
405403
{
@@ -442,6 +440,7 @@ var CanvasRenderer = new Class({
442440

443441
ctx.setTransform(1, 0, 0, 1, 0, 0);
444442
ctx.globalCompositeOperation = 'source-over';
443+
ctx.globalAlpha = 1;
445444

446445
camera.flashEffect.postRenderCanvas(ctx);
447446
camera.fadeEffect.postRenderCanvas(ctx);

src/renderer/canvas/utils/DrawImage.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,27 @@ var DrawImage = function (src, camera, parentMatrix)
2222
var frame = src.frame;
2323
var cd = frame.canvasData;
2424

25-
// Blend Mode
25+
// Alpha
2626

27-
if (this.currentBlendMode !== src.blendMode)
27+
var alpha = camera.alpha * src.alpha;
28+
29+
if (alpha === 0)
2830
{
29-
this.currentBlendMode = src.blendMode;
30-
ctx.globalCompositeOperation = this.blendModes[src.blendMode];
31+
// Nothing to see, so abort early
32+
return;
33+
}
34+
else if (renderer.currentAlpha !== alpha)
35+
{
36+
renderer.currentAlpha = alpha;
37+
ctx.globalAlpha = alpha;
3138
}
3239

33-
// Alpha
40+
// Blend Mode
3441

35-
if (this.currentAlpha !== src.alpha)
42+
if (this.currentBlendMode !== src.blendMode)
3643
{
37-
this.currentAlpha = src.alpha;
38-
ctx.globalAlpha = src.alpha;
44+
this.currentBlendMode = src.blendMode;
45+
ctx.globalCompositeOperation = this.blendModes[src.blendMode];
3946
}
4047

4148
// Smoothing

0 commit comments

Comments
 (0)