Added in Camera alpha support to all canvas renderers

This commit is contained in:
Richard Davey 2018-06-25 16:24:08 +01:00
parent 6dff47b71d
commit 90ba2608fa
9 changed files with 125 additions and 56 deletions

View file

@ -68,6 +68,21 @@ var DynamicBitmapTextCanvasRenderer = function (renderer, src, interpolationPerc
var rotation = 0;
var scale = (src.fontSize / src.fontData.size);
// Alpha
var alpha = camera.alpha * src.alpha;
if (alpha === 0)
{
// Nothing to see, so abort early
return;
}
else if (renderer.currentAlpha !== alpha)
{
renderer.currentAlpha = alpha;
ctx.globalAlpha = alpha;
}
// Blend Mode
if (renderer.currentBlendMode !== src.blendMode)
{

View file

@ -63,6 +63,21 @@ var BitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage,
var scale = (src.fontSize / src.fontData.size);
// Alpha
var alpha = camera.alpha * src.alpha;
if (alpha === 0)
{
// Nothing to see, so abort early
return;
}
else if (renderer.currentAlpha !== alpha)
{
renderer.currentAlpha = alpha;
ctx.globalAlpha = alpha;
}
// Blend Mode
if (renderer.currentBlendMode !== src.blendMode)
{
@ -70,13 +85,6 @@ var BitmapTextCanvasRenderer = function (renderer, src, interpolationPercentage,
ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];
}
// Alpha
if (renderer.currentAlpha !== src.alpha)
{
renderer.currentAlpha = src.alpha;
ctx.globalAlpha = src.alpha;
}
// Smoothing
if (renderer.currentScaleMode !== src.scaleMode)
{

View file

@ -49,6 +49,21 @@ var GraphicsCanvasRenderer = function (renderer, src, interpolationPercentage, c
var green = 0;
var blue = 0;
// Alpha
var alpha = camera.alpha * src.alpha;
if (alpha === 0)
{
// Nothing to see, so abort early
return;
}
else if (renderer.currentAlpha !== alpha)
{
renderer.currentAlpha = alpha;
ctx.globalAlpha = alpha;
}
// Blend Mode
if (renderer.currentBlendMode !== src.blendMode)
{
@ -56,13 +71,6 @@ var GraphicsCanvasRenderer = function (renderer, src, interpolationPercentage, c
ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];
}
// Alpha
if (renderer.currentAlpha !== src.alpha)
{
renderer.currentAlpha = src.alpha;
ctx.globalAlpha = src.alpha;
}
// Smoothing
if (renderer.currentScaleMode !== src.scaleMode)
{
@ -70,11 +78,14 @@ var GraphicsCanvasRenderer = function (renderer, src, interpolationPercentage, c
}
ctx.save();
if (parentMatrix)
{
var matrix = parentMatrix.matrix;
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
}
ctx.translate(srcX - cameraScrollX, srcY - cameraScrollY);
ctx.rotate(srcRotation);
ctx.scale(srcScaleX, srcScaleY);
@ -253,10 +264,6 @@ var GraphicsCanvasRenderer = function (renderer, src, interpolationPercentage, c
);
index += 1;
break;
default:
// console.error('Phaser: Invalid Graphics Command ID ' + commandID);
break;
}
}

View file

@ -33,9 +33,11 @@ var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpol
var ctx = renderer.currentContext;
ctx.save();
if (parentMatrix !== undefined)
{
var matrix = parentMatrix.matrix;
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
}
@ -51,8 +53,8 @@ var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpol
continue;
}
var lastAlpha = ctx.globalAlpha;
var cameraScrollX = camera.scrollX * emitter.scrollFactorX;
var cameraScrollY = camera.scrollY * emitter.scrollFactorY;
@ -68,9 +70,9 @@ var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpol
{
var particle = particles[index];
var alpha = ((particle.color >> 24) & 0xFF) / 255.0;
var particleAlpha = camera.alpha * ((particle.color >> 24) & 0xFF) / 255;
if (alpha <= 0)
if (particleAlpha <= 0)
{
continue;
}
@ -94,7 +96,7 @@ var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpol
ty |= 0;
}
ctx.globalAlpha = alpha;
ctx.globalAlpha = particleAlpha;
ctx.save();

View file

@ -30,17 +30,30 @@ var RenderTextureCanvasRenderer = function (renderer, renderTexture, interpolati
var ctx = renderer.currentContext;
// Alpha
var alpha = camera.alpha * renderTexture.alpha;
if (alpha === 0)
{
// Nothing to see, so abort early
return;
}
else if (renderer.currentAlpha !== alpha)
{
renderer.currentAlpha = alpha;
ctx.globalAlpha = alpha;
}
// Blend Mode
if (renderer.currentBlendMode !== renderTexture.blendMode)
{
renderer.currentBlendMode = renderTexture.blendMode;
ctx.globalCompositeOperation = renderer.blendModes[renderTexture.blendMode];
}
if (renderer.currentAlpha !== renderTexture.alpha)
{
renderer.currentAlpha = renderTexture.alpha;
ctx.globalAlpha = renderTexture.alpha;
}
// Scale Mode
if (renderer.currentScaleMode !== renderTexture.scaleMode)
{
@ -74,11 +87,14 @@ var RenderTextureCanvasRenderer = function (renderer, renderTexture, interpolati
}
ctx.save();
if (parentMatrix !== undefined)
{
var matrix = parentMatrix.matrix;
ctx.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
}
ctx.translate(renderTexture.x - camera.scrollX * renderTexture.scrollFactorX, renderTexture.y - camera.scrollY * renderTexture.scrollFactorY);
ctx.rotate(renderTexture.rotation);
ctx.scale(renderTexture.scaleX, renderTexture.scaleY);

View file

@ -30,23 +30,31 @@ var TextCanvasRenderer = function (renderer, src, interpolationPercentage, camer
var ctx = renderer.currentContext;
// var resolution = src.resolution;
// Alpha
var alpha = camera.alpha * src.alpha;
if (alpha === 0)
{
// Nothing to see, so abort early
return;
}
else if (renderer.currentAlpha !== alpha)
{
renderer.currentAlpha = alpha;
ctx.globalAlpha = alpha;
}
// Blend Mode
if (renderer.currentBlendMode !== src.blendMode)
{
renderer.currentBlendMode = src.blendMode;
ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];
}
// Alpha
if (renderer.currentAlpha !== src.alpha)
{
renderer.currentAlpha = src.alpha;
ctx.globalAlpha = src.alpha;
}
// Smoothing
if (renderer.currentScaleMode !== src.scaleMode)
{
renderer.currentScaleMode = src.scaleMode;

View file

@ -33,6 +33,21 @@ var TileSpriteCanvasRenderer = function (renderer, src, interpolationPercentage,
src.updateTileTexture();
// Alpha
var alpha = camera.alpha * src.alpha;
if (alpha === 0)
{
// Nothing to see, so abort early
return;
}
else if (renderer.currentAlpha !== alpha)
{
renderer.currentAlpha = alpha;
ctx.globalAlpha = alpha;
}
// Blend Mode
if (renderer.currentBlendMode !== src.blendMode)
@ -41,14 +56,6 @@ var TileSpriteCanvasRenderer = function (renderer, src, interpolationPercentage,
ctx.globalCompositeOperation = renderer.blendModes[src.blendMode];
}
// Alpha
if (renderer.currentAlpha !== src.alpha)
{
renderer.currentAlpha = src.alpha;
ctx.globalAlpha = src.alpha;
}
// Smoothing
if (renderer.currentScaleMode !== src.scaleMode)

View file

@ -395,11 +395,9 @@ var CanvasRenderer = new Class({
ctx.fillRect(camera.x, camera.y, camera.width, camera.height);
}
if (this.currentAlpha !== 1)
{
ctx.globalAlpha = 1;
this.currentAlpha = 1;
}
ctx.globalAlpha = camera.alpha;
this.currentAlpha = camera.alpha;
if (this.currentBlendMode !== 0)
{
@ -442,6 +440,7 @@ var CanvasRenderer = new Class({
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.globalCompositeOperation = 'source-over';
ctx.globalAlpha = 1;
camera.flashEffect.postRenderCanvas(ctx);
camera.fadeEffect.postRenderCanvas(ctx);

View file

@ -22,6 +22,21 @@ var DrawImage = function (src, camera, parentMatrix)
var frame = src.frame;
var cd = frame.canvasData;
// Alpha
var alpha = camera.alpha * src.alpha;
if (alpha === 0)
{
// Nothing to see, so abort early
return;
}
else if (renderer.currentAlpha !== alpha)
{
renderer.currentAlpha = alpha;
ctx.globalAlpha = alpha;
}
// Blend Mode
if (this.currentBlendMode !== src.blendMode)
@ -30,14 +45,6 @@ var DrawImage = function (src, camera, parentMatrix)
ctx.globalCompositeOperation = this.blendModes[src.blendMode];
}
// Alpha
if (this.currentAlpha !== src.alpha)
{
this.currentAlpha = src.alpha;
ctx.globalAlpha = src.alpha;
}
// Smoothing
if (this.currentScaleMode !== src.scaleMode)