Commit Graph

3993 Commits

Author SHA1 Message Date
Konstantin Käfer
81667ae4e9 [core] end the RenderPass/CommandEncoder before sending events 2019-05-28 16:11:05 +02:00
Konstantin Käfer
12d8948c2a [core] ensure gfx::DrawScopes are unique 2019-05-28 16:11:05 +02:00
Konstantin Käfer
7f9274035b [core] refactor program object creation 2019-05-28 16:11:05 +02:00
Thiago Marcos P. Santos
33ee7e23de [core] Remove priority from the constructor
Make the constructor less verbose and set good defaults.
2019-05-28 16:30:49 +03:00
Mikhail Pozdnyakov
2f97a2660a [core] RenderTile returns textures by const reference 2019-05-28 16:16:42 +03:00
Mikhail Pozdnyakov
43966f1611 [core] Placement::placeLayerBucket() -> placeBucket() 2019-05-28 16:16:42 +03:00
Mikhail Pozdnyakov
054645042a [core] Encapsulate symbol bucket placement code in Placement::placeLayerBucket() 2019-05-28 16:16:42 +03:00
Mikhail Pozdnyakov
a03f7b166b [core] RenderTile does not expose Tile
RenderTile and Tile will be split when ochestration movces to a separate thread.

This PR improves encapsulation of Tiles management: now performed within TilePyramid.
2019-05-28 16:16:42 +03:00
Aleksandar Stojiljkovic
9809c9f8f5 [core] Offset viewport center when edge insets are specified
The change is implemented in TransformState::getProjMatrix, the rest of the code is making sure that existing API contracts stay and there are tests verifyingrendering and render query processing only items within screen and given tolerance around screen edges.

MapView: don't bake edge insets into relalculated camera center. Keep edge insets as property of camera in TransformState (similar to pitch, zoom, bearing) independent from specified camera center. Interpolate edge insets in animation.

iOS Demo app: "Turn On/Off Content Insets" pitch the camera and navigate to convenient location in Denver, where streets are parallel to cardinal directions, to illustrate viewport center offset when edge insets are set.

Tests:
ViewFrustumCulling: although Annotations are deprecated, queryRenderedFeatures related tests in Annotations would need to get ported and decided to add the edge insets related query tests next to them. Verify frustum culling (render+queryRenderedFeatures) With different camera and edge insets setups. TODO: port Annotations tests.

Transform.Padding: Verify that coordinates take proper place on screen after applying edge insets.

LocalGlyphRasterizer: verify text rendering when applying padding.

Related to #11882: both use projection matrix elements [8] and [9].

Alternative approach to this was to increase and offset map origin so that the screen would be a sub-rectangle in larger map viewport. This approach has a drawback of unecessary processing the items that are outside screen area.

