Comments (5)
Some thoughts on the subject.
It looks like a really deep-seated problem without any easy and performance-safe solutions.
Reason for such behaviour is obvious:
in drawFill, we first draw all the fills, then all the outlines. Pseudocode:
for (tile of tiles)
drawFill()
for (tile of tiles)
drawOutline()
So it's no surprise that outlines appear on top.
To make it work, we need to alternate fills and outlines:
"fill shape1 -> outline shape1 -> fill shape2 -> outline shape2 -> ..."
This is currently a very non-trivial task. For that we need to "take apart" each tile and somehow draw its features 1 by 1:
for (tile of tiles)
features = extractFeaturesFrom(tile)
for (feature of features)
drawFill()
drawOutline()
This looks like a really disruptive solution. Implementation will surely be difficult and performance will apparently suffer, though hard to tell how much.
So perhaps the best solution would be to leave it as it is. Overlapping geometries within a single source is not a widespread case i suppose.
from maplibre-gl-js.
I need to check again, but it might be that the error is not present when terrain is on.
from maplibre-gl-js.
When terrain is on we render to texture, which is a lot slower and can explain the difference, I think.
from maplibre-gl-js.
Unrelated, but still interesting to me, do you have a number on the performance impact of rendering to texture vs the normal path? Do we have a benchmark maybe?
from maplibre-gl-js.
I don't, but it's a noticable difference in terms of UX so it's in the area of hundres of milliseconds.
from maplibre-gl-js.
Related Issues (20)
- Inconsistent behavior between circles and symbols with GeoJSON data HOT 1
- Globe - Improve tile management HOT 2
- Globe - Add an atmosphere layer HOT 6
- Globe - Manage bakcground color / stars HOT 5
- Pixel Raw Projection HOT 1
- Benchmarks are broken: window.maplibreglBenchmarks is undefined HOT 3
- Type def of `Map` constructor option `localIdeographFontFamily` doesn't accept `false` HOT 4
- Sprite url gets validated before transformRequest HOT 2
- Generating an image from the map canvas results in blank images. HOT 3
- Ability to set opacity for entire layer HOT 1
- Proposal: Support custom text transformation plugins HOT 2
- Incomplete feature.geometry during MapLayerMouseEvent HOT 1
- Custom Marker Overlaid by Default Pin in MaplibreGL JS Versions After 3.1.0 HOT 1
- Map freeze if mouse event below terrain HOT 5
- Update OSM wiki and possibly Wikipedia with relevant info HOT 4
- Large screen: unwanted pan-jump as pan action finishes (3d terrain) HOT 4
- How to enable rendering certain classes at levels above 12 HOT 2
- WebGL 1 phase out HOT 3
- Layer `type` change causing a full map reload HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from maplibre-gl-js.