Hey everyone
I am not sure why but if I create two ScreenSpaceCanvas2D in two different scenes, one of the scenes being shown and not the other (stored in a parent object). The function Canvas2D.prototype._updatePointerInfo is called twice each time I move the mouse, once for the shown Canvas, and once for the canvas that is in the stored scene.
Since I did not declare a camera in that stored scene the bit of code in babylon.max.js 44657 :
Canvas2D.prototype._updatePointerInfo = function (eventData, localPosition) {
...
var camera = this._scene.cameraToUseForPointers || this._scene.activeCamera;
...
}
return camera as undefined.
And later on while the function tries to access camera.viewport it returns an error.
This report is not really about solving the bug because if I declare a random camera for the stored scene (like a normal human being not trying to find bugs everywhere) i do not get the error. But I think it was not on purpose that events are captured on a canvas in a scene that is not currently rendered. All in all it is not a real problem for me but it might cause trouble for other people.
To change between scenes I use this bit of code
/* --- Start the render loop --- */
taskObject.engine.runRenderLoop(function () {
taskObject.scenes[taskObject.currentScene].render();
});
This is the call stack for the error:
-
- Uncaught TypeError: Cannot read property 'viewport' of undefined @babylon.max.js:44665
-
Canvas2D._updatePointerInfo @ babylon.max.js:44665 Canvas2D._handlePointerEventForInteraction @ babylon.max.js:44628 (anonymous function) @ babylon.max.js:44549 Observable.notifyObservers @ babylon.max.js:3399 _onPointerMove @ babylon.max.js:15232
It seems the observables are set up at scene creation and down the callback chain there is no test to check wether the scene is currently being rendered (is that even possible?).