Previously, all the internal calls to `stopOrientation` were followed by
setting the roll to zero, but this was not done when the function was called
via the API. As this roll parameter is only used for device orientation
control, there's no API method to change it, so it was previously not possible
to zero out the roll when device orientation control was stopped using
the API.
Since it was introduced, the `scale` parameter could be set to `true` to
enable dynamic scaling. In 57ca64e741bde04efb039c7d58adcdbf6693c61c, it was
modified to instead set a fixed scaling if it were set to a number, but this
didn't allow for a fixed scaling to be set on top of the dynamic scaling.
This change restores the original behavior of the `scale` parameter and moves
fixed scaling to a new `scaleFactor` parameter. This change breaks the
previous fixed scaling behavior, but this was never in a released version.
This avoids the 404 errors that would previously result.
A compact encoding is used, with `!` plus the face letter used to specify a
new face, `>` plus a base83-encoded number used to specify a new level, and a
list of base83-encoded numbers used to specify x and y tile coordinates, where
the base83 encoding uses the minimum number of characters to encode the
maximum tile number for the level in question. The base83 encoding is the same
as the one used for SHT hashes.
If the viewer is destroyed, we now try to abort loading equirectangular and
cube map panoramas. This appears to work in Chrome but not in Firefox.
No attempt is made to stop loading multires images, since that process is more
complicated.
Previously, a single multires tile level was used for the entire viewport,
which resulted in too much resolution at the center and too little at the
edges. This was particularly noticable when zoomed out all the way.
The new approach selectively loads tiles based on their individual projected
resolution, which is more efficient and should resolve long-standing
edge-softness issues.