Fixes #12107, #12728, navigation-sdks/issues/120
2019-05-28 14:38:01 +03:00
Aleksandar Stojiljkovic
788d54b2b4 FillBucket::triangles could be empty: skip creating buffer and draw. (#14761) 2019-05-24 17:46:57 +03:00
Alexander Shalamov
0333f3fe44 [core] Prefer breaking lines at zero width space (ZWSP) 2019-05-24 05:59:07 -07:00
Mikhail Pozdnyakov
aa3a7cf02f [core] SymbolBucket updates complete at placement stage
`RenderSymbolLayer` does not have to update dynamic vertices of its buckets, this logic is moved to placement (which is already updates opacity vertices).

* fixes clustering of labels when text variable placement enabled - as assignes `usesVariablePlacement` per bucket
* simplifies the code in `RenderSymbolLayer` (the `RenderSymbolLayer::upload()`	is now omitted).
* symbol buckets are not modified after orchestration finishes
2019-05-24 10:54:06 +03:00
Łukasz Paczos
37d9dfae69 [core] round color string's alpha to 2 decimal places 2019-05-22 16:32:04 +02:00
Łukasz Paczos
7d6255c860 [core] option to perform platform specific operations when creating/destroying core threads 2019-05-22 15:52:55 +02:00
Mikhail Pozdnyakov
e79080771b [core] RenderLayer::render(PaintParameters, RenderSource*) -> render(PaintParameters) 2019-05-22 16:41:10 +03:00
Mikhail Pozdnyakov
25093370e2 [core] RenderLayer::setRenderTiles(RenderTiles) -> prepare(LayerPrepareParameters)
RenderLayer::prepare() is responsible for the complete initialization of a render
layer, so that it can render.
2019-05-22 16:41:10 +03:00
Mikhail Pozdnyakov
84d3b5f899 [core] Prepare render sources before render layers are initialized 2019-05-22 16:41:10 +03:00
Alexander Shalamov
100eb61fa4 [core] Forward ImageManagerObserver::onRemoveUnusedStyleImages to MapObserver interface 2019-05-21 06:49:17 -07:00
Alexander Shalamov
d24524440c [core] Add onRemoveUnusedStyleImages observer API 2019-05-21 06:49:17 -07:00
Thiago Marcos P. Santos
c2f974f2a5 [core] Remove binary shader support
The implementation is buggy and not worth maintaining anymore
because performance benefits are not substantial or sometimes
worse. Also, removing it saves about 150 ~ 180 KB in binary size.

Below timings are averages of minimum 5 runs.

```
Device          Init launch     Average relaunch
s10             1129.8 ms       700 ms
s10 - binary    1346.75 ms      694 ms
Pixel           1692 ms         723 ms
Pixel - binary  1883 ms         1039 ms
Kazam           17948 ms        1339 ms
Kazam - binary  19157 ms        1564 ms
Wiko            2060 ms         1278 ms
Wiko - binary   3876 ms         1136 ms
```

Fixes #14294
2019-05-21 15:05:37 +03:00
Ander Conselvan de Oliveira
f210bbbb6c [core] Don't use optional unique_ptr in function coversion code
Since unique_ptr is already nullable there is no need to wrap it in an
optional<>.
2019-05-21 12:14:22 +03:00
Ander Conselvan de Oliveira
e30ff619c6 [core] Forward args in style::expression::dsl::compound() 2019-05-21 12:14:22 +03:00
Ander Conselvan de Oliveira
d502b72449 [core] Pass legacy/categorical/*-default expression tests
Handle categorical function default value properly in conversion to
expreexpression so related tests pass.
2019-05-21 12:14:22 +03:00
Ander Conselvan de Oliveira
1e620d3bd8 [core] Fix legacy/{interval,exponential}/*-default expression tests
Consider the function default value in interval and exponential
functions conversion.
2019-05-21 12:14:22 +03:00
Ander Conselvan de Oliveira
f2f2e64fc8 [core] Expose dsl::compound() internally
This will be used in a follow up patch by the function to expression
conversion code.
2019-05-21 12:14:22 +03:00
Ander Conselvan de Oliveira
343df18954 [core] Fix some of the legacy interval function expression tests
The tests for conversion of legacy interval functions to expressions
expects that the first stop in the "step" expression be omitted.
2019-05-21 12:14:22 +03:00
Ander Conselvan de Oliveira
33cfd080c2 [core] Fix most identity function with default legacy expression tests
Add handling of default value to the conversion of legacy identity
functions. The color and enum tests still don't pass though.
2019-05-21 12:14:22 +03:00
Ander Conselvan de Oliveira
11055f9a88 [core] Fix indentation of src/mbgl/style/conversion/function.cpp
One line in that file was indented with tabs instead of spaces.
2019-05-21 12:14:22 +03:00
Aleksandar Stojiljkovic
2a3a1c7bb3 [core] Remove re-linking programs approach (#14482)
Remove re-linking programs as redundant.
It costs (cheaper to link once than twice) and (subjective) is not that common GL API
usage pattern, although perfectly legal and permitted.
Initial idea, behind the removed code, was to enable work on optimization
that would reduce number of attrib setup calls in case when VAO is not
available (as described in #9433).

As such optimization is not implemented, and it is arguable if it makes sense
to do it now, we can remove re-linking.

Related to closed PRs #9433 and PR #11583.

I have [measured the time spent just on relinking](https://gist.github.com/astojilj/29bd5a5c5dc0b2d9f29ecb660da07fbf) using release build on iPhone SE (A9, same as iPhone 6S):

- 1st run after reboot or installation
Total 37.14ms, average per program:1.86ms

- reopening
Total: 2.47ms, average per program: 0.12ms

This time we save using the patch here.
2019-05-20 16:17:19 +03:00
Mikhail Pozdnyakov
8d91264160 [core] CrossTileSymbolIndex::pruneUnusedLayers() does not create intermadiate containers 2019-05-20 14:33:41 +03:00
Alexander Shalamov
521ac5c993 [core] Check if pattern dependencies or pattern positions are missing
Add check for optional pattern dependencies and don't bind empty vertex
buffers if pattern positions are missing.
2019-05-20 01:19:04 -07:00
Mikhail Pozdnyakov
9fe5256ce7 [core] Avoid bucket downcasting in Placement 2019-05-19 18:15:33 +03:00
Mikhail Pozdnyakov
18ddced9b6 [core] Remove Bucket::supportsLayer 2019-05-19 18:15:33 +03:00
Mikhail Pozdnyakov
f2ad89c463 [core] Remove RenderLayerSymbolInterface 2019-05-19 18:15:33 +03:00
Mikhail Pozdnyakov
44fd6dcf7c [core] Placement accepts RenderLayer instances 2019-05-19 18:15:33 +03:00
Mikhail Pozdnyakov
febe696d4b [core] Avoid unneeded proj matrix calculations in renderer 2019-05-19 18:15:33 +03:00
Mikhail Pozdnyakov
0e45138547 [core] RenderLayerSymbolInterface is not used in CrossTileSymbolIndex 2019-05-19 18:15:33 +03:00
Konstantin Käfer
3a6ff7710f [core] add gfx::UploadPass, split startRender into prepare and upload 2019-05-15 11:57:43 -07:00
Konstantin Käfer
bf0998697e [core] don't upload empty buffers 2019-05-15 11:57:43 -07:00
Konstantin Käfer
03e434e901 [core] use float for storing opacity attribute 2019-05-15 11:57:43 -07:00
Konstantin Käfer
179c5fe83b [core] add gfx::CommandEncoder::present() 2019-05-15 11:57:43 -07:00
Konstantin Käfer
da5bd4d6e3 [core] use unique IDs for DrawScopes 2019-05-15 11:57:43 -07:00
Mikhail Pozdnyakov
5b6a262e15 [core] GeometryTile and TileLoader keep strong reference to FileSource
Thus we fix a potential bug: if `Renderer` outlives the `Map` it will hold a stale reference to the `FileSource` instance.
2019-05-14 11:29:24 +03:00
Mikhail Pozdnyakov
953ee5e81b [core] Create glyph manager at renderer construction time
Avoid unnecessary glyph manager presence check in `Renderer::Impl::()`.
2019-05-14 11:29:24 +03:00
Mikhail Pozdnyakov
81823e35a6 [core] RenderTile shall never be created for a not renderable tile
A RenderTile is already never created for a not renderable tile, guarantied by the checks in `updateRenderables()`.

However, the client code had plenty of `isRenderable()` checks in the render path, which complicated the code and affected rendering performance.

This patch removes the unneeded checks from the client code and puts an assertion to `TilePyramid::addRenderTile()`.
2019-05-14 11:19:56 +03:00
Aleksandar Stojiljkovic
926e8e8a5b Refactor: coordinatePointMatrix skip recomputation (#14507)
coordinatePointMatrix is always used with getZoom():
Projection::worldSize(scale) / std::pow(2, z) is computed as
scale * util::tileSize / std::pow(2, z)
scale is equal to std::pow(2, z).
____________________________________=>
Projection::worldSize(scale) / std::pow(2, z) => util::tileSize.
2019-05-13 22:13:37 +03:00
Thiago Marcos P. Santos
06f1dc48a2 [core] Make the BackgroundScheduler a singleton
- Do not carry it over everywhere as parameter, it is a shared
  instance anyway and the lifecycle is pretty much the app lifecycle
  from the moment we instantiate a map.
- Rename to BackgroundScheduler because it is a Scheduler that will
  do tasks in the background, we don't make assumptions if it is a
  thread pool or a single thread.
- Most importantly, remove the dependency from `core` on `platform`.
2019-05-10 14:20:38 +03:00
Mikhail Pozdnyakov
b41f39d545 [core] Make ActorRef methods const
So that the lambdas calling these methods do not have to be mutable.
2019-05-10 11:59:02 +03:00
Alexander Shalamov
a53c4593d6 [core] Schedule invocation of onStyleImageMissing completion callback on the same thread
Before this change, ImageManger's 'done' callback for onStyleImageMissing observer
notification that was created on renderer thread, could be called from different thread,
therefore, is not thread safe. For example, on Android platform, callback was invoked
from UI thread. This change makes callback to be scheduled on originating thread.
2019-05-09 20:45:06 +03:00
Mikhail Pozdnyakov
c953fdad24 [core] Failed sprite requests do not block tiles rendering 2019-05-09 16:48:08 +03:00