Fix LocationIndicator Layer
This changes image size properties to be scales instead of pixel sizes. The commit also adds fixes for handling image updates with the same ID, adds tests for expressions in paint properties, as well as tests for using images with pixel ratio greater than 1. Finally it moves image-tilt-displacement and perspective-compensation properties from layout to paint properties, and includes other minor cleanups.
@@ -26,14 +26,6 @@ public:
|
||||
const PropertyValue<expression::Image>& getBearingImage() const;
|
||||
void setBearingImage(const PropertyValue<expression::Image>&);
|
||||
|
||||
static PropertyValue<float> getDefaultImageTiltDisplacement();
|
||||
const PropertyValue<float>& getImageTiltDisplacement() const;
|
||||
void setImageTiltDisplacement(const PropertyValue<float>&);
|
||||
|
||||
static PropertyValue<float> getDefaultPerspectiveCompensation();
|
||||
const PropertyValue<float>& getPerspectiveCompensation() const;
|
||||
void setPerspectiveCompensation(const PropertyValue<float>&);
|
||||
|
||||
static PropertyValue<expression::Image> getDefaultShadowImage();
|
||||
const PropertyValue<expression::Image>& getShadowImage() const;
|
||||
void setShadowImage(const PropertyValue<expression::Image>&);
|
||||
@@ -74,12 +66,24 @@ public:
|
||||
void setBearingImageSizeTransition(const TransitionOptions&);
|
||||
TransitionOptions getBearingImageSizeTransition() const;
|
||||
|
||||
static PropertyValue<float> getDefaultImageTiltDisplacement();
|
||||
const PropertyValue<float>& getImageTiltDisplacement() const;
|
||||
void setImageTiltDisplacement(const PropertyValue<float>&);
|
||||
void setImageTiltDisplacementTransition(const TransitionOptions&);
|
||||
TransitionOptions getImageTiltDisplacementTransition() const;
|
||||
|
||||
static PropertyValue<std::array<double, 3>> getDefaultLocation();
|
||||
const PropertyValue<std::array<double, 3>>& getLocation() const;
|
||||
void setLocation(const PropertyValue<std::array<double, 3>>&);
|
||||
void setLocationTransition(const TransitionOptions&);
|
||||
TransitionOptions getLocationTransition() const;
|
||||
|
||||
static PropertyValue<float> getDefaultPerspectiveCompensation();
|
||||
const PropertyValue<float>& getPerspectiveCompensation() const;
|
||||
void setPerspectiveCompensation(const PropertyValue<float>&);
|
||||
void setPerspectiveCompensationTransition(const TransitionOptions&);
|
||||
TransitionOptions getPerspectiveCompensationTransition() const;
|
||||
|
||||
static PropertyValue<float> getDefaultShadowImageSize();
|
||||
const PropertyValue<float>& getShadowImageSize() const;
|
||||
void setShadowImageSize(const PropertyValue<float>&);
|
||||
|
||||
@@ -8,5 +8,6 @@
|
||||
"render-tests/regressions/mapbox-gl-js#2305": "Needs to be investigated and fixed.",
|
||||
"render-tests/regressions/mapbox-gl-js#5911a": "Needs to be investigated and fixed.",
|
||||
"render-tests/text-field/formatted-images": "Needs to be investigated and fixed.",
|
||||
"render-tests/symbol-visibility/visible": "Needs to be investigated and fixed."
|
||||
}
|
||||
"render-tests/symbol-visibility/visible": "Needs to be investigated and fixed.",
|
||||
"location_indicator/image_pixel_ratio": "Renders a black square when loading from spritesheet. Needs to be investigated and fixed."
|
||||
}
|
||||
|
||||
@@ -6,5 +6,20 @@
|
||||
"render-tests/line-pattern/opacity": "Flaky on Linux: https://github.com/mapbox/mapbox-gl-native/issues/15320",
|
||||
"render-tests/line-translate/literal": "Flaky on Linux: https://github.com/mapbox/mapbox-gl-native/issues/14859",
|
||||
"render-tests/regressions/mapbox-gl-js#5642": "Failing with mbgl-render-test",
|
||||
"render-tests/regressions/mapbox-gl-js#7066": "Failing with mbgl-render-test"
|
||||
"render-tests/regressions/mapbox-gl-js#7066": "Failing with mbgl-render-test",
|
||||
"location_indicator/dateline": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/default": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/no_radius_border": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/no_radius_fill": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/no_textures": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/one_texture": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/rotated": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/tilted": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/tilted_texture_shift": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/tilted_texture_shift_bottom_left": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/tilted_texture_shift_bottom_right": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/tilted_texture_shift_top_left": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/tilted_texture_shift_top_right": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/two_textures": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering",
|
||||
"location_indicator/image_pixel_ratio": "Would need a different baseline when ran on llvmpipe not supporting anisotropic filtering"
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2672223,
|
||||
83215
|
||||
2027402,
|
||||
3196
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2796203,
|
||||
107023
|
||||
2234412,
|
||||
3784
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
3103973,
|
||||
6137
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"network": [
|
||||
[
|
||||
"probeNetwork - default - end",
|
||||
5,
|
||||
117617
|
||||
],
|
||||
[
|
||||
"probeNetwork - default - start",
|
||||
0,
|
||||
0
|
||||
]
|
||||
],
|
||||
"gfx": [
|
||||
[
|
||||
"probeGFX - default - end",
|
||||
4,
|
||||
9,
|
||||
13,
|
||||
1,
|
||||
[
|
||||
131072,
|
||||
131072
|
||||
],
|
||||
[
|
||||
70,
|
||||
70
|
||||
],
|
||||
[
|
||||
128,
|
||||
128
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2656163,
|
||||
83134
|
||||
2005701,
|
||||
3122
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2673019,
|
||||
83236
|
||||
2022418,
|
||||
3216
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2377735,
|
||||
21656
|
||||
2034636,
|
||||
2864
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2665727,
|
||||
83226
|
||||
2020507,
|
||||
3166
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2660636,
|
||||
83197
|
||||
2023574,
|
||||
3274
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2703062,
|
||||
83350
|
||||
2057114,
|
||||
3257
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2677760,
|
||||
83330
|
||||
2046282,
|
||||
3307
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2735091,
|
||||
83429
|
||||
2041058,
|
||||
3281
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2714461,
|
||||
83383
|
||||
2059723,
|
||||
3308
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2717377,
|
||||
83399
|
||||
2064963,
|
||||
3344
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2692872,
|
||||
83405
|
||||
2055996,
|
||||
3285
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"memory": [
|
||||
[
|
||||
"probeMemory - default - end",
|
||||
2680943,
|
||||
83221
|
||||
2019370,
|
||||
3117
|
||||
],
|
||||
[
|
||||
"probeMemory - default - start",
|
||||
|
||||
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 10 KiB |
@@ -39,29 +39,23 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"top-image" : "puck_hat",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"bearing" : ["interpolate", ["linear"], ["zoom"], 8, 0, 24, 90],
|
||||
"perspective-compensation" : ["interpolate", ["linear"], ["zoom"], 8, 0, 16, 1],
|
||||
"image-tilt-displacement" : ["interpolate", ["linear"], ["zoom"], 8, 0, 16, 6.5],
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"accuracy-radius": ["interpolate", ["linear"], ["zoom"], 8, 0, 24, 180],
|
||||
"bearing-image-size" : ["interpolate", ["linear"], ["zoom"], 8, 0, 24, 0.52],
|
||||
"top-image-size" : ["interpolate", ["linear"], ["zoom"], 8, 0, 24, 0.36],
|
||||
"shadow-image-size" : ["interpolate", ["linear"], ["zoom"], 8, 0, 24, 0.4],
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
"accuracy-radius-color": ["interpolate", ["linear"], ["zoom"], 8, "rgba(255,0,0,0.2)", 24, "rgba(255,255,0,0.4)"],
|
||||
"accuracy-radius-border-color": ["interpolate", ["linear"], ["zoom"], 8, "rgba(255,0,255,0.2)", 24, "rgba(255,0,255,1)"]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 12 KiB |
@@ -71,26 +71,20 @@
|
||||
{
|
||||
"id": "puck124",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"top-image" : "puck_hat",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"bearing" : 45,
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
|
||||
BIN
metrics/tests/location_indicator/image_pixel_ratio/expected.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"version": 8,
|
||||
"metadata": {
|
||||
"test": {
|
||||
"width": 512,
|
||||
"height": 256,
|
||||
"operations": [
|
||||
[
|
||||
"addImage",
|
||||
"puck_hat@2x",
|
||||
"puck_hat.png",
|
||||
{"pixelRatio": 2.0}
|
||||
],
|
||||
[
|
||||
"addImage",
|
||||
"puck@2x",
|
||||
"puck.png",
|
||||
{"pixelRatio": 2.0}
|
||||
|
||||
],
|
||||
[
|
||||
"addImage",
|
||||
"puck_shadow@2x",
|
||||
"puck_shadow.png",
|
||||
{"pixelRatio": 2.0}
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"sources": {
|
||||
"geojson": {
|
||||
"type": "geojson",
|
||||
"data": {
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
139.766707,
|
||||
35.693055
|
||||
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"center": [ 139.766707, 35.693055 ],
|
||||
"zoom": 16,
|
||||
"pitch" : 0,
|
||||
"bearing" : 42,
|
||||
"sprite" : "local://sprites/emerald@2x",
|
||||
"layers": [
|
||||
{
|
||||
"id": "background",
|
||||
"type": "background",
|
||||
"paint": {
|
||||
"background-color": "lightseagreen"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "circle",
|
||||
"source": "geojson",
|
||||
"paint": {
|
||||
"circle-radius": 40,
|
||||
"circle-color" : "rgba(255,0,0,0.1)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "puck124",
|
||||
"type": "location-indicator",
|
||||
"layout" : {
|
||||
"bearing-image" : "puck@2x",
|
||||
"top-image" : "marker_icon",
|
||||
"shadow-image" : "puck_shadow@2x"
|
||||
},
|
||||
"paint" : {
|
||||
"bearing" : 45,
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 0.52,
|
||||
"top-image-size" : 1,
|
||||
"shadow-image-size" : 0.4,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 8.7 KiB |
@@ -40,26 +40,20 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"top-image" : "puck_hat",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"bearing" : 45,
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)"
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.2 KiB |
@@ -39,27 +39,20 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"top-image" : "puck_hat",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"bearing" : 45,
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
}
|
||||
|
||||
@@ -39,23 +39,17 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"layout" : {
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"bearing" : 45,
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
|
||||
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.7 KiB |
@@ -39,24 +39,18 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"bearing-image" : "puck",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"layout" : {
|
||||
"bearing-image" : "puck"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"bearing" : 45,
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
|
||||
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 8.6 KiB |
@@ -39,26 +39,20 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 0,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"top-image" : "puck_hat",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"bearing" : 0,
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
|
||||
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.5 KiB |
@@ -39,26 +39,20 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"top-image" : "puck_hat",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 0
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"bearing" : 45,
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 0,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
|
||||
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.0 KiB |
@@ -39,26 +39,20 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"top-image" : "puck_hat",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"bearing" : 45,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
|
||||
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
@@ -40,26 +40,20 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"top-image" : "puck_hat",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"bearing" : 45,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
|
||||
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
@@ -39,26 +39,20 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"top-image" : "puck_hat",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"bearing" : 45,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
|
||||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.3 KiB |
@@ -39,26 +39,20 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"top-image" : "puck_hat",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"bearing" : 45,
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
|
||||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.1 KiB |
@@ -39,26 +39,20 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 0,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"top-image" : "puck_hat",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"bearing" : 0,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
|
||||
|
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.0 KiB |
@@ -39,25 +39,19 @@
|
||||
{
|
||||
"id": "puck123",
|
||||
"type": "location-indicator",
|
||||
"layout" : { "bearing" : 45,
|
||||
"layout" : {
|
||||
"bearing-image" : "puck",
|
||||
"shadow-image" : "puck_shadow",
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 5
|
||||
"shadow-image" : "puck_shadow"
|
||||
},
|
||||
"paint" : {
|
||||
"accuracy-radius-transition": { "duration": 0, "delay": 0 },
|
||||
"bearing-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"top-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"shadow-image-size-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-color-transition": { "duration": 0, "delay": 0 },
|
||||
"accuracy-radius-border-color-transition": { "duration": 0, "delay": 0 },
|
||||
|
||||
"bearing" : 45,
|
||||
"perspective-compensation" : 1,
|
||||
"image-tilt-displacement" : 6.5,
|
||||
"location" : [ 35.693055, 139.766707, 0],
|
||||
"accuracy-radius": 90.0,
|
||||
"bearing-image-size" : 48,
|
||||
"top-image-size" : 16,
|
||||
"shadow-image-size" : 112,
|
||||
"bearing-image-size" : 0.26,
|
||||
"top-image-size" : 0.18,
|
||||
"shadow-image-size" : 0.2,
|
||||
|
||||
"accuracy-radius-color": "rgba(255,0,0,0.2)",
|
||||
"accuracy-radius-border-color": "rgba(255,0,255,0.6)"
|
||||
|
||||
@@ -991,10 +991,10 @@ void GLFWView::toggleLocationIndicatorLayer() {
|
||||
puckLayer->setBearingTransition(mbgl::style::TransitionOptions(mbgl::Duration::zero(), mbgl::Duration::zero()));
|
||||
puckLayer->setBearing(mbgl::style::Rotation(0.0));
|
||||
puckLayer->setAccuracyRadiusBorderColor(premultiply(mbgl::Color{0.0, 1.0, 0.2, 0.4}));
|
||||
puckLayer->setTopImageSize(24);
|
||||
puckLayer->setBearingImageSize(72);
|
||||
puckLayer->setShadowImageSize(96);
|
||||
puckLayer->setImageTiltDisplacement(8.0f); // set to 0 for a "flat" puck
|
||||
puckLayer->setTopImageSize(0.18);
|
||||
puckLayer->setBearingImageSize(0.26);
|
||||
puckLayer->setShadowImageSize(0.2);
|
||||
puckLayer->setImageTiltDisplacement(7.0f); // set to 0 for a "flat" puck
|
||||
puckLayer->setPerspectiveCompensation(0.9);
|
||||
|
||||
map->getStyle().addImage(std::make_unique<mbgl::style::Image>(
|
||||
|
||||
@@ -34,7 +34,10 @@ referenceSpec["layout_location-indicator"] = {
|
||||
]
|
||||
},
|
||||
"doc": "Name of image in sprite to use as the background of the location indicator."
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
referenceSpec["paint_location-indicator"] = {
|
||||
"perspective-compensation": {
|
||||
"type": "number",
|
||||
"default": "0.85",
|
||||
@@ -59,10 +62,7 @@ referenceSpec["layout_location-indicator"] = {
|
||||
]
|
||||
},
|
||||
"doc": "The displacement off the center of the top image and the shadow image when the pitch of the map is greater than 0. This helps producing a three-dimensional appearence."
|
||||
}
|
||||
};
|
||||
|
||||
referenceSpec["paint_location-indicator"] = {
|
||||
},
|
||||
"bearing": {
|
||||
"type": "number",
|
||||
"default": "0",
|
||||
@@ -74,7 +74,7 @@ referenceSpec["paint_location-indicator"] = {
|
||||
"interpolated": false,
|
||||
"parameters": [ ]
|
||||
},
|
||||
"transition": false,
|
||||
"transition": true,
|
||||
"doc": "The bearing of the location indicator."
|
||||
},
|
||||
"location": {
|
||||
@@ -110,9 +110,9 @@ referenceSpec["paint_location-indicator"] = {
|
||||
},
|
||||
"top-image-size": {
|
||||
"type": "number",
|
||||
"units": "pixels",
|
||||
"units": "factor of the original icon size",
|
||||
"property-type": "data-constant",
|
||||
"default": 0,
|
||||
"default": 1,
|
||||
"expression": {
|
||||
"interpolated": true,
|
||||
"parameters": [
|
||||
@@ -120,13 +120,13 @@ referenceSpec["paint_location-indicator"] = {
|
||||
]
|
||||
},
|
||||
"transition": true,
|
||||
"doc": "The size of the top image, in pixels."
|
||||
"doc": "The size of the top image, as a scale factor applied to the size of the specified image."
|
||||
},
|
||||
"bearing-image-size": {
|
||||
"type": "number",
|
||||
"units": "pixels",
|
||||
"units": "factor of the original icon size",
|
||||
"property-type": "data-constant",
|
||||
"default": 0,
|
||||
"default": 1,
|
||||
"expression": {
|
||||
"interpolated": true,
|
||||
"parameters": [
|
||||
@@ -134,13 +134,13 @@ referenceSpec["paint_location-indicator"] = {
|
||||
]
|
||||
},
|
||||
"transition": true,
|
||||
"doc": "The size of the bearing image, in pixels."
|
||||
"doc": "The size of the bearing image, as a scale factor applied to the size of the specified image."
|
||||
},
|
||||
"shadow-image-size": {
|
||||
"type": "number",
|
||||
"units": "pixels",
|
||||
"units": "factor of the original icon size",
|
||||
"property-type": "data-constant",
|
||||
"default": 0,
|
||||
"default": 1,
|
||||
"expression": {
|
||||
"interpolated": true,
|
||||
"parameters": [
|
||||
@@ -148,7 +148,7 @@ referenceSpec["paint_location-indicator"] = {
|
||||
]
|
||||
},
|
||||
"transition": true,
|
||||
"doc": "The size of the shadow image, in pixels."
|
||||
"doc": "The size of the shadow image, as a scale factor applied to the size of the specified image."
|
||||
},
|
||||
"accuracy-radius-color": {
|
||||
"type": "color",
|
||||
|
||||
@@ -149,6 +149,7 @@
|
||||
#define GL_TEXTURE_2D 0x0DE1
|
||||
#define GL_TEXTURE_BINDING_2D 0x8069
|
||||
#define GL_TEXTURE_MAG_FILTER 0x2800
|
||||
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
|
||||
#define GL_TEXTURE_MIN_FILTER 0x2801
|
||||
#define GL_TEXTURE_WRAP_S 0x2802
|
||||
#define GL_TEXTURE_WRAP_T 0x2803
|
||||
@@ -163,7 +164,6 @@
|
||||
#define GL_VERTEX_SHADER 0x8B31
|
||||
#define GL_VIEWPORT 0x0BA2
|
||||
#define GL_ZERO 0
|
||||
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
|
||||
#ifdef MBGL_USE_GLES2
|
||||
#define GL_HALF_FLOAT 0x8D61
|
||||
#else
|
||||
|
||||
@@ -48,9 +48,9 @@ struct LocationIndicatorRenderParameters {
|
||||
double errorRadiusMeters;
|
||||
mbgl::Color errorRadiusColor{0, 0, 0, 0};
|
||||
mbgl::Color errorRadiusBorderColor{0, 0, 0, 0};
|
||||
int puckSizePx = 0;
|
||||
int puckHatSizePx = 0;
|
||||
int puckShadowSizePx = 0;
|
||||
float puckScale = 0;
|
||||
float puckHatScale = 0;
|
||||
float puckShadowScale = 0;
|
||||
float puckLayersDisplacement = 0;
|
||||
float perspectiveCompensation = 0;
|
||||
std::string puckImagePath;
|
||||
@@ -266,7 +266,6 @@ public:
|
||||
~Texture() { release(); }
|
||||
void release() {
|
||||
MBGL_CHECK_ERROR(glDeleteTextures(1, &texId));
|
||||
texId = 0;
|
||||
image = nullptr;
|
||||
}
|
||||
/*
|
||||
@@ -276,10 +275,16 @@ public:
|
||||
if ((img && &img->get()->image == image) || (!img && !image)) return;
|
||||
imageDirty = true;
|
||||
image = (img) ? &img->get()->image : nullptr;
|
||||
if (img)
|
||||
width = height = 0;
|
||||
pixelRatio = 1.0f;
|
||||
if (img) {
|
||||
sharedImage = *img; // keep reference until uploaded
|
||||
else
|
||||
width = image->size.width;
|
||||
height = image->size.height;
|
||||
pixelRatio = img->get()->pixelRatio;
|
||||
} else {
|
||||
sharedImage = nullopt;
|
||||
}
|
||||
}
|
||||
|
||||
void upload() {
|
||||
@@ -329,13 +334,21 @@ public:
|
||||
const mbgl::PremultipliedImage* image = nullptr;
|
||||
optional<Immutable<style::Image::Impl>> sharedImage;
|
||||
bool imageDirty = false;
|
||||
size_t width = 0;
|
||||
size_t height = 0;
|
||||
float pixelRatio = 1.0f;
|
||||
};
|
||||
|
||||
RenderLocationIndicatorImpl() : ruler(0, mapbox::cheap_ruler::CheapRuler::Meters) {}
|
||||
|
||||
static bool hasExtension(const std::string& ext) {
|
||||
if (const auto* extensions = reinterpret_cast<const char*>(MBGL_CHECK_ERROR(glGetString(GL_EXTENSIONS)))) {
|
||||
if (strstr(extensions, ext.c_str()) != nullptr) return true;
|
||||
static bool hasAnisotropicFiltering() {
|
||||
const auto* extensions = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
|
||||
GLenum error = glGetError();
|
||||
if (error != GL_NO_ERROR) { // glGetString(GL_EXTENSIONS) is deprecated in OpenGL Desktop 3.0+. But OpenGL 3.0+
|
||||
// has anisotropic filtering.
|
||||
return true;
|
||||
} else {
|
||||
if (strstr(extensions, "GL_EXT_texture_filter_anisotropic") != nullptr) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -343,7 +356,7 @@ public:
|
||||
// Check if anisotropic filtering is available
|
||||
if (initialized) return;
|
||||
initialized = true;
|
||||
if (hasExtension("GL_EXT_texture_filter_anisotropic")) anisotropicFilteringAvailable = true;
|
||||
if (hasAnisotropicFiltering()) anisotropicFilteringAvailable = true;
|
||||
simpleShader.initialize();
|
||||
texturedShader.initialize();
|
||||
texCoords = {{{0.0f, 1.0f},
|
||||
@@ -363,7 +376,7 @@ public:
|
||||
|
||||
void release() {
|
||||
if (!simpleShader.program) return;
|
||||
textures.clear();
|
||||
for (const auto& t : textures) t.second->release();
|
||||
buffer.release();
|
||||
circleBuffer.release();
|
||||
puckBuffer.release();
|
||||
@@ -382,16 +395,13 @@ public:
|
||||
} else if (params.puckBearing != oldParams.puckBearing ||
|
||||
params.puckLayersDisplacement != oldParams.puckLayersDisplacement ||
|
||||
params.perspectiveCompensation != oldParams.perspectiveCompensation ||
|
||||
params.puckSizePx != oldParams.puckSizePx || params.puckHatSizePx != oldParams.puckHatSizePx ||
|
||||
params.puckShadowSizePx != oldParams.puckShadowSizePx)
|
||||
params.puckScale != oldParams.puckScale || params.puckHatScale != oldParams.puckHatScale ||
|
||||
params.puckShadowScale != oldParams.puckShadowScale)
|
||||
bearingChanged = true; // changes puck geometry but not necessarily the location
|
||||
if (params.errorRadiusMeters != oldParams.errorRadiusMeters) radiusChanged = true;
|
||||
if (params.puckImagePath != oldParams.puckImagePath)
|
||||
setTextureFromImageID(params.puckImagePath, texPuck, params);
|
||||
if (params.puckShadowImagePath != oldParams.puckShadowImagePath)
|
||||
setTextureFromImageID(params.puckShadowImagePath, texShadow, params);
|
||||
if (params.puckHatImagePath != oldParams.puckHatImagePath)
|
||||
setTextureFromImageID(params.puckHatImagePath, texPuckHat, params);
|
||||
setTextureFromImageID(params.puckImagePath, texPuck, params);
|
||||
setTextureFromImageID(params.puckShadowImagePath, texShadow, params);
|
||||
setTextureFromImageID(params.puckHatImagePath, texPuckHat, params);
|
||||
|
||||
projectionCircle = params.projectionMatrix;
|
||||
const Point<double> positionMercator = project(params.puckPosition, *params.state);
|
||||
@@ -539,10 +549,12 @@ protected:
|
||||
params.perspectiveCompensation; // Compensation factor for the perspective deformation
|
||||
// ^ clamping this to 0.8 to avoid growing the puck too much close to the camera.
|
||||
const double shadowRadius =
|
||||
params.puckShadowSizePx * M_SQRT2 * 0.5 *
|
||||
((texShadow) ? texShadow->width / texShadow->pixelRatio : 0.0) * params.puckShadowScale * M_SQRT2 * 0.5 *
|
||||
horizontalScaleFactor; // Technically it's not the radius, but the half diagonal of the quad.
|
||||
const double puckRadius = params.puckSizePx * M_SQRT2 * 0.5 * horizontalScaleFactor;
|
||||
const double hatRadius = params.puckHatSizePx * M_SQRT2 * 0.5 * horizontalScaleFactor;
|
||||
const double puckRadius = ((texPuck) ? texPuck->width / texPuck->pixelRatio : 0.0) * params.puckScale *
|
||||
M_SQRT2 * 0.5 * horizontalScaleFactor;
|
||||
const double hatRadius = ((texPuckHat) ? texPuckHat->width / texPuckHat->pixelRatio : 0.0) *
|
||||
params.puckHatScale * M_SQRT2 * 0.5 * horizontalScaleFactor;
|
||||
|
||||
for (unsigned long i = 0; i < 4; ++i) {
|
||||
const auto b = util::wrap<float>(params.puckBearing + bearings[i], 0.0f, 360.0f);
|
||||
@@ -634,6 +646,11 @@ protected:
|
||||
else
|
||||
tx->assign(nullptr);
|
||||
textures[imagePath] = tx;
|
||||
} else {
|
||||
const Immutable<style::Image::Impl>* ima = params.imageManager->getSharedImage(imagePath);
|
||||
const mbgl::PremultipliedImage* img = (ima) ? &ima->get()->image : nullptr;
|
||||
if (textures.at(imagePath)->image != img) // image for the ID might have changed.
|
||||
textures.at(imagePath)->assign(ima);
|
||||
}
|
||||
tex = textures.at(imagePath);
|
||||
}
|
||||
@@ -690,7 +707,6 @@ RenderLocationIndicatorLayer::RenderLocationIndicatorLayer(Immutable<style::Loca
|
||||
}
|
||||
|
||||
RenderLocationIndicatorLayer::~RenderLocationIndicatorLayer() {
|
||||
assert(gfx::BackendScope::exists());
|
||||
if (!contextDestroyed) MBGL_CHECK_ERROR(renderImpl->release());
|
||||
}
|
||||
|
||||
@@ -711,10 +727,12 @@ void RenderLocationIndicatorLayer::evaluate(const PropertyEvaluationParameters&
|
||||
renderImpl->parameters.errorRadiusColor = evaluated.get<style::AccuracyRadiusColor>();
|
||||
renderImpl->parameters.errorRadiusBorderColor = evaluated.get<style::AccuracyRadiusBorderColor>();
|
||||
renderImpl->parameters.errorRadiusMeters = evaluated.get<style::AccuracyRadius>();
|
||||
renderImpl->parameters.puckSizePx = evaluated.get<style::BearingImageSize>();
|
||||
renderImpl->parameters.puckHatSizePx = evaluated.get<style::TopImageSize>();
|
||||
renderImpl->parameters.puckShadowSizePx = evaluated.get<style::ShadowImageSize>();
|
||||
renderImpl->parameters.puckScale = evaluated.get<style::BearingImageSize>();
|
||||
renderImpl->parameters.puckHatScale = evaluated.get<style::TopImageSize>();
|
||||
renderImpl->parameters.puckShadowScale = evaluated.get<style::ShadowImageSize>();
|
||||
renderImpl->parameters.puckBearing = evaluated.get<style::Bearing>().getAngle();
|
||||
renderImpl->parameters.puckLayersDisplacement = evaluated.get<style::ImageTiltDisplacement>();
|
||||
renderImpl->parameters.perspectiveCompensation = evaluated.get<style::PerspectiveCompensation>();
|
||||
|
||||
const std::array<double, 3> pos = evaluated.get<style::Location>();
|
||||
renderImpl->parameters.puckPosition = LatLng{pos[0], pos[1]};
|
||||
@@ -726,10 +744,6 @@ void RenderLocationIndicatorLayer::evaluate(const PropertyEvaluationParameters&
|
||||
renderImpl->parameters.puckShadowImagePath = layout.get<style::ShadowImage>().asConstant().id();
|
||||
if (!layout.get<style::TopImage>().isUndefined())
|
||||
renderImpl->parameters.puckHatImagePath = layout.get<style::TopImage>().asConstant().id();
|
||||
if (!layout.get<style::ImageTiltDisplacement>().isUndefined())
|
||||
renderImpl->parameters.puckLayersDisplacement = layout.get<style::ImageTiltDisplacement>().asConstant();
|
||||
if (!layout.get<style::PerspectiveCompensation>().isUndefined())
|
||||
renderImpl->parameters.perspectiveCompensation = layout.get<style::PerspectiveCompensation>().asConstant();
|
||||
|
||||
evaluatedProperties = std::move(properties);
|
||||
}
|
||||
|
||||
@@ -78,36 +78,6 @@ void LocationIndicatorLayer::setBearingImage(const PropertyValue<expression::Ima
|
||||
baseImpl = std::move(impl_);
|
||||
observer->onLayerChanged(*this);
|
||||
}
|
||||
PropertyValue<float> LocationIndicatorLayer::getDefaultImageTiltDisplacement() {
|
||||
return ImageTiltDisplacement::defaultValue();
|
||||
}
|
||||
|
||||
const PropertyValue<float>& LocationIndicatorLayer::getImageTiltDisplacement() const {
|
||||
return impl().layout.get<ImageTiltDisplacement>();
|
||||
}
|
||||
|
||||
void LocationIndicatorLayer::setImageTiltDisplacement(const PropertyValue<float>& value) {
|
||||
if (value == getImageTiltDisplacement()) return;
|
||||
auto impl_ = mutableImpl();
|
||||
impl_->layout.get<ImageTiltDisplacement>() = value;
|
||||
baseImpl = std::move(impl_);
|
||||
observer->onLayerChanged(*this);
|
||||
}
|
||||
PropertyValue<float> LocationIndicatorLayer::getDefaultPerspectiveCompensation() {
|
||||
return PerspectiveCompensation::defaultValue();
|
||||
}
|
||||
|
||||
const PropertyValue<float>& LocationIndicatorLayer::getPerspectiveCompensation() const {
|
||||
return impl().layout.get<PerspectiveCompensation>();
|
||||
}
|
||||
|
||||
void LocationIndicatorLayer::setPerspectiveCompensation(const PropertyValue<float>& value) {
|
||||
if (value == getPerspectiveCompensation()) return;
|
||||
auto impl_ = mutableImpl();
|
||||
impl_->layout.get<PerspectiveCompensation>() = value;
|
||||
baseImpl = std::move(impl_);
|
||||
observer->onLayerChanged(*this);
|
||||
}
|
||||
PropertyValue<expression::Image> LocationIndicatorLayer::getDefaultShadowImage() {
|
||||
return ShadowImage::defaultValue();
|
||||
}
|
||||
@@ -250,7 +220,7 @@ TransitionOptions LocationIndicatorLayer::getBearingTransition() const {
|
||||
}
|
||||
|
||||
PropertyValue<float> LocationIndicatorLayer::getDefaultBearingImageSize() {
|
||||
return {0};
|
||||
return {1};
|
||||
}
|
||||
|
||||
const PropertyValue<float>& LocationIndicatorLayer::getBearingImageSize() const {
|
||||
@@ -276,6 +246,33 @@ TransitionOptions LocationIndicatorLayer::getBearingImageSizeTransition() const
|
||||
return impl().paint.template get<BearingImageSize>().options;
|
||||
}
|
||||
|
||||
PropertyValue<float> LocationIndicatorLayer::getDefaultImageTiltDisplacement() {
|
||||
return {0};
|
||||
}
|
||||
|
||||
const PropertyValue<float>& LocationIndicatorLayer::getImageTiltDisplacement() const {
|
||||
return impl().paint.template get<ImageTiltDisplacement>().value;
|
||||
}
|
||||
|
||||
void LocationIndicatorLayer::setImageTiltDisplacement(const PropertyValue<float>& value) {
|
||||
if (value == getImageTiltDisplacement())
|
||||
return;
|
||||
auto impl_ = mutableImpl();
|
||||
impl_->paint.template get<ImageTiltDisplacement>().value = value;
|
||||
baseImpl = std::move(impl_);
|
||||
observer->onLayerChanged(*this);
|
||||
}
|
||||
|
||||
void LocationIndicatorLayer::setImageTiltDisplacementTransition(const TransitionOptions& options) {
|
||||
auto impl_ = mutableImpl();
|
||||
impl_->paint.template get<ImageTiltDisplacement>().options = options;
|
||||
baseImpl = std::move(impl_);
|
||||
}
|
||||
|
||||
TransitionOptions LocationIndicatorLayer::getImageTiltDisplacementTransition() const {
|
||||
return impl().paint.template get<ImageTiltDisplacement>().options;
|
||||
}
|
||||
|
||||
PropertyValue<std::array<double, 3>> LocationIndicatorLayer::getDefaultLocation() {
|
||||
return {{{0, 0, 0}}};
|
||||
}
|
||||
@@ -303,8 +300,35 @@ TransitionOptions LocationIndicatorLayer::getLocationTransition() const {
|
||||
return impl().paint.template get<Location>().options;
|
||||
}
|
||||
|
||||
PropertyValue<float> LocationIndicatorLayer::getDefaultPerspectiveCompensation() {
|
||||
return {0.85};
|
||||
}
|
||||
|
||||
const PropertyValue<float>& LocationIndicatorLayer::getPerspectiveCompensation() const {
|
||||
return impl().paint.template get<PerspectiveCompensation>().value;
|
||||
}
|
||||
|
||||
void LocationIndicatorLayer::setPerspectiveCompensation(const PropertyValue<float>& value) {
|
||||
if (value == getPerspectiveCompensation())
|
||||
return;
|
||||
auto impl_ = mutableImpl();
|
||||
impl_->paint.template get<PerspectiveCompensation>().value = value;
|
||||
baseImpl = std::move(impl_);
|
||||
observer->onLayerChanged(*this);
|
||||
}
|
||||
|
||||
void LocationIndicatorLayer::setPerspectiveCompensationTransition(const TransitionOptions& options) {
|
||||
auto impl_ = mutableImpl();
|
||||
impl_->paint.template get<PerspectiveCompensation>().options = options;
|
||||
baseImpl = std::move(impl_);
|
||||
}
|
||||
|
||||
TransitionOptions LocationIndicatorLayer::getPerspectiveCompensationTransition() const {
|
||||
return impl().paint.template get<PerspectiveCompensation>().options;
|
||||
}
|
||||
|
||||
PropertyValue<float> LocationIndicatorLayer::getDefaultShadowImageSize() {
|
||||
return {0};
|
||||
return {1};
|
||||
}
|
||||
|
||||
const PropertyValue<float>& LocationIndicatorLayer::getShadowImageSize() const {
|
||||
@@ -331,7 +355,7 @@ TransitionOptions LocationIndicatorLayer::getShadowImageSizeTransition() const {
|
||||
}
|
||||
|
||||
PropertyValue<float> LocationIndicatorLayer::getDefaultTopImageSize() {
|
||||
return {0};
|
||||
return {1};
|
||||
}
|
||||
|
||||
const PropertyValue<float>& LocationIndicatorLayer::getTopImageSize() const {
|
||||
@@ -361,7 +385,7 @@ using namespace conversion;
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr uint8_t kPaintPropertyCount = 16u;
|
||||
constexpr uint8_t kPaintPropertyCount = 20u;
|
||||
|
||||
enum class Property : uint8_t {
|
||||
AccuracyRadius,
|
||||
@@ -369,7 +393,9 @@ enum class Property : uint8_t {
|
||||
AccuracyRadiusColor,
|
||||
Bearing,
|
||||
BearingImageSize,
|
||||
ImageTiltDisplacement,
|
||||
Location,
|
||||
PerspectiveCompensation,
|
||||
ShadowImageSize,
|
||||
TopImageSize,
|
||||
AccuracyRadiusTransition,
|
||||
@@ -377,12 +403,12 @@ enum class Property : uint8_t {
|
||||
AccuracyRadiusColorTransition,
|
||||
BearingTransition,
|
||||
BearingImageSizeTransition,
|
||||
ImageTiltDisplacementTransition,
|
||||
LocationTransition,
|
||||
PerspectiveCompensationTransition,
|
||||
ShadowImageSizeTransition,
|
||||
TopImageSizeTransition,
|
||||
BearingImage = kPaintPropertyCount,
|
||||
ImageTiltDisplacement,
|
||||
PerspectiveCompensation,
|
||||
ShadowImage,
|
||||
TopImage,
|
||||
};
|
||||
@@ -398,7 +424,9 @@ MAPBOX_ETERNAL_CONSTEXPR const auto layerProperties = mapbox::eternal::hash_map<
|
||||
{"accuracy-radius-color", toUint8(Property::AccuracyRadiusColor)},
|
||||
{"bearing", toUint8(Property::Bearing)},
|
||||
{"bearing-image-size", toUint8(Property::BearingImageSize)},
|
||||
{"image-tilt-displacement", toUint8(Property::ImageTiltDisplacement)},
|
||||
{"location", toUint8(Property::Location)},
|
||||
{"perspective-compensation", toUint8(Property::PerspectiveCompensation)},
|
||||
{"shadow-image-size", toUint8(Property::ShadowImageSize)},
|
||||
{"top-image-size", toUint8(Property::TopImageSize)},
|
||||
{"accuracy-radius-transition", toUint8(Property::AccuracyRadiusTransition)},
|
||||
@@ -406,12 +434,12 @@ MAPBOX_ETERNAL_CONSTEXPR const auto layerProperties = mapbox::eternal::hash_map<
|
||||
{"accuracy-radius-color-transition", toUint8(Property::AccuracyRadiusColorTransition)},
|
||||
{"bearing-transition", toUint8(Property::BearingTransition)},
|
||||
{"bearing-image-size-transition", toUint8(Property::BearingImageSizeTransition)},
|
||||
{"image-tilt-displacement-transition", toUint8(Property::ImageTiltDisplacementTransition)},
|
||||
{"location-transition", toUint8(Property::LocationTransition)},
|
||||
{"perspective-compensation-transition", toUint8(Property::PerspectiveCompensationTransition)},
|
||||
{"shadow-image-size-transition", toUint8(Property::ShadowImageSizeTransition)},
|
||||
{"top-image-size-transition", toUint8(Property::TopImageSizeTransition)},
|
||||
{"bearing-image", toUint8(Property::BearingImage)},
|
||||
{"image-tilt-displacement", toUint8(Property::ImageTiltDisplacement)},
|
||||
{"perspective-compensation", toUint8(Property::PerspectiveCompensation)},
|
||||
{"shadow-image", toUint8(Property::ShadowImage)},
|
||||
{"top-image", toUint8(Property::TopImage)}});
|
||||
|
||||
@@ -427,8 +455,12 @@ StyleProperty getLayerProperty(const LocationIndicatorLayer& layer, Property pro
|
||||
return makeStyleProperty(layer.getBearing());
|
||||
case Property::BearingImageSize:
|
||||
return makeStyleProperty(layer.getBearingImageSize());
|
||||
case Property::ImageTiltDisplacement:
|
||||
return makeStyleProperty(layer.getImageTiltDisplacement());
|
||||
case Property::Location:
|
||||
return makeStyleProperty(layer.getLocation());
|
||||
case Property::PerspectiveCompensation:
|
||||
return makeStyleProperty(layer.getPerspectiveCompensation());
|
||||
case Property::ShadowImageSize:
|
||||
return makeStyleProperty(layer.getShadowImageSize());
|
||||
case Property::TopImageSize:
|
||||
@@ -443,18 +475,18 @@ StyleProperty getLayerProperty(const LocationIndicatorLayer& layer, Property pro
|
||||
return makeStyleProperty(layer.getBearingTransition());
|
||||
case Property::BearingImageSizeTransition:
|
||||
return makeStyleProperty(layer.getBearingImageSizeTransition());
|
||||
case Property::ImageTiltDisplacementTransition:
|
||||
return makeStyleProperty(layer.getImageTiltDisplacementTransition());
|
||||
case Property::LocationTransition:
|
||||
return makeStyleProperty(layer.getLocationTransition());
|
||||
case Property::PerspectiveCompensationTransition:
|
||||
return makeStyleProperty(layer.getPerspectiveCompensationTransition());
|
||||
case Property::ShadowImageSizeTransition:
|
||||
return makeStyleProperty(layer.getShadowImageSizeTransition());
|
||||
case Property::TopImageSizeTransition:
|
||||
return makeStyleProperty(layer.getTopImageSizeTransition());
|
||||
case Property::BearingImage:
|
||||
return makeStyleProperty(layer.getBearingImage());
|
||||
case Property::ImageTiltDisplacement:
|
||||
return makeStyleProperty(layer.getImageTiltDisplacement());
|
||||
case Property::PerspectiveCompensation:
|
||||
return makeStyleProperty(layer.getPerspectiveCompensation());
|
||||
case Property::ShadowImage:
|
||||
return makeStyleProperty(layer.getShadowImage());
|
||||
case Property::TopImage:
|
||||
@@ -491,8 +523,8 @@ optional<Error> LocationIndicatorLayer::setPropertyInternal(const std::string& n
|
||||
auto property = static_cast<Property>(it->second);
|
||||
|
||||
if (property == Property::AccuracyRadius || property == Property::BearingImageSize ||
|
||||
property == Property::ShadowImageSize || property == Property::TopImageSize ||
|
||||
property == Property::ImageTiltDisplacement || property == Property::PerspectiveCompensation) {
|
||||
property == Property::ImageTiltDisplacement || property == Property::PerspectiveCompensation ||
|
||||
property == Property::ShadowImageSize || property == Property::TopImageSize) {
|
||||
Error error;
|
||||
const auto& typedValue = convert<PropertyValue<float>>(value, error, false, false);
|
||||
if (!typedValue) {
|
||||
@@ -509,16 +541,6 @@ optional<Error> LocationIndicatorLayer::setPropertyInternal(const std::string& n
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
if (property == Property::ShadowImageSize) {
|
||||
setShadowImageSize(*typedValue);
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
if (property == Property::TopImageSize) {
|
||||
setTopImageSize(*typedValue);
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
if (property == Property::ImageTiltDisplacement) {
|
||||
setImageTiltDisplacement(*typedValue);
|
||||
return nullopt;
|
||||
@@ -528,6 +550,16 @@ optional<Error> LocationIndicatorLayer::setPropertyInternal(const std::string& n
|
||||
setPerspectiveCompensation(*typedValue);
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
if (property == Property::ShadowImageSize) {
|
||||
setShadowImageSize(*typedValue);
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
if (property == Property::TopImageSize) {
|
||||
setTopImageSize(*typedValue);
|
||||
return nullopt;
|
||||
}
|
||||
}
|
||||
if (property == Property::AccuracyRadiusBorderColor || property == Property::AccuracyRadiusColor) {
|
||||
Error error;
|
||||
@@ -620,11 +652,21 @@ optional<Error> LocationIndicatorLayer::setPropertyInternal(const std::string& n
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
if (property == Property::ImageTiltDisplacementTransition) {
|
||||
setImageTiltDisplacementTransition(*transition);
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
if (property == Property::LocationTransition) {
|
||||
setLocationTransition(*transition);
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
if (property == Property::PerspectiveCompensationTransition) {
|
||||
setPerspectiveCompensationTransition(*transition);
|
||||
return nullopt;
|
||||
}
|
||||
|
||||
if (property == Property::ShadowImageSizeTransition) {
|
||||
setShadowImageSizeTransition(*transition);
|
||||
return nullopt;
|
||||
|
||||
@@ -21,16 +21,6 @@ struct BearingImage : LayoutProperty<expression::Image> {
|
||||
static expression::Image defaultValue() { return {}; }
|
||||
};
|
||||
|
||||
struct ImageTiltDisplacement : LayoutProperty<float> {
|
||||
static constexpr const char *name() { return "image-tilt-displacement"; }
|
||||
static float defaultValue() { return 0; }
|
||||
};
|
||||
|
||||
struct PerspectiveCompensation : LayoutProperty<float> {
|
||||
static constexpr const char *name() { return "perspective-compensation"; }
|
||||
static float defaultValue() { return 0.85; }
|
||||
};
|
||||
|
||||
struct ShadowImage : LayoutProperty<expression::Image> {
|
||||
static constexpr const char *name() { return "shadow-image"; }
|
||||
static expression::Image defaultValue() { return {}; }
|
||||
@@ -58,6 +48,10 @@ struct Bearing : PaintProperty<Rotation> {
|
||||
};
|
||||
|
||||
struct BearingImageSize : PaintProperty<float> {
|
||||
static float defaultValue() { return 1; }
|
||||
};
|
||||
|
||||
struct ImageTiltDisplacement : PaintProperty<float> {
|
||||
static float defaultValue() { return 0; }
|
||||
};
|
||||
|
||||
@@ -65,18 +59,20 @@ struct Location : PaintProperty<std::array<double, 3>> {
|
||||
static std::array<double, 3> defaultValue() { return {{0, 0, 0}}; }
|
||||
};
|
||||
|
||||
struct PerspectiveCompensation : PaintProperty<float> {
|
||||
static float defaultValue() { return 0.85; }
|
||||
};
|
||||
|
||||
struct ShadowImageSize : PaintProperty<float> {
|
||||
static float defaultValue() { return 0; }
|
||||
static float defaultValue() { return 1; }
|
||||
};
|
||||
|
||||
struct TopImageSize : PaintProperty<float> {
|
||||
static float defaultValue() { return 0; }
|
||||
static float defaultValue() { return 1; }
|
||||
};
|
||||
|
||||
class LocationIndicatorLayoutProperties : public Properties<
|
||||
BearingImage,
|
||||
ImageTiltDisplacement,
|
||||
PerspectiveCompensation,
|
||||
ShadowImage,
|
||||
TopImage
|
||||
> {};
|
||||
@@ -87,7 +83,9 @@ class LocationIndicatorPaintProperties : public Properties<
|
||||
AccuracyRadiusColor,
|
||||
Bearing,
|
||||
BearingImageSize,
|
||||
ImageTiltDisplacement,
|
||||
Location,
|
||||
PerspectiveCompensation,
|
||||
ShadowImageSize,
|
||||
TopImageSize
|
||||
> {};
|
||||
|
||||