Skip to content

Commit 2d4b7b5

Browse files
committed
Merge branch 'master' of https://github.com/photonstorm/phaser
2 parents 6efb94c + cff54d8 commit 2d4b7b5

7 files changed

Lines changed: 77 additions & 34 deletions

File tree

src/gameobjects/blitter/BlitterCanvasRenderer.js

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,46 @@ var BlitterCanvasRenderer = function (renderer, src, interpolationPercentage, ca
2626
renderer.setBlendMode(src.blendMode);
2727

2828
var ca = renderer.currentAlpha;
29+
var ctx = renderer.gameContext;
30+
var cameraScrollX = src.x - camera.scrollX * src.scrollFactorX;
31+
var cameraScrollY = src.y - camera.scrollY * src.scrollFactorY;
2932

3033
// Render bobs
3134
for (var i = 0; i < list.length; i++)
3235
{
3336
var bob = list[i];
37+
var flip = (bob.flipX || bob.flipY);
38+
var frame = bob.frame;
39+
var cd = frame.canvasData;
40+
var dx = frame.x;
41+
var dy = frame.y;
42+
var fx = 1;
43+
var fy = 1;
3444

35-
if (ca !== bob.alpha)
45+
if (!flip)
3646
{
37-
ca = renderer.setAlpha(bob.alpha);
47+
renderer.blitImage(dx + bob.x + cameraScrollX, dy + bob.y + cameraScrollY, bob.frame);
3848
}
49+
else
50+
{
51+
if (bob.flipX)
52+
{
53+
fx = -1;
54+
dx -= cd.dWidth;
55+
}
3956

40-
// var x = src.x + bob.x + frame.x - cameraScrollX + ((frame.width) * (bob.flipX ? 1 : 0));
41-
// var y = src.y + bob.y + frame.y - cameraScrollY + ((frame.height) * (bob.flipY ? 1 : 0));
57+
if (bob.flipY)
58+
{
59+
fy = -1;
60+
dy -= cd.dHeight;
61+
}
4262

43-
renderer.blitImage(src.x + bob.x, src.y + bob.y, bob.frame, camera);
63+
ctx.save();
64+
ctx.translate(bob.x + cameraScrollX, bob.y + cameraScrollY);
65+
ctx.scale(fx, fy);
66+
ctx.drawImage(frame.source.image, cd.sx, cd.sy, cd.sWidth, cd.sHeight, dx, dy, cd.dWidth, cd.dHeight);
67+
ctx.restore();
68+
}
4469
}
4570
};
4671

