Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Globe: bugfixes: raster layer & projection change #4546

Merged
merged 13 commits into from
Aug 13, 2024

Conversation

kubapelc
Copy link
Collaborator

This PR fixes several bugs:

  • Raster layers on globe were sometimes warped or deformed, and by different amounts depending on zoom level, making the warping especially visible when transitioning between eg. zoom level 8 and 9. This behaviour can still be observed in the public demo at this time. This was caused by the textured quad mesh used for raster layers not being subdivided enough. Added separate subdivision settings for raster layers (fixed the already present bug ignored setting) and stencil masks.
  • Fixed that the globe would not load additional tiles after the automatic globe-mercator transition inside globe projection.
  • Fixed some globe examples that were using the old API to set globe projection.

obrazek

@codecov-commenter
Copy link

codecov-commenter commented Aug 12, 2024

Codecov Report

Attention: Patch coverage is 88.46154% with 3 lines in your changes missing coverage. Please review.

Project coverage is 87.61%. Comparing base (06c19e0) to head (dd9c0c7).

Files Patch % Lines
src/geo/projection/globe.ts 70.00% 2 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##            globe    #4546      +/-   ##
==========================================
+ Coverage   86.66%   87.61%   +0.95%     
==========================================
  Files         262      262              
  Lines       37028    37042      +14     
  Branches     2482     2385      -97     
==========================================
+ Hits        32089    32456     +367     
+ Misses       3831     3520     -311     
+ Partials     1108     1066      -42     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@HarelM
Copy link
Collaborator

HarelM commented Aug 12, 2024

The globe branch has a failing test due to recent changes.
I've checked the images and they are almost the same, so they can be updated.
Any chance you can handle this? Sorry to throw it on you...

@kubapelc
Copy link
Collaborator Author

No problem, I added the new image.

The raster-warped test (a different test that what failed now) is also very inconsistent, it seems to render differently by half a pixel every time, which is bad, since it is also trying to measure a distortion that is also only a few pixels different. Maybe carefully changing the difference threshold is a good idea here? It also renders with what seems like different zoom level on Linux, and I have no idea why...

