Skip to content

Commit 08b3043

Browse files
committed
Made the Render Events global, not WebGL specific and allowed Canvas Renderer to emit them too
1 parent 682a85c commit 08b3043

12 files changed

Lines changed: 109 additions & 59 deletions

File tree

CHANGELOG-v3.50.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -214,11 +214,20 @@ All of the internal functions, such as `batchQuad` and `batchSprite` have been u
214214
* `WebGLRenderer.setFramebuffer` has a new optional boolean parameter `resetTextures` which will reset the WebGL Textures, if set to `true` (which is the default).
215215
* `WebGLRenderer.isBooted` is a new boolean property that lets you know if the rendere has fully finished booting.
216216
* The `WebGLRenderer` now extends the Event Emitter, allowing you to listen to renderer specific events.
217-
* `Phaser.Renderer.WebGL.Events` is a new WebGL Renderer namespace for events.
218-
* `WebGL.Events.PRE_RENDER` is a new event dispatched by the WebGL Renderer. This happens right at the start of the render process.
219-
* `WebGL.Events.RENDER` is a new event dispatched by the WebGL Renderer. This happens once for every camera, in every Scene at the start of its render process.
220-
* `WebGL.Events.POST_RENDER` is a new event dispatched by the WebGL Renderer. This happens right at the end of the render process.
221-
* `WebGL.Events.RESIZE` is a new event dispatched by the WebGL Renderer whenever it is resized.
217+
* `WebGLRenderer.defaultCamera` has been removed as it's not used anywhere internally any longer.
218+
219+
### WebGL and Canvas Renderer Events
220+
221+
* `Phaser.Renderer.Events` is a new namespace for events emited by the Canvas and WebGL Renderers.
222+
* `Renderer.Events.PRE_RENDER` is a new event dispatched by the Phaser Renderer. This happens right at the start of the render process.
223+
* `Renderer.Events.RENDER` is a new event dispatched by the Phaser Renderer. This happens once for every camera, in every Scene at the start of its render process.
224+
* `Renderer.Events.POST_RENDER` is a new event dispatched by the Phaser Renderer. This happens right at the end of the render process.
225+
* `Renderer.Events.RESIZE` is a new event dispatched by the Phaser Renderer whenever it is resized.
226+
227+
### Canvas Renderer Updates
228+
229+
* `CanvasRenderer.isBooted` is a new boolean property that lets you know if the rendere has fully finished booting.
230+
* The `CanvasRenderer` now extends the Event Emitter, allowing you to listen to renderer specific events.
222231

223232
### Camera - New Features, Updates and API Changes
224233

src/display/mask/BitmapMask.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
var Class = require('../../utils/Class');
88
var GameEvents = require('../../core/events');
9-
var RenderEvents = require('../../renderer/webgl/events');
9+
var RenderEvents = require('../../renderer/events');
1010

