Before this change, the `GeoJSONVTData` instance was retained at the scheduled
lambda, which run on the worker thread represented by the `GeoJSONVTData::scheduler`
class member:
```
std::weak_ptr<GeoJSONVTData> weak = shared_from_this();
scheduler->scheduleAndReplyValue(
[id, weak, this]() -> TileFeatures {
if (auto self = weak.lock()) {
return impl.getTile(id.z, id.x, id.y).features;
}
return {};
},
fn);
```
It caused program termination in case `self` turned to be the last reference to `this`,
as the `std::thread` destructor was called from the thread it represented.
Now, only the `GeoJSONVTData::impl` class member is retained.
* [android] Add getVisibleCoordinateBounds method.
* Fix Map::latLngBoundsForCamera, add Android binding for getVisibleRegionBounds.
* Add unit tests for CameraToLatLngBoundsWithRotation and CameraToLatLngBoundsCrossDateLine.
* Move API breaking changes to a new method name latLngBoundsForCameraUnwrapped.
The style specification stipulates that `text-size` values must be positive
(https://docs.mapbox.com/mapbox-gl-js/style-spec/#layout-symbol-text-size).
However, a zero value could be passed to the engine (e.g. as a result of
an expression) this patch handles it and avoids assertion hit in `shaping.cpp`.
Repurpose LatLngBoundsToCameraWithBearingAndPitch to test scaling and camera setup, both with and without padding.
This adds testing of path not covered in mapbox/mapbox-gl-native-ios#59.
- Generate style code for 'line-sort-key' and 'symbol-sort-key'
- Add new layout properties to FillLayer::Impl, FillBucket, and FillLayerFactory
- Fix consistency of paint and layout properties type alias usage in FillBucket, LineBucket
- Add optional feature sorting to fill and line Layout creation
- Enable node render tests for fill-sort-key and line-sort-key
- Fix FillBucket test construction
- Prefer emplace_back to push_back for PatternFeature container
- Fix buggy static_cast for PatternFeature indices
- Maintain sort of features as they are created
- Switch pattern layout features container to list from vector for better insert performance
- Fix formatting expected by sanity check
- Use subclass PatternLayoutSorted to work around lack of template functions
- Fix to retain source order for features with equivalent sort keys during sorting
- [core] Fix clang-format
- [core] Address review comments
- [core] Pass inserting strategy class at compile time
- [core] Use sorted strategy only if sort key is defined in layout
- [core] Update style generator
- [core] Merge PatternLayout and PatternLayoutSorted classes
- Use static methods for inserter strategies
- Merge PatternLayout and PatternLayoutSorted classes
* [core] fix cutoff cross-tile labels in MapMode::Tile
Increase the CollisionIndex's padding so that more of a tile's data gets
considered when checking for collisions. This should fix clipped
variable placement text labels.
* [core] Refactoring transform state class
* [core] update matrix in transform, Fix precision
* [core] Make matrix mutable so that we only update them when needed
* [core] Add getters for matrices
The newly introduced `GeometryTile::reset()` is
used while GeoJSON tile update in order to prevent from the
parsing of the new data with the stale layers or vice verse.
- share the `GeoJSONOptions` instances using `Immutable<GeoJSONOptions>` - avoid extra copying
- fix wrapping of the `GeoJSONOptions` instances in supercluster map/reduce lambdas.
Previously, local variables were wrapped by reference.
The newly introduced `Scheduler::GetSequenced()` returns
sequenced schedulers from the cache limited to 10 instances,
preventing from spawning too many threads.
In https://github.com/mapbox/mapbox-gl-native/pull/15862, we introduced individual textures for line dash patterns to eliminate atlas overflows. Unfortunately, this broke dashed lines that had round caps (dashed lines with straight caps still rendered correctly). Line pattern textures for round caps were now using 256×15 pixel textures.
The OpenGL ES 2.0 spec, section 3.8.2 states:
Calling a sampler from a fragment shader will return `(R,G,B,A) = (0,0,0,1)` if any of the following conditions are true:
[…]
- A two-dimensional sampler is called, the corresponding texture image is a non-power-of-two image […], and either the texture wrap mode is not `CLAMP_TO_EDGE`, or the minification filter is neither `NEAREST` nor `LINEAR`.
[…]
This means that texture lookups won't work for NPOT textures unless they use `GL_CLAMP_TO_EDGE`. We're using `GL_CLAMP_TO_EDGE` for the vertical direction, but GL_REPEAT for the horizontal direction, which means that we need a power-of-two texture for our line dash patterns to work on OpenGL ES 2.0 conforming implementations. Fortunately, this just means changing the height from 15 to 16, and from 30 to 32, so we don't waste many pixels.