type: 'globe', // Set projection to globe
});
map.setSky({
'atmosphere-blend': 0.0, // Disable sky
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should probably fix that, it should be setSky(undefined) or something similar, but I think it's not working.
Also in general, if we haven't set the atmosphere in the style there shouldn't be any, shouldn't it?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be solved outside the scope of this PR.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, setSky(undefined) seems to be broken, and the default is that sky/atmosphere is active.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is also a problem in main, not just this branch.
I'm not sure what's causing this, as it looks like setting sky to undefined should work.
Maybe there's a need to "clear" the sky mesh in case the sky is undefined here:

if (this.style.stylesheet?.sky) drawSky(this, this.style.sky);

Not sure though...

@HarelM
Copy link
Collaborator

HarelM commented Aug 12, 2024

Let me know how you want to handle the above setSky and I'll merge or wait accordingly.
Thanks for all the hard work!

@kubapelc
Copy link
Collaborator Author

You can go ahead with the merge, I looked at the code that gets called in map.setSky and I don't know what to change to make passing in undefined work.

@HarelM HarelM merged commit 7f3220f into maplibre:globe Aug 13, 2024
13 checks passed
@HarelM
Copy link
Collaborator

HarelM commented Aug 22, 2024

I've fixed the set sky to undefined in #4587.
Let's make sure we remember to remove the atmosphere blend after we merge the fix.

HarelM added a commit that referenced this pull request Sep 30, 2024
* Globe - basic infrastructure, raster layer adaptation for globe (#3783)

* Port changes from main globe branch - basics

Fix minor issues so that it compiles.

* Fix PI redefinitions

* Fix stencil shader

* Port adaptation of raster layer for globe from main globe branch

* Add globe.html example from pheonor's repo

Minor changes (remove terrain, set initial zoom 0, change title and description)

* Better map projection parameter doc comment, warn when using unknown projection

* Mercator projectionData handles negative zoom correctly

* Comment clarification

* Fix spelling of "granularity"

* Add missing docs

* Convert ProjectionBase to an interface

* Do not leak GL object in globe projection error measurement, add a destroy method to projection

* Fix chrome performance warning, refactor error measurement

Warning fixed by changing ring buffer size to 1, making ring buffer pointless, so I removed it.

* Fix granularity capitalization

* Fix capitalization

* Fix typo

* Fix stencil mask triangle index order (this was causing failing render tests)

* Cleanup vertex shader projection interface

* Move projection creation function into its own file

* Remove getProjectionName

* Added comment for deduplicateWrapped

* Remove unused vertex-buffer-related code from image source

* Add globe raster layer render test

* More render tests - test transition to mercator

* Remove pointless test, add test descriptions

* Render test for rendering poles on globe

* SubdivisionGranularitySetting constructor takes an object

* Remove "defines" parameter from useProgram

* Refactor useProgram and Program constructor

* Properly format translatePosMatrix comment

* Refactor globe-specific code outside projection classes, remove stencil-specific granularity settings

* Refactor granularity settings to be more readable

* Minor refactor of ProjectionErrorMeasurement

* Refactor draw_raster.ts

* Move globe utility functions to utils.ts, use easeCubicInOut instead of smoothStep

* Simplify imports in globe.ts

* globe.ts refactor

* Move ProjectionErrorMeasurement to a separate file

* Refactor ProjectionErrorMeasurement

Change parseRGBA8float to a private static function, use isWebGL2 function instead of instanceof

* Refactor draw_raster.ts

* Refactor globe projection error measurement to not use Painter

* Painter.clearStencil creates custom ProjectionData instead of calling getProjectionData(null, null)

* Remove "deduplicateWrapped" functionality from source_cache.ts

* Globe projection no longer requires a map instance

* Painter doesn't pass `this` to `updateGPUdependent`

* isRenderingDirty is now a function

* Rename ProjectionBase to Projection

* Replace globeView property with setGlobeViewAllowed

* Add mercator and globe projection unit tests

* Remove tests that test for exact clipping planes

* Update build test with new bundle size

* isRenderingDirty is now a function

* Globe - fill layer (#3882)

* Port changes from main globe branch - basics

Fix minor issues so that it compiles.

* Fix PI redefinitions

* Fix stencil shader

* Port adaptation of raster layer for globe from main globe branch

* Add globe.html example from pheonor's repo

Minor changes (remove terrain, set initial zoom 0, change title and description)

* Better map projection parameter doc comment, warn when using unknown projection

* Mercator projectionData handles negative zoom correctly

* Comment clarification

* Fix spelling of "granularity"

* Add missing docs

* Convert ProjectionBase to an interface

* Do not leak GL object in globe projection error measurement, add a destroy method to projection

* Fix chrome performance warning, refactor error measurement

Warning fixed by changing ring buffer size to 1, making ring buffer pointless, so I removed it.

* Fix granularity capitalization

* Fix capitalization

* Fix typo

* Fix stencil mask triangle index order (this was causing failing render tests)

* Cleanup vertex shader projection interface

* Move projection creation function into its own file

* Remove getProjectionName

* Added comment for deduplicateWrapped

* Remove unused vertex-buffer-related code from image source

* Add globe raster layer render test

* More render tests - test transition to mercator

* Remove pointless test, add test descriptions

* Render test for rendering poles on globe

* SubdivisionGranularitySetting constructor takes an object

* Remove "defines" parameter from useProgram

* Refactor useProgram and Program constructor

* Properly format translatePosMatrix comment

* Refactor globe-specific code outside projection classes, remove stencil-specific granularity settings

* Refactor granularity settings to be more readable

* Minor refactor of ProjectionErrorMeasurement

* Refactor draw_raster.ts

* Move globe utility functions to utils.ts, use easeCubicInOut instead of smoothStep

* Simplify imports in globe.ts

* globe.ts refactor

* Move ProjectionErrorMeasurement to a separate file

* Refactor ProjectionErrorMeasurement

Change parseRGBA8float to a private static function, use isWebGL2 function instead of instanceof

* Refactor draw_raster.ts

* Refactor globe projection error measurement to not use Painter

* Painter.clearStencil creates custom ProjectionData instead of calling getProjectionData(null, null)

* Remove "deduplicateWrapped" functionality from source_cache.ts

* Globe projection no longer requires a map instance

* Painter doesn't pass `this` to `updateGPUdependent`

* isRenderingDirty is now a function

* Rename ProjectionBase to Projection

* Replace globeView property with setGlobeViewAllowed

* Add mercator and globe projection unit tests

* Remove tests that test for exact clipping planes

* Update build test with new bundle size

* isRenderingDirty is now a function

* Fill, fill-extrusion, line layers, subdivision: Import changes from kubapelc/globe-vector branch

* Fix unit tests

* Subdivision: ensure consistent triangle winding order, fix unit tests

* Fix terrain

* Fix fill extrusion not working with terrain

* Fix typos

* Fix line gradient bug

* Subdivision: fix line ring handling

* Subdivision: fix unit test expecting an invalid line segment

* Fix fill-extrusion ring handling

* Fill-extrusion refactor and fix failing test

* Update terrain fill extrusion test expected image

* Render tests for fill, line and fill-extrusion for globe

* Move fillArrays function into a separate file

* Add vector globe example

* Remove changes for line and fill-extrusion layers to make the PR smaller

* Add unit tests for fillArrays()

* fillArrays unit test has better segment size limits

* Update build test build size

* Fix html example description

* Fix missing docs for granularity settings

* Rename globe fill render test tile source layer to "vector_tiles"

* Fix classifyRings comment format

* Move subdivisionGranularitySettingsNoSubdivision constant to a static readonly field, shorten the name

* Use `import type` for SubdivisionGranularitySetting where possible

* Fix typo

* Revert fill_attributes back to default exports

* Improve comment for scanline subdivision

* Subdivision: break up scanline subdivision function into more functions

* Move SubdivisionGranularitySetting into its own file

* Unit tests: use mock of MercatorProjection instead of the full class

* Add SegmentVector unit tests

* Subdivision: unit tests for poles, ring triangulation, fix bug in ring triangulation

* Subdivision: more pole unit tests

* Subdivision: fix wireframe generation, add unit test for wireframe

* Rename subdivisionGranularitySettings.ts to subdivision_granularity_settings.ts

* Move granularity settings registration to subdivision

* Update build size

* Rename `fillArrays` to `fillLargeMeshArrays`

* Move virtual buffers to a test util file

* Better warning for segments.ts vertex overflow

* Better comment for projection subdivision granularity

* Clarify mesh comparison in fill_large_mesh_arrays.test.ts

* Move mesh creating functions into a separate file, add tests for mesh comparison and grid creation

* Refactor and add better doc comment for `fillLargeMeshArrays`

* Refactor fill_large_mesh_arrays by removing duplicated code

* Move debug functions to mesh_utils.ts

* Unit tests: use StructArrays instead of VirtualVertexBuffer, etc.

* Subdivision: refactor

* Subdivision: rename subdivideFill to subdividePolygon, remove wireframe function

* Subdivision: throw when a vertex is outside int16 range

* Subdivision: refactor generatePoleQuad into a proper function

* Subdivision: add subdivision benchmark

* Subdivision: split scanline subdivision into smaller functions

* Remove wireframe generation function

* Subdivision: better doc comments for scanline subdivision

* Fix 'as any' in segment.ts

* Reuse condition in fill_large_arrays

* Deduplicate code in fill_large_arrays

* Subdivision: remove redundant function in tests

* Subdivision: improve scanline subdivision comments

* Subdivision: benchmark is not async

* Rename SegmentVector's invalidateLast to forceNewSegmentOnTextPrepare

* More tests for segment.ts

* Fix typo in forceNewSegmentOnNextPrepare

* Subdivision: more tests for fillLargeMeshArrays

* Subdivision: better comment in fillLargeMeshArrays

* Fix build due to bad merge.

* Globe - line layer (#3961)

* Fix merge

* Import line layer changes from kubapelc/globe-vector

* Lines: shorten line_bucket.test.ts subdivision settings

* Lines: minor refactor

* Lines: update build size

* Lines: minor refactor

* Globe - fill extrusion layer (#3968)

* Import changes for fill-extrusion from main vector globe branch

* Fill extrusion: refactor

* Fill extrusion: indent shader ifdefs

* Fill extrusion: add example

* Fill extrusion: update build size

* Move globe specific projection methods to projection interface

* Fix failing unit test

* Use vec3.clone() instead of manually copying vector components

* Kubapelc/globe pr hillshade (#3979)

* Import background layer changes from main vector globe branch

* Import hillshade layer changes from main vector globe branch

* Subdivision: explicit types

* Fix single-pixel seams in the oceans

* Add render test for background pattern on globe

* Refactor drawBackground

* Refactor drawHillshade

* Update build size

* Update globe background-pattern render test with results from CI

* Hillshade: refactor prepareHillshade

* Add a render test for fill layer seams fix

* Globe - circle and heatmap layers (#4015)

* Import changes for circle and heatmap layers from the main vector globe branch

* Minor refactors

* Update build size

* Use "/ 8.0" in shader instead of "* 0.125"

* Update shader comments

* Use a thin type instead of full Transform in projection

* Only import types in projection.ts

* getPixelScale and getCircleRadiusCorrection only need map center as argument

* Only import types where possible in projection classes

* Smaller refactors

* Fix failing unit test

* Add heatmap render test

* More explicit types in projection interface

* Globe plane equation is a vec4

* Fix wrong args in projection functions

* Improve readibility of build test and fix it.

* Globe - symbols & symbol bugfixes (#4067)

* Import changes from main vector globe branch

* Fix import

* Remove unused code

* Remove unused imports

* Update build size test

* Remove unused function

* Add render test results for Debian

* Add another Debian render test variant

* Add more render test variants

* Hide collision boxes on the backfacing side of the globe

* Fix pitch-aligned texts getting hidden when their anchor is beyond horizon

* Update build size

* Fix merge

* Better comment in draw_collision_debug

* Update build size

The 10 kb size increase seems to come from the main branch

* Minor refactor

* Use explicit types, even for unused parameters

* Refactor screenspace path projection

* Refactor imports for projection.ts and collision_index.ts

* Fix import in collision_index.ts

* Globe - example images (#4140)

* Add example images

* Add "-" into example name

* Remove basic globe example

* Globe - clipping fix (#4146)

* HiSilicon fix: enable face culling whereever possible

(cherry picked from commit fe439a5)

* Improve circle layer performance by discarding empty pixels

(cherry picked from commit 266897d)

* HiSilicon fix: software clipping of polygon outlines

(cherry picked from commit 98167ba)

* HiSilicon fix: software clipping for line layer

(cherry picked from commit d521e95)

* HiSilicon fix: circle software clipping

(cherry picked from commit f2ed744)

* HiSilicon fix: enable backface culling for symbols

(cherry picked from commit 54e3632)

* Update build test

* Fix terrain using a mirrored projection matrix

* Fix typos

* Fix terrain coord textures being flipped vertically

* Update build size

* Fix rendering of images with face culling, fix image rendering near pole regions

* Add render test for images on a globe

* Update comment in circle.vertex.glsl

* Fix bad merge

* Fix lint

* Fix location of old vertex count

* replace expected file for terrain changes

* Fix rename in main merge branch

* Fix build test

* Move projection to style class (#4267)

* Move projection to style class

* Fix lint

* Fix unit tests

* Increase build size

* Update docs, fix test

* Fix lint

* Add test to cover projection change

* Added more tests

* Add an Atmosphere layer for Globe (#3888) (#4020)

* Port of PoC atmosphere layer.

* Fix resize for draw_atmosphere

* Add some options.

* Allow to change sun date and time

* Fix import warning

* Render atmosphere only when a Globe projection is selected

* Add some comments

* Add some comments

* Change key

* Update changelog

* Fix merge with globe branch

* Fix documentation and default background color.

* Use black clear color only when atmosphere is on

* Use atmosphere uniform for globe position, raidus in camera frame and inv projection matrix.

* Remove unused project method

* Update maplibre-gl-style-spec to 20.3.0 and use sky atmosphere parameter

* Fix globe tests and use light position as Sun position.

* Avoid type name collisions.

* Add atmosphere test for globe projection.

* Update expectedBytes for build test.

* Fix PR comments.

* Update Style test.

* Remove unused method on projection

* Add Sky Test.

* Fix style test and add sky unit test.

* Move getSunPos method

* Fix mercator updateProjection

* Remove isGlobe method and fix merge.

* Fix globe atmosphere tests with new projection style.

* Clean-up some projection and light. Fix setSky and add tests.

* Remove sky test during update.

* Clean-up

* missing fix from merge

* Fix lint

* Terrain fix (#4343)

* Fix missing image for globe example

* Update atmosphere (#4345)

* Merge Sky and Atmosphere code.

* Update changelog

* Fix generate-struct-arrays

* Globe - transform+projection changes (#4341)

* Delete unused file

* Rename projection.name to projection.projectionName

Since this interface will be implemented by the transfrom class soon

* Symbols: displayed collision circles now exactly match their computed positions

* Globe: use mercator projection for symbol placement when globe rendering is disabled

* Group all getters/setters in the transform class

* Transform: move transform-related stuff from the projection interface to transform class

(WIP)

* Transform: finish moving parts of projection into mercator_transform.ts

* Transform: remove posMatrix usage from line symbol placement

(WIP)

* Transform: temporarily remove globe stuff

(WIP, compilable)

* Transform: fix line symbols

* Symbols: fix wrong function names

* Fix line point projections

* Fix line rendering

Some things are still broken

* Fix line symbols sometimes being incorrectly oriented

* Fix some failing unit tests

* Fix single glyph orientation

* Add another image to render test

No idea why it is shifted by a few pixels but I assume that the new expected image is also correct

* Add another expected image to textFit-grid-long test

It was only failing on my machine, works fine in github CI windows tests

* Fix some failing unit tests

* Simplify getProjectionData interface and terrain matrix passing

* Change comment at calculatePosMatrix

* Fix symbols not rendering, remove unused shader parameters

* Bring back globe src files

* globe.test.ts is now globe_transform.test.ts

* Move stuff from globe.ts to globe_transform.ts

* Fix showTileBoundaries not working

Fix the three render tests related to showTileBoundaries timing out.

* Remove irrelevant test

* Fix failing unit test

* Transform: move more stuff from globe to globe_transform

* Transform: better comments

* Transfrom: isRenderingDirty cleanup

* Transform: no more errors in globe_transform.ts

* Transform: remove `get point()` from transform class

* Transform: globe_transform.ts is compilable

* Re-enable globe projection

* Fix source_cache.ts sometimes crashing

* Fix globe.ts - globe_transform.ts circular dependency

* Fix and refactor getProjectionData interface

Now it is actually compilable, with many bugs

* Transform: fix failing unit tests

* Transform: fix symbols not rendering on globe

* Transform: minor fixes

* Transform: update globe symbol render tests

* Transform: unify how symbol/projection.ts exports stuff

* Transform: improve comments

* Remove unused function in painter

* Transform: cleanup unneeded abstract functions

* Transform: replace abstract getHorizon function with more generic isPointOnMapSurface function

* Fix useGlobeRendering not being set properly

* Transform: proper implementation of isPointOnMapSurface and screen pixel unprojection for globe

* Transform: adapt more functions for globe

* Transform: fix locationPoint implementation

* Controls: globe panning experiments

* Controls: reasonable globe panning

* Controls: centering zoom for globe experiment

* Transform: fix globe unit tests

* Transform: fix remaining unit tests

* Move mercator_transform.test to src/geo/projection

* Transform: globe bugfixes and more unit tests

* Transform: bugfix globe setLocationAtPoint

* Transform: isolate accesses to globe projection to avoid unintentional transform's state changes

* Transform: move related tests so they are near each other

* Transform: improve globe unprojection accuracy

* Transform: fix globe bugs

* Transform: move globe unit tests

* Transform: another globe setLocationAtPoint implementation

* Transform: fix globe zoom adjustment not working

* Transform: fix setLocationAtPoint

* Transform: setLocationAtPoint and zoom WIP

* Transform: adjust unit test to accept positive longitudes

* Transform: improve globe math precision (fp64)

* Transform: precision improvement, better camera position

* Transform: another test WIP

* Transform: fix setLocationAtPoint condition

* Transform: more reasonable zoom for globe

Still has bugs though

* Transform: globe zoom works well when cursor is outside the globe

* Transform: globe more consistent zoom logic

* Transform: experimental pole edge clamp for globe

* Transform: fix maxLatitudeForZoomLevel math

* Transform: globe constrain experiment

* Transform: minor improvements

* Transform: globe panning 2.0

* Transform: globe panning 2.1

Adjust more constants!

* Transform: some math for globe zoom

* Transform: globe: working zoom controls without glitches

* Transform: globe zoom: fix some more glitching

* Transform: globe zoom: reduce panning when zoom pixel is far from the planet

* Transform: zoom globe: simplify, better behaviour around poles

* Transform: globe zoom: exact zooming

* Transform: globe zoom: better comments

* Transform: temporarily disable camera easeTo and flyTo

* Transform: calling project/unproject on a globe should fail, rename project/unproject to be more descriptive

* Transform: fitBounds: initial implementation for globe_transform

Not working

* Transform: fitBounds: zoom is now correct

* Transform: fitBounds: padding works for north/south

* Transform: fitBounds: just build on top of mercator code

* Transform: fitBounds: the original way

* Transform: fitBounds: back to mercator-buildon + done

* Transform: tighter bounds for zoom heuristic transition

* Transform: easeTo: probably works

* Transform: attempt to handle camera options apparent zoom for globe

* Transform: easeTo fixes WIP

* Transform: easeTo: mostly working implementation (still WIP)

* Transform: easeTo: small fixes

* Transform: easeTo: intertia works for panning

* Transform: globe zoom: add globe radius based slowing factor

* Transform: globe zoom adjustments

* Transform: jumpTo adapted for globe

* Transform: camera flyTo works for globe

* Make (un)projectToWorldCoordinates into standalone functions

* Fix inertia sometimes rotating in the wrong direction

* Fix transform center sometimes not getting wrapped, leading to visual artifacts

* Transform: easeTo: slerp experiment

* Transform: easeTo: revert slerp, add note on why it is not used

* Transform: improve center animation for easeTo and flyTo

* Minor refactor & remove some outdated TODOs

* More refactor and TODOs

* Transform: globe remembers its globeness state after clone, fixes improper collision box when globe gets soft-disabled

* Terrain matrix refactor WIP

* Terrain fixes

* Transform: better comments, rename angularCoordinatesToVector to angularCoordinatesToSurfaceVector, some functions for globe WIP

* Transform: getBounds for globe works

* Transform: remove some comments

* Fix merge

* Remove globe.test.ts (it is now globe_transform.test.ts)

* Rename Transform.updateProjection to newFrameUpdate

* Revert globe.ts to pre-merge state

* Revert mercator.ts to pre-merge state

* New mechanism for creating specialized transforms, more merge fixes

* Rename projectionMatrix to modelViewProjectionMatrix, refactor mercator_transform.ts a bit

* More merge fixes, minor refactor of transforms

* Add transform getters for atmosphere

* Fix forgotten useGlobeControls uses

* Fix cyclical dependency

* Fix tests

* Fix crashes

* Fix manually triggered globe transition animation

* Fix collision boxes not respecting mercator transition

* Blend out atmosphere when transitioning to mercator

* Fix globe transitions when mercator should be constrained

* Reload all tiles upon projection change

* Fix failing style tests

* Fix terrain source cache tests

* Fix map zoom&center being applied in wrong order, causing zoom to be wrongly constrained under globe

* Update globe pole render tests with correct zoom

* Update globe unit test zooms

* Fix more unit tests

* Fix transform.apply not copying everything, fix globe controls not wrapping longitudes

* Fix some globe tests

* Fix globe setLocationAtPoint

* Fix docs & lint

* Increase globe setLocationAtPoint test desired precision

* Some camera tests for globe

* Fix easeTo test suite name and placing

* Add rotated setLocationAtPoint test for globe, fix failing test

* Fix globe easeTo & flyTo with bearing to follow spec, add tests

* easeTo globe tests

* All relevant camera tests for globe implemented

* Update build size test

* Fix symbols not respecting mercator

* Update build size again

* Terrain fix

* Fix merge

* Fix terrain shaders

* Fix merge

* Revert controls changes

* Fix reverted files

* Fix reverted camera tests

* Revert forgotten file, fix lint

* Update build size

* Feedback comments for unit tests

* Convert setters to functions: runtime code

* Convert setters to functions: test code

* Convert last setter to function

* Fix some tests

* Transform is now an interface

* Rename Transform to ITransform

* Remove abstract functions from transform base class

* TransformHelper wip

* Rename transform files

* Finish transform rewrite

* Fix mercator transform tests

* Fix mercator_transform constructor

* Fix symbol bucket test

* Fix source cache tests

* Fix transform clone bug & tests

* Improve comments

* More comments

* Fix import

* Move helper functions in tests to beginning of file

* Fix collision index test accessing a private field

* Remove unneeded null check

* New utils tests + quadratic solve fix

* Add remapSaturate tests

* Add explicit types to line glyph placement

* Refactor placeGlyphsAlongLine args into an object

* Fix merge, cleanup draw_custom.test, fix missing perspective offset in globe transform

* Fix draw_custom test

* Update build test

* Fix crashes

* Fix transform_helper apply function not setting bearing correctly

* Add test for TransformHelper

* Fix TransformHelper.apply

* Fix flipped text placement

* Add new expected image to render test

* Fix marker tests

* Update build size

* Move functions from mercator_transform.ts to mercator_utils.ts

* Refactor un/projectToWorldCoordinates function args

* Make zoomScale and scaleZoom standalone functions

* Fix unprojectFromWorldCoordinates arg type

* Move globe functions to separate file

* Fix private member access in source_cache.test.ts

* Fix deck.gl missing dot

* Fix missing globe_utils.ts

* Better `angleToRotateBetweenVectors2D` doccomment

* Remove unneeded `protected`

* Cleanup transform interface and remove duplicate comments

* Split mercator_utils tests into a separate file

* Fix tests

* Split globe locationPoint tests a bit

* Add more mercator tests

* More globe tests

* Fix globe getBounds and add tests for it

* Remove unneeded function, update build size

* projectTileCoordinates for globe now covered by test

* Add globe_utils tests

* Split up globe tests more

* Fix missing doccomment

* Rename transform's projection/unprojection functions

* Better ray intersection comment and type

* Reduce indentation

* Improve unproject math readability

* Add point-plane distance util function

* Move tileCoordinatesToMercatorCoordinates to mercator_utils

* Better name for location to mercator coordinate functions

* Move angleToRotateBetweenVectors2D to utils

* Refactor _globeness usage

* Remove _initialized from GlobeTransform

* Remove translatePosition from transform interface

* Add IReadonlyTransform interface

* Update build size

* Remove unneeded comment

* Fix painter test

* Fix lint

* Update test/build/min.test.ts

* Update changelog

* Globe - camera controls (#4408)

* Camera controls changes from dev branch

* Move stuff from globe_control_utils to globe_utils

* Better globe_utils comments

* Fix markers not being updated when globe is toggled

* Fix globe tests

* Update build size

* Better comments for camera helper functions

* Move camera helper functions to beginning of file

* Camera: more and better comments

* Update build size

* Fix globe transform error correction handling

* Better comments for _last* fields in globe transform

* Refactor newFrameUpdate

* Better comments for CoveringTilesOptions type members.

* Refactor globe camera tests to use more describe statements

* Remove isTilePositionOccluded function from transform interface

* Fix camera tests

* Add more mercator_utils test

* Add more globe_transform tests

* Fix failing render tests

* Make camera helper functions static

* Remove `around` from flyTo options.

* Update build size

* CameraHelper: initial implementation, inertia handling

* Move createVec* functions to util.ts

* CameraHelper: panning and zooming

* CameraHelpers: implement cameraForBounds

* CameraHelpers: handle jumpTo

* CameraHelper: easeTo

* CameraHelper: flyTo

* Projection event contains new projection name and is fired by changing style's projection

* Fix lint

* Fix test camera/map not having proper CameraHelper

* Fix easeTo not emitting zoom events

* Fix cameraForBoxAndBearing globe not returning anything, rename camera helter types

* Fix globe easeTo ignoring offset

* Fix one flyTo test not creating camera properly

* Update build size

* Add projection transition event tests

* Add example on how to compensate for how globe size changes with latitude

* Revert scrollzoom delete removal

* Remove apparentZoom parameter

* CameraHelper is set in camera constuctor

* Use spy for projection event unit tests

* Remove unnecessary done() in tests

* Update build size

* Remove more unneeded done() calls

* Do not use map.once callback in projection events tests

* Better zoom delta example title and description

* Rename globe zoom delta and planet size function example

* Add zoom planet size function example image

* Reduce size of some globe example images using compresspng

* Globe: bugfixes: raster layer & projection change (#4546)

* Port bugfix changes

* Update build size

* Fix render tests

* Add render test result for debian

* Increase raster tile granularity some more

* Adjust warped raster tile render test

* Add missing tsdoc param

* Use single checkerboard image for render test

* Globe examples now use setProjection

* Add new raster-pole render test image

* Add another raster-warped expected image

* Use "style.load" event on map instead of on style

* Adapt new heatmap code for globe, update build size

* Fix render tests

Most tests had subpixel shifts

* Globe - custom layers API and examples, globe dev guide (#4577)

* Port custom layer changes and globe docs

* Port transform changes

* Fix custom layer unit test

* Fix failing render tests

* Update build size

* Update globe custom layer example descritions, remove forgotten code

* Remove unused util function

* Incorporate globe docs feedback

* Refactor and expose tile mesh generation

* Refactor custom layers to get smaller args object and access map transform directly

* Simplify more of the custom layer API

* Clean up and adapt more examples

* Fix mercator matrix precision

* Fix 3D model on terrain example

* Rename projectionDataForMercatorCoords to defaultProjectionData

* Document ProjectionData type

* Update build size

* Update developer-guides/globe.md

Co-authored-by: Harel M <harel.mazor@gmail.com>

* Decouple ProjectionData from rendering code

Rename fields to camelCase, move it to a separate file

* Rename ProjectionData members

* Fix mercator transform unit tests

* Add an example to createTileMesh

* Rename CustomRenderMethodInput.shader to shaderData

* Add shaderData examples

* Document TileMesh and CreateTileMeshOptions types

* Fix custom layers in render tests

* Update render tests

Fails other than raster-warped were caused by increasing pos matrix precision in mercator_transform to 64 bit floats

* Add render test result from linux

* Update build size

* Update src/render/program/projection_program.ts

Co-authored-by: Harel M <harel.mazor@gmail.com>

* Rename createTileMeshInternal to createTileMeshWithBuffers

* Update build size

* Improve doc comments

---------

Co-authored-by: Harel M <harel.mazor@gmail.com>

* Globe - Covering tiles (#4615)

* Import coveringTiles changes from dev branch

* Remove duplicated tiles used in render tests

* Remove unused function

* Fix typo

* Properly handle tile wraps and LOD across antimeridian

* Discard previous changes and use custom wrap values instead

* Update build size

* Add render test for LOD at antimeridian

* Convert visibility numbers to enum

* Refactor globe covering tiles into a separate file

* Add yet another raster-warped expected image

* Add unit tests for globe covering tiles

* Refactor globe coveringTiles math to assume worldSize=1 instead of tileSize=1

* Split globe coveringTiles into more functions

* Explain radiusOfMaxLvlLodInTiles value

* Explain why checking 4 tile corners is (mostly) enough to construct an AABB.

* Move mercator coveringTiles into a separate file

* Yet another raster-warped expected image

* Remove ITileVisibilityProvider interface

* Use explicit types

* PR feedback

* Rename coveringTiles stack types

* fix typo

* Remove sky disabling in examples as this is no longer needed.

* Fix spelling

* Fix spelling - unencode

* Fix more spelling

* Fix lint

* Update CHANGELOG.md

---------

Co-authored-by: Jakub Pelc <57600346+kubapelc@users.noreply.github.com>
Co-authored-by: Larrieu Vivian <vivian.larrieu@gmail.com>
Co-authored-by: Jakub Pelc <jakub.pelc@email.cz>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants