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.
Regression caused rendering issue for cubemaps (but not multires) when CSS
fallback render was used. The regression was introduced as an optimization in
5eab5366f6.