1111
/**
1212
* @classdesc

src/gameobjects/rendertexture/RenderTexture.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ var GameObject = require('../GameObject');
1515
var NOOP = require('../../utils/NOOP');
1616
var PIPELINE_CONST = require('../../renderer/webgl/pipelines/const');
1717
var Render = require('./RenderTextureRender');
18-
var RenderEvents = require('../../renderer/webgl/events');
18+
var RenderEvents = require('../../renderer/events');
1919
var RenderTarget = require('../../renderer/webgl/RenderTarget');
2020
var Utils = require('../../renderer/webgl/Utils');
2121
var UUID = require('../../utils/string/UUID');

src/renderer/canvas/CanvasRenderer.js

Lines changed: 74 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,22 @@ var CameraEvents = require('../../cameras/2d/events');
99
var CanvasSnapshot = require('../snapshot/CanvasSnapshot');
1010
var Class = require('../../utils/Class');
1111
var CONST = require('../../const');
12+
var EventEmitter = require('eventemitter3');
13+
var Events = require('../events');
1214
var GetBlendModes = require('./utils/GetBlendModes');
1315
var ScaleEvents = require('../../scale/events');
16+
var TextureEvents = require('../../textures/events');
1417
var TransformMatrix = require('../../gameobjects/components/TransformMatrix');
1518

1619
/**
1720
* @classdesc
18-
* The Canvas Renderer is responsible for managing 2D canvas rendering contexts, including the one used by the Game's canvas. It tracks the internal state of a given context and can renderer textured Game Objects to it, taking into account alpha, blending, and scaling.
21+
* The Canvas Renderer is responsible for managing 2D canvas rendering contexts,
22+
* including the one used by the Games canvas. It tracks the internal state of a
23+
* given context and can renderer textured Game Objects to it, taking into
24+
* account alpha, blending, and scaling.
1925
*
2026
* @class CanvasRenderer
27+
* @extends Phaser.Events.EventEmitter
2128
* @memberof Phaser.Renderer.Canvas
2229
* @constructor
2330
* @since 3.0.0
@@ -26,10 +33,30 @@ var TransformMatrix = require('../../gameobjects/components/TransformMatrix');
2633
*/
2734
var CanvasRenderer = new Class({
2835

36+
Extends: EventEmitter,
37+
2938
initialize:
3039

3140
function CanvasRenderer (game)
3241
{
42+
EventEmitter.call(this);
43+
44+
var gameConfig = game.config;
45+
46+
/**
47+
* The local configuration settings of the CanvasRenderer.
48+
*
49+
* @name Phaser.Renderer.Canvas.CanvasRenderer#config
50+
* @type {object}
51+
* @since 3.0.0
52+
*/
53+
this.config = {
54+
clearBeforeRender: gameConfig.clearBeforeRender,
55+
backgroundColor: gameConfig.backgroundColor,
56+
antialias: gameConfig.antialias,
57+
roundPixels: gameConfig.roundPixels
58+
};
59+
3360
/**
3461
* The Phaser Game instance that owns this renderer.
3562
*
@@ -76,20 +103,6 @@ var CanvasRenderer = new Class({
76103
*/
77104
this.height = 0;
78105

79-
/**
80-
* The local configuration settings of the CanvasRenderer.
81-
*
82-
* @name Phaser.Renderer.Canvas.CanvasRenderer#config
83-
* @type {object}
84-
* @since 3.0.0
85-
*/
86-
this.config = {
87-
clearBeforeRender: game.config.clearBeforeRender,
88-
backgroundColor: game.config.backgroundColor,
89-
antialias: game.config.antialias,
90-
roundPixels: game.config.roundPixels
91-
};
92-
93106
/**
94107
* The canvas element which the Game uses.
95108
*
@@ -111,7 +124,7 @@ var CanvasRenderer = new Class({
111124
* @type {CanvasRenderingContext2D}
112125
* @since 3.0.0
113126
*/
114-
this.gameContext = (this.game.config.context) ? this.game.config.context : this.gameCanvas.getContext('2d', contextOptions);
127+
this.gameContext = (gameConfig.context) ? gameConfig.context : this.gameCanvas.getContext('2d', contextOptions);
115128

116129
/**
117130
* The canvas context currently used by the CanvasRenderer for all rendering operations.
@@ -192,6 +205,15 @@ var CanvasRenderer = new Class({
192205
*/
193206
this._tempMatrix3 = new TransformMatrix();
194207

208+
/**
209+
* Has this renderer fully booted yet?
210+
*
211+
* @name Phaser.Renderer.Canvas.CanvasRenderer#isBooted
212+
* @type {boolean}
213+
* @since 3.50.0
214+
*/
215+
this.isBooted = false;
216+
195217
this.init();
196218
},
197219

@@ -203,9 +225,28 @@ var CanvasRenderer = new Class({
203225
*/
204226
init: function ()
205227
{
206-
this.game.scale.on(ScaleEvents.RESIZE, this.onResize, this);
228+
this.game.textures.once(TextureEvents.READY, this.boot, this);
229+
},
230+
231+
/**
232+
* Internal boot handler.
233+
*
234+
* @method Phaser.Renderer.Canvas.CanvasRenderer#boot
235+
* @private
236+
* @since 3.50.0
237+
*/
238+
boot: function ()
239+
{
240+
var game = this.game;
207241

208-
var baseSize = this.game.scale.baseSize;
242+
var baseSize = game.scale.baseSize;
243+
244+
this.width = baseSize.width;
245+
this.height = baseSize.height;
246+
247+
this.isBooted = true;
248+
249+
game.scale.on(ScaleEvents.RESIZE, this.onResize, this);
209250

210251
this.resize(baseSize.width, baseSize.height);
211252
},
@@ -232,6 +273,7 @@ var CanvasRenderer = new Class({
232273
* Resize the main game canvas.
233274
*
234275
* @method Phaser.Renderer.Canvas.CanvasRenderer#resize
276+
* @fires Phaser.Renderer.Events#RESIZE
235277
* @since 3.0.0
236278
*
237279
* @param {number} [width] - The new width of the renderer.
@@ -241,6 +283,8 @@ var CanvasRenderer = new Class({
241283
{
242284
this.width = width;
243285
this.height = height;
286+
287+
this.emit(Events.RESIZE, width, height);
244288
},
245289

246290
/**
@@ -309,6 +353,7 @@ var CanvasRenderer = new Class({
309353
* Called at the start of the render loop.
310354
*
311355
* @method Phaser.Renderer.Canvas.CanvasRenderer#preRender
356+
* @fires Phaser.Renderer.Events#PRE_RENDER
312357
* @since 3.0.0
313358
*/
314359
preRender: function ()
@@ -337,6 +382,8 @@ var CanvasRenderer = new Class({
337382
ctx.save();
338383

339384
this.drawCount = 0;
385+
386+
this.emit(Events.PRE_RENDER);
340387
},
341388

342389
/**
@@ -350,6 +397,7 @@ var CanvasRenderer = new Class({
350397
* This method is not called if `Camera.visible` is `false`, or `Camera.alpha` is zero.
351398
*
352399
* @method Phaser.Renderer.Canvas.CanvasRenderer#render
400+
* @fires Phaser.Renderer.Events#RENDER
353401
* @since 3.0.0
354402
*
355403
* @param {Phaser.Scene} scene - The Scene to render.
@@ -360,6 +408,8 @@ var CanvasRenderer = new Class({
360408
{
361409
var childCount = children.length;
362410

411+
this.emit(Events.RENDER, scene, camera);
412+
363413
var cx = camera.x;
364414
var cy = camera.y;
365415
var cw = camera.width;
@@ -456,6 +506,7 @@ var CanvasRenderer = new Class({
456506
* The post-render step happens after all Cameras in all Scenes have been rendered.
457507
*
458508
* @method Phaser.Renderer.Canvas.CanvasRenderer#postRender
509+
* @fires Phaser.Renderer.Events#POST_RENDER
459510
* @since 3.0.0
460511
*/
461512
postRender: function ()
@@ -464,6 +515,8 @@ var CanvasRenderer = new Class({
464515

465516
ctx.restore();
466517

518+
this.emit(Events.POST_RENDER);
519+
467520
var state = this.snapshotState;
468521

469522
if (state.callback)
@@ -773,10 +826,11 @@ var CanvasRenderer = new Class({
773826
*/
774827
destroy: function ()
775828
{
776-
this.gameCanvas = null;
777-
this.gameContext = null;
829+
this.removeAllListeners();
778830

779831
this.game = null;
832+
this.gameCanvas = null;
833+
this.gameContext = null;
780834
}
781835

782836
});

src/renderer/webgl/events/POST_RENDER_EVENT.js renamed to src/renderer/events/POST_RENDER_EVENT.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
/**
88
* The Post-Render Event.
99
*
10-
* This event is dispatched by the WebGL Renderer when all rendering, for all cameras in all Scenes,
11-
* has completed.
10+
* This event is dispatched by the Renderer when all rendering, for all cameras in all Scenes,
11+
* has completed, but before any pending snap shots have been taken.
1212
*
13-
* @event Phaser.Renderer.WebGL.Events#POST_RENDER
13+
* @event Phaser.Renderer.Events#POST_RENDER
1414
* @since 3.50.0
1515
*/
1616
module.exports = 'postrender';

src/renderer/webgl/events/PRE_RENDER_EVENT.js renamed to src/renderer/events/PRE_RENDER_EVENT.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
/**
88
* The Pre-Render Event.
99
*
10-
* This event is dispatched by the WebGL Renderer. This happens right at the start of the render
11-
* process, after the context has been cleared, the scissors enabled and everything has been
10+
* This event is dispatched by the Phaser Renderer. This happens right at the start of the render
11+
* process, after the context has been cleared, the scissors enabled (WebGL only) and everything has been
1212
* reset ready for the render.
1313
*
14-
* @event Phaser.Renderer.WebGL.Events#PRE_RENDER
14+
* @event Phaser.Renderer.Events#PRE_RENDER
1515
* @since 3.50.0
1616
*/
1717
module.exports = 'prerender';
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
/**
88
* The Render Event.
99
*
10-
* This event is dispatched by the WebGL Renderer for every camera in every Scene.
10+
* This event is dispatched by the Phaser Renderer for every camera in every Scene.
1111
*
1212
* It is dispatched before any of the children in the Scene have been rendered.
1313
*
14-
* @event Phaser.Renderer.WebGL.Events#RENDER
14+
* @event Phaser.Renderer.Events#RENDER
1515
* @since 3.50.0
1616
*
1717
* @param {Phaser.Scene} scene - The Scene being rendered.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
/**
88
* The Renderer Resize Event.
99
*
10-
* This event is dispatched by the WebGL Renderer when it is resized, usually as a result
10+
* This event is dispatched by the Phaser Renderer when it is resized, usually as a result
1111
* of the Scale Manager resizing.
1212
*
13-
* @event Phaser.Renderer.WebGL.Events#RESIZE
13+
* @event Phaser.Renderer.Events#RESIZE
1414
* @since 3.50.0
1515
*
1616
* @param {number} width - The new width of the renderer.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
/**
8-
* @namespace Phaser.Renderer.WebGL.Events
8+
* @namespace Phaser.Renderer.Events
99
*/
1010

1111
module.exports = {

src/renderer/webgl/RenderTarget.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
var Class = require('../../utils/Class');
8-
var Events = require('./events');
8+
var Events = require('../events');
99

1010
/**
1111
* @classdesc

0 commit comments

Comments
 (0)