Skip to content

Commit 39da67d

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 2237e7e commit 39da67d

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) {
@@ -3171,13 +3172,17 @@ define([
31713172

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

31823187
return true;
31833188
}
@@ -3309,10 +3314,8 @@ define([
33093314
tryAndCatchError(this, time, update);
33103315
this._postUpdate.raiseEvent(this, time);
33113316

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

0 commit comments

Comments
 (0)