Skip to content

Commit 3fa9b0e

Browse files
author
Luke San Antonio Bialecki
committed
Treat frustum changes as camera changes in Scene#render
Before this change, the user could update the frustum but not the camera by resizing the viewer. The Scene would continue to render even when requestRenderMode was enabled because it recognized the frustum had changed, but would not update the cached camera to mark the change as handled. This commit changes cameraEqual (in Scene.js) to take into account the camera frustum. Fixes CesiumGS#6812
1 parent c7a1b0c commit 3fa9b0e

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

Source/Scene/Scene.js

+9-6
Original file line numberDiff line numberDiff line change
@@ -1488,7 +1488,8 @@ define([
14881488
Cartesian3.equalsEpsilon(camera0.direction, camera1.direction, epsilon) &&
14891489
Cartesian3.equalsEpsilon(camera0.up, camera1.up, epsilon) &&
14901490
Cartesian3.equalsEpsilon(camera0.right, camera1.right, epsilon) &&
1491-
Matrix4.equalsEpsilon(camera0.transform, camera1.transform, epsilon);
1491+
Matrix4.equalsEpsilon(camera0.transform, camera1.transform, epsilon) &&
1492+
camera0.frustum.equalsEpsilon(camera1.frustum, epsilon);
14921493
}
14931494

14941495
function updateDerivedCommands(scene, command) {
@@ -3172,13 +3173,17 @@ define([
31723173

31733174
function checkForCameraUpdates(scene) {
31743175
var camera = scene._camera;
3175-
if (!cameraEqual(camera, scene._cameraClone, CesiumMath.EPSILON15)) {
3176+
var cameraClone = scene._cameraClone;
3177+
3178+
scene._frustumChanged = !camera.frustum.equals(cameraClone.frustum);
3179+
3180+
if (!cameraEqual(camera, cameraClone, CesiumMath.EPSILON15)) {
31763181
if (!scene._cameraStartFired) {
31773182
camera.moveStart.raiseEvent();
31783183
scene._cameraStartFired = true;
31793184
}
31803185
scene._cameraMovedTime = getTimestamp();
3181-
Camera.clone(camera, scene._cameraClone);
3186+
Camera.clone(camera, cameraClone);
31823187

31833188
return true;
31843189
}
@@ -3310,10 +3315,8 @@ define([
33103315
tryAndCatchError(this, time, update);
33113316
this._postUpdate.raiseEvent(this, time);
33123317

3313-
this._frustumChanged = !this._camera.frustum.equals(this._cameraClone.frustum);
3314-
33153318
var cameraChanged = checkForCameraUpdates(this);
3316-
var shouldRender = !this.requestRenderMode || this._renderRequested || cameraChanged || this._frustumChanged || this._logDepthBufferDirty || (this.mode === SceneMode.MORPHING);
3319+
var shouldRender = !this.requestRenderMode || this._renderRequested || cameraChanged || this._logDepthBufferDirty || (this.mode === SceneMode.MORPHING);
33173320
if (!shouldRender && defined(this.maximumRenderTimeChange) && defined(this._lastRenderTime)) {
33183321
var difference = Math.abs(JulianDate.secondsDifference(this._lastRenderTime, time));
33193322
shouldRender = shouldRender || difference > this.maximumRenderTimeChange;

0 commit comments

Comments
 (0)