src/gameobjects/tilemap/dynamiclayer/DynamicTilemapLayerCanvasRenderer.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ var DynamicTilemapLayerCanvasRenderer = function (renderer, gameObject, interpol
3737
ctx.save();
3838
ctx.translate(tile.pixelX + halfWidth, tile.pixelY + halfHeight);
3939

40+
if (tile.rotation !== 0)
41+
{
42+
ctx.rotate(tile.rotation);
43+
}
44+
4045
if (tile.flipX || tile.flipY)
4146
{
4247
ctx.scale(tile.flipX ? -1 : 1, tile.flipY ? -1 : 1);

src/renderer/canvas/utils/BlitImage.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
// No scaling, anchor, rotation or effects, literally draws the frame directly to the canvas
3-
var BlitImage = function (dx, dy, frame, camera)
3+
var BlitImage = function (dx, dy, frame)
44
{
55
var ctx = this.currentContext;
66
var cd = frame.canvasData;
@@ -11,8 +11,8 @@ var BlitImage = function (dx, dy, frame, camera)
1111
cd.sy,
1212
cd.sWidth,
1313
cd.sHeight,
14-
dx - camera.scrollX,
15-
dy - camera.scrollY,
14+
dx,
15+
dy,
1616
cd.dWidth,
1717
cd.dHeight
1818
);

src/renderer/webgl/WebGLRenderer.js

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,14 @@ var WebGLRenderer = new Class({
3232
powerPreference: game.config.powerPreference
3333
};
3434

35-
this.contextCreationConfig = contextCreationConfig;
35+
this.config = {
36+
clearBeforeRender: game.config.clearBeforeRender,
37+
pixelArt: game.config.pixelArt,
38+
backgroundColor: game.config.backgroundColor,
39+
contextCreation: contextCreationConfig,
40+
resolution: game.config.resolution
41+
};
3642
this.game = game;
37-
this.gameConfig = game.config;
3843
this.type = CONST.WEBGL;
3944
this.width = game.config.width * game.config.resolution;
4045
this.height = game.config.height * game.config.resolution;
@@ -88,7 +93,7 @@ var WebGLRenderer = new Class({
8893

8994
this.canvas.addEventListener('webglcontextrestored', function (event) {
9095
renderer.contextLost = false;
91-
renderer.init(renderer.gameConfig, renderer.contextCreationConfig);
96+
renderer.init(renderer.config);
9297
for (var index = 0; index < renderer.restoredContextCallbacks.length; ++index)
9398
{
9499
var callback = renderer.restoredContextCallbacks[index];
@@ -101,14 +106,14 @@ var WebGLRenderer = new Class({
101106
this.supportedExtensions = null;
102107
this.extensions = {};
103108

104-
this.init(this.gameConfig, this.contextCreationConfig);
109+
this.init(this.config);
105110
},
106111

107-
init: function (config, contextCreationConfig)
112+
init: function (config)
108113
{
109114
var canvas = this.canvas;
110115
var clearColor = config.backgroundColor;
111-
var gl = canvas.getContext('webgl', contextCreationConfig) || canvas.getContext('experimental-webgl', contextCreationConfig);
116+
var gl = canvas.getContext('webgl', config.contextCreation) || canvas.getContext('experimental-webgl', config.contextCreation);
112117

113118
if (!gl)
114119
{
@@ -238,7 +243,7 @@ var WebGLRenderer = new Class({
238243
else console.warn('Pipeline', pipelineName, ' already exists.');
239244

240245
pipelineInstance.name = pipelineName;
241-
this.pipelines[pipelineName].resize(this.width, this.height, this.gameConfig.resolution);
246+
this.pipelines[pipelineName].resize(this.width, this.height, this.config.resolution);
242247

243248
return this;
244249
},
@@ -450,7 +455,7 @@ var WebGLRenderer = new Class({
450455
{
451456
filter = gl.LINEAR;
452457
}
453-
else if (scaleMode === CONST.ScaleModes.NEAREST || this.gameConfig.pixelArt)
458+
else if (scaleMode === CONST.ScaleModes.NEAREST || this.config.pixelArt)
454459
{
455460
filter = gl.NEAREST;
456461
}
@@ -683,13 +688,13 @@ var WebGLRenderer = new Class({
683688
if (this.contextLost) return;
684689

685690
var gl = this.gl;
686-
var color = this.gameConfig.backgroundColor;
691+
var color = this.config.backgroundColor;
687692
var pipelines = this.pipelines;
688693

689694
// Bind custom framebuffer here
690695
gl.clearColor(color.redGL, color.greenGL, color.blueGL, color.alphaGL);
691696

692-
if (this.gameConfig.clearBeforeRender)
697+
if (this.config.clearBeforeRender)
693698
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
694699

695700
for (var key in pipelines)
@@ -780,7 +785,14 @@ var WebGLRenderer = new Class({
780785

781786
if (!dstTexture)
782787
{
783-
dstTexture = this.createTexture2D(0, gl.NEAREST, gl.NEAREST, gl.CLAMP_TO_EDGE, gl.CLAMP_TO_EDGE, gl.RGBA, srcCanvas, srcCanvas.width, srcCanvas.height, true);
788+
var wrapping = gl.CLAMP_TO_EDGE;
789+
790+
if (IsSizePowerOfTwo(srcCanvas.width, srcCanvas.height))
791+
{
792+
wrapping = gl.REPEAT;
793+
}
794+
795+
dstTexture = this.createTexture2D(0, gl.NEAREST, gl.NEAREST, wrapping, wrapping, gl.RGBA, srcCanvas, srcCanvas.width, srcCanvas.height, true);
784796
}
785797
else
786798
{

src/renderer/webgl/pipelines/FlatTintPipeline.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ var FlatTintPipeline = new Class({
109109
}
110110

111111
var renderer = this.renderer;
112-
var resolution = renderer.gameConfig.resolution;
112+
var resolution = renderer.config.resolution;
113113
var vertexViewF32 = this.vertexViewF32;
114114
var vertexViewU32 = this.vertexViewU32;
115115
var vertexOffset = this.vertexCount * this.vertexComponentCount;
@@ -181,7 +181,7 @@ var FlatTintPipeline = new Class({
181181
}
182182

183183
var renderer = this.renderer;
184-
var resolution = renderer.gameConfig.resolution;
184+
var resolution = renderer.config.resolution;
185185
var vertexViewF32 = this.vertexViewF32;
186186
var vertexViewU32 = this.vertexViewU32;
187187
var vertexOffset = this.vertexCount * this.vertexComponentCount;
@@ -269,7 +269,7 @@ var FlatTintPipeline = new Class({
269269
this.renderer.setPipeline(this);
270270

271271
var renderer = this.renderer;
272-
var resolution = renderer.gameConfig.resolution;
272+
var resolution = renderer.config.resolution;
273273
var length = path.length;
274274
var polygonCache = this.polygonCache;
275275
var polygonIndexArray;
@@ -437,7 +437,7 @@ var FlatTintPipeline = new Class({
437437
}
438438

439439
var renderer = this.renderer;
440-
var resolution = renderer.gameConfig.resolution;
440+
var resolution = renderer.config.resolution;
441441
var a0 = currentMatrix[0];
442442
var b0 = currentMatrix[1];
443443
var c0 = currentMatrix[2];

src/renderer/webgl/pipelines/ForwardDiffuseLightPipeline.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
var Class = require('../../../utils/Class');
23
var WebGLPipeline = require('../WebGLPipeline');
34
var Utils = require('../Utils');

src/renderer/webgl/pipelines/TextureTintPipeline.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ var TextureTintPipeline = new Class({
118118
var vertexViewU32 = this.vertexViewU32;
119119
var renderer = this.renderer;
120120
var roundPixels = camera.roundPixels;
121-
var resolution = renderer.gameConfig.resolution;
121+
var resolution = renderer.config.resolution;
122122
var maxQuads = this.maxQuads;
123123
var cameraScrollX = camera.scrollX;
124124
var cameraScrollY = camera.scrollY;
@@ -271,7 +271,7 @@ var TextureTintPipeline = new Class({
271271
var vertexViewU32 = this.vertexViewU32;
272272
var renderer = this.renderer;
273273
var roundPixels = camera.roundPixels;
274-
var resolution = renderer.gameConfig.resolution;
274+
var resolution = renderer.config.resolution;
275275
var list = blitter.getRenderList();
276276
var length = list.length;
277277
var cameraMatrix = camera.matrix.matrix;
@@ -285,8 +285,8 @@ var TextureTintPipeline = new Class({
285285
var cameraScrollY = camera.scrollY * blitter.scrollFactorY;
286286
var batchCount = Math.ceil(length / this.maxQuads);
287287
var batchOffset = 0;
288-
var blitterX = blitter.x;
289-
var blitterY = blitter.y;
288+
var blitterX = blitter.x - cameraScrollX;
289+
var blitterY = blitter.y - cameraScrollY;
290290

291291
for (var batchIndex = 0; batchIndex < batchCount; ++batchIndex)
292292
{
@@ -305,8 +305,8 @@ var TextureTintPipeline = new Class({
305305
var flipY = bob.flipY;
306306
var width = frame.width * (flipX ? -1.0 : 1.0);
307307
var height = frame.height * (flipY ? -1.0 : 1.0);
308-
var x = blitterX + bob.x + frame.x - cameraScrollX + (width * ((flipX) ? 1.0 : 0.0));
309-
var y = blitterY + bob.y + frame.y - cameraScrollY + (height * ((flipY) ? 1.0 : 0.0));
308+
var x = blitterX + bob.x + frame.x + (frame.width * ((flipX) ? 1.0 : 0.0));
309+
var y = blitterY + bob.y + frame.y + (frame.height * ((flipY) ? 1.0 : 0.0));
310310
var xw = x + width;
311311
var yh = y + height;
312312
var tx0 = x * a + y * c + e;
@@ -391,7 +391,7 @@ var TextureTintPipeline = new Class({
391391
var vertexViewU32 = this.vertexViewU32;
392392
var renderer = this.renderer;
393393
var roundPixels = camera.roundPixels;
394-
var resolution = renderer.gameConfig.resolution;
394+
var resolution = renderer.config.resolution;
395395
var cameraMatrix = camera.matrix.matrix;
396396
var frame = sprite.frame;
397397
var texture = frame.texture.source[frame.sourceIndex].glTexture;
@@ -523,7 +523,7 @@ var TextureTintPipeline = new Class({
523523
var vertexViewU32 = this.vertexViewU32;
524524
var renderer = this.renderer;
525525
var roundPixels = camera.roundPixels;
526-
var resolution = renderer.gameConfig.resolution;
526+
var resolution = renderer.config.resolution;
527527
var cameraMatrix = camera.matrix.matrix;
528528
var a = cameraMatrix[0];
529529
var b = cameraMatrix[1];
@@ -605,7 +605,7 @@ var TextureTintPipeline = new Class({
605605
var vertexViewU32 = this.vertexViewU32;
606606
var renderer = this.renderer;
607607
var roundPixels = camera.roundPixels;
608-
var resolution = renderer.gameConfig.resolution;
608+
var resolution = renderer.config.resolution;
609609
var cameraMatrix = camera.matrix.matrix;
610610
var cameraWidth = camera.width + 50;
611611
var cameraHeight = camera.height + 50;
@@ -820,7 +820,7 @@ var TextureTintPipeline = new Class({
820820
var vertexViewU32 = this.vertexViewU32;
821821
var renderer = this.renderer;
822822
var roundPixels = camera.roundPixels;
823-
var resolution = renderer.gameConfig.resolution;
823+
var resolution = renderer.config.resolution;
824824
var cameraMatrix = camera.matrix.matrix;
825825
var frame = bitmapText.frame;
826826
var textureSource = bitmapText.texture.source[frame.sourceIndex];
@@ -1223,7 +1223,7 @@ var TextureTintPipeline = new Class({
12231223
var vertexViewU32 = this.vertexViewU32;
12241224
var renderer = this.renderer;
12251225
var roundPixels = camera.roundPixels;
1226-
var resolution = renderer.gameConfig.resolution;
1226+
var resolution = renderer.config.resolution;
12271227
var cameraMatrix = camera.matrix.matrix;
12281228
var width = srcWidth * (flipX ? -1.0 : 1.0);
12291229
var height = srcHeight * (flipY ? -1.0 : 1.0);

0 commit comments

Comments
 (0)