Disable icon scaling with offsets (#3928)
This commit is contained in:
@@ -39,6 +39,7 @@ layout (std140) uniform SymbolDrawableUBO {
|
|||||||
bool u_pitch_with_map;
|
bool u_pitch_with_map;
|
||||||
bool u_is_size_zoom_constant;
|
bool u_is_size_zoom_constant;
|
||||||
bool u_is_size_feature_constant;
|
bool u_is_size_feature_constant;
|
||||||
|
bool u_is_offset;
|
||||||
|
|
||||||
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
||||||
highp float u_size; // used when size is both zoom and feature constant
|
highp float u_size; // used when size is both zoom and feature constant
|
||||||
@@ -115,7 +116,9 @@ lowp float opacity = u_opacity;
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!u_is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
float fontScale = u_is_text_prop ? size / 24.0 : size;
|
float fontScale = u_is_text_prop ? size / 24.0 : size;
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ layout (std140) uniform SymbolDrawableUBO {
|
|||||||
bool u_pitch_with_map;
|
bool u_pitch_with_map;
|
||||||
bool u_is_size_zoom_constant;
|
bool u_is_size_zoom_constant;
|
||||||
bool u_is_size_feature_constant;
|
bool u_is_size_feature_constant;
|
||||||
|
bool u_is_offset;
|
||||||
|
|
||||||
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
||||||
highp float u_size; // used when size is both zoom and feature constant
|
highp float u_size; // used when size is both zoom and feature constant
|
||||||
@@ -167,7 +168,9 @@ lowp float halo_blur = u_halo_blur;
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!u_is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
float fontScale = u_is_text_prop ? size / 24.0 : size;
|
float fontScale = u_is_text_prop ? size / 24.0 : size;
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ layout (std140) uniform SymbolDrawableUBO {
|
|||||||
bool u_pitch_with_map;
|
bool u_pitch_with_map;
|
||||||
bool u_is_size_zoom_constant;
|
bool u_is_size_zoom_constant;
|
||||||
bool u_is_size_feature_constant;
|
bool u_is_size_feature_constant;
|
||||||
|
bool u_is_offset;
|
||||||
|
|
||||||
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
||||||
highp float u_size; // used when size is both zoom and feature constant
|
highp float u_size; // used when size is both zoom and feature constant
|
||||||
@@ -166,7 +167,9 @@ lowp float halo_blur = u_halo_blur;
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!u_is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
float fontScale = size / 24.0;
|
float fontScale = size / 24.0;
|
||||||
|
|
||||||
|
|||||||
@@ -29,19 +29,20 @@ struct alignas(16) SymbolDrawableUBO {
|
|||||||
/* 216 */ /*bool*/ int pitch_with_map;
|
/* 216 */ /*bool*/ int pitch_with_map;
|
||||||
/* 220 */ /*bool*/ int is_size_zoom_constant;
|
/* 220 */ /*bool*/ int is_size_zoom_constant;
|
||||||
/* 224 */ /*bool*/ int is_size_feature_constant;
|
/* 224 */ /*bool*/ int is_size_feature_constant;
|
||||||
|
/* 228 */ /*bool*/ int is_offset;
|
||||||
|
|
||||||
/* 228 */ float size_t;
|
/* 232 */ float size_t;
|
||||||
/* 232 */ float size;
|
/* 236 */ float size;
|
||||||
|
|
||||||
// Interpolations
|
// Interpolations
|
||||||
/* 236 */ float fill_color_t;
|
/* 240 */ float fill_color_t;
|
||||||
/* 240 */ float halo_color_t;
|
/* 244 */ float halo_color_t;
|
||||||
/* 244 */ float opacity_t;
|
/* 248 */ float opacity_t;
|
||||||
/* 248 */ float halo_width_t;
|
/* 252 */ float halo_width_t;
|
||||||
/* 252 */ float halo_blur_t;
|
/* 256 */ float halo_blur_t;
|
||||||
/* 256 */
|
/* 260 */
|
||||||
};
|
};
|
||||||
static_assert(sizeof(SymbolDrawableUBO) == 16 * 16, "wrong size");
|
static_assert(sizeof(SymbolDrawableUBO) == 17 * 16, "wrong size");
|
||||||
|
|
||||||
struct alignas(16) SymbolTilePropsUBO {
|
struct alignas(16) SymbolTilePropsUBO {
|
||||||
/* 0 */ /*bool*/ int is_text;
|
/* 0 */ /*bool*/ int is_text;
|
||||||
@@ -171,7 +172,9 @@ FragmentStage vertex vertexMain(thread const VertexStage vertx [[stage_in]],
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!drawable.is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
const float fontScale = drawable.is_text_prop ? size / 24.0 : size;
|
const float fontScale = drawable.is_text_prop ? size / 24.0 : size;
|
||||||
|
|
||||||
@@ -348,7 +351,9 @@ FragmentStage vertex vertexMain(thread const VertexStage vertx [[stage_in]],
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!drawable.is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
const float fontScale = drawable.is_text_prop ? size / 24.0 : size;
|
const float fontScale = drawable.is_text_prop ? size / 24.0 : size;
|
||||||
|
|
||||||
@@ -583,7 +588,9 @@ FragmentStage vertex vertexMain(thread const VertexStage vertx [[stage_in]],
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!drawable.is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
const float fontScale = size / 24.0;
|
const float fontScale = size / 24.0;
|
||||||
|
|
||||||
|
|||||||
@@ -18,19 +18,20 @@ struct alignas(16) SymbolDrawableUBO {
|
|||||||
/* 216 */ /*bool*/ int pitch_with_map;
|
/* 216 */ /*bool*/ int pitch_with_map;
|
||||||
/* 220 */ /*bool*/ int is_size_zoom_constant;
|
/* 220 */ /*bool*/ int is_size_zoom_constant;
|
||||||
/* 224 */ /*bool*/ int is_size_feature_constant;
|
/* 224 */ /*bool*/ int is_size_feature_constant;
|
||||||
|
/* 228 */ /*bool*/ int is_offset;
|
||||||
|
|
||||||
/* 228 */ float size_t;
|
/* 232 */ float size_t;
|
||||||
/* 232 */ float size;
|
/* 236 */ float size;
|
||||||
|
|
||||||
// Interpolations
|
// Interpolations
|
||||||
/* 236 */ float fill_color_t;
|
/* 240 */ float fill_color_t;
|
||||||
/* 240 */ float halo_color_t;
|
/* 244 */ float halo_color_t;
|
||||||
/* 244 */ float opacity_t;
|
/* 248 */ float opacity_t;
|
||||||
/* 248 */ float halo_width_t;
|
/* 252 */ float halo_width_t;
|
||||||
/* 252 */ float halo_blur_t;
|
/* 256 */ float halo_blur_t;
|
||||||
/* 256 */
|
/* 260 */
|
||||||
};
|
};
|
||||||
static_assert(sizeof(SymbolDrawableUBO) == 16 * 16);
|
static_assert(sizeof(SymbolDrawableUBO) == 17 * 16);
|
||||||
|
|
||||||
struct alignas(16) SymbolTilePropsUBO {
|
struct alignas(16) SymbolTilePropsUBO {
|
||||||
/* 0 */ /*bool*/ int is_text;
|
/* 0 */ /*bool*/ int is_text;
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ struct SymbolDrawableUBO {
|
|||||||
bool pitch_with_map;
|
bool pitch_with_map;
|
||||||
bool is_size_zoom_constant;
|
bool is_size_zoom_constant;
|
||||||
bool is_size_feature_constant;
|
bool is_size_feature_constant;
|
||||||
|
bool is_offset;
|
||||||
|
|
||||||
float size_t;
|
float size_t;
|
||||||
float size;
|
float size;
|
||||||
@@ -106,7 +107,9 @@ void main() {
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!drawable.is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
const float fontScale = drawable.is_text_prop ? size / 24.0 : size;
|
const float fontScale = drawable.is_text_prop ? size / 24.0 : size;
|
||||||
|
|
||||||
@@ -256,6 +259,7 @@ struct SymbolDrawableUBO {
|
|||||||
bool pitch_with_map;
|
bool pitch_with_map;
|
||||||
bool is_size_zoom_constant;
|
bool is_size_zoom_constant;
|
||||||
bool is_size_feature_constant;
|
bool is_size_feature_constant;
|
||||||
|
bool is_offset;
|
||||||
|
|
||||||
float size_t;
|
float size_t;
|
||||||
float size;
|
float size;
|
||||||
@@ -335,7 +339,9 @@ void main() {
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!drawable.is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
const float fontScale = drawable.is_text_prop ? size / 24.0 : size;
|
const float fontScale = drawable.is_text_prop ? size / 24.0 : size;
|
||||||
|
|
||||||
@@ -563,6 +569,7 @@ struct SymbolDrawableUBO {
|
|||||||
bool pitch_with_map;
|
bool pitch_with_map;
|
||||||
bool is_size_zoom_constant;
|
bool is_size_zoom_constant;
|
||||||
bool is_size_feature_constant;
|
bool is_size_feature_constant;
|
||||||
|
bool is_offset;
|
||||||
|
|
||||||
float size_t;
|
float size_t;
|
||||||
float size;
|
float size;
|
||||||
@@ -644,7 +651,9 @@ void main() {
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!drawable.is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
const float fontScale = size / 24.0;
|
const float fontScale = size / 24.0;
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ struct SymbolDrawableUBO {
|
|||||||
pitch_with_map: u32,
|
pitch_with_map: u32,
|
||||||
is_size_zoom_constant: u32,
|
is_size_zoom_constant: u32,
|
||||||
is_size_feature_constant: u32,
|
is_size_feature_constant: u32,
|
||||||
|
is_offset: u32,
|
||||||
|
|
||||||
size_t: f32,
|
size_t: f32,
|
||||||
size: f32,
|
size: f32,
|
||||||
@@ -175,7 +176,9 @@ fn main(in: VertexInput) -> VertexOutput {
|
|||||||
);
|
);
|
||||||
let perspective_ratio = clamp(0.5 + 0.5 * distance_ratio, 0.0, 4.0);
|
let perspective_ratio = clamp(0.5 + 0.5 * distance_ratio, 0.0, 4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (drawable.is_offset == 0u) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
let is_text = drawable.is_text_prop != 0u;
|
let is_text = drawable.is_text_prop != 0u;
|
||||||
let fontScale = select(size, size / 24.0, is_text);
|
let fontScale = select(size, size / 24.0, is_text);
|
||||||
@@ -348,7 +351,9 @@ fn main(in: VertexInput) -> VertexOutput {
|
|||||||
);
|
);
|
||||||
let perspective_ratio = clamp(0.5 + 0.5 * distance_ratio, 0.0, 4.0);
|
let perspective_ratio = clamp(0.5 + 0.5 * distance_ratio, 0.0, 4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (drawable.is_offset == 0u) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
let is_text = drawable.is_text_prop != 0u;
|
let is_text = drawable.is_text_prop != 0u;
|
||||||
let fontScale = select(size, size / 24.0, is_text);
|
let fontScale = select(size, size / 24.0, is_text);
|
||||||
@@ -597,7 +602,9 @@ fn main(in: VertexInput) -> VertexOutput {
|
|||||||
);
|
);
|
||||||
let perspective_ratio = clamp(0.5 + 0.5 * distance_ratio, 0.0, 4.0);
|
let perspective_ratio = clamp(0.5 + 0.5 * distance_ratio, 0.0, 4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (drawable.is_offset == 0u) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
let fontScale = size / 24.0;
|
let fontScale = size / 24.0;
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 39 KiB |
@@ -0,0 +1,125 @@
|
|||||||
|
{
|
||||||
|
"version": 8,
|
||||||
|
"metadata": {
|
||||||
|
"test": {
|
||||||
|
"height": 1048
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pitch": 60,
|
||||||
|
"center": [-118.78224, 39.32157],
|
||||||
|
"zoom": 14,
|
||||||
|
"sources": {
|
||||||
|
"geojson": {
|
||||||
|
"type": "geojson",
|
||||||
|
"data": {
|
||||||
|
"type": "LineString",
|
||||||
|
"coordinates": [
|
||||||
|
[
|
||||||
|
-118.78156097142148,
|
||||||
|
39.47488496583114
|
||||||
|
],
|
||||||
|
[
|
||||||
|
-118.7823961479745,
|
||||||
|
39.28832054802072
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sprite": "local://sprites/almccon",
|
||||||
|
"layers": [
|
||||||
|
{
|
||||||
|
"id": "background",
|
||||||
|
"type": "background",
|
||||||
|
"layout": {"visibility": "visible"},
|
||||||
|
"paint": {"background-color": "rgba(204, 204, 204, 1)"}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "streets",
|
||||||
|
"type": "line",
|
||||||
|
"source": "geojson",
|
||||||
|
"layout": {
|
||||||
|
"visibility": "visible",
|
||||||
|
"line-cap": "round",
|
||||||
|
"line-join": "round"
|
||||||
|
},
|
||||||
|
"paint": {
|
||||||
|
"line-color": "rgba(32, 32, 32, 1)",
|
||||||
|
"line-width": 150
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "road-lane-dashes-right",
|
||||||
|
"type": "line",
|
||||||
|
"source": "geojson",
|
||||||
|
"layout": {"line-cap": "round", "line-join": "round"},
|
||||||
|
"paint": {
|
||||||
|
"line-color": "hsl(0, 0%, 100%)",
|
||||||
|
"line-dasharray": [4, 12],
|
||||||
|
"line-offset": 7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "road-lane-dashes-left",
|
||||||
|
"type": "line",
|
||||||
|
"source": "geojson",
|
||||||
|
"layout": {"line-cap": "round", "line-join": "round"},
|
||||||
|
"paint": {
|
||||||
|
"line-color": "hsl(0, 0%, 100%)",
|
||||||
|
"line-dasharray": [4, 12],
|
||||||
|
"line-offset": -7
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "road-arrows-center",
|
||||||
|
"type": "symbol",
|
||||||
|
"source": "geojson",
|
||||||
|
"layout": {
|
||||||
|
"icon-allow-overlap": true,
|
||||||
|
"icon-image": "through",
|
||||||
|
"icon-offset": [0, 0],
|
||||||
|
"icon-rotate": 90,
|
||||||
|
"icon-rotation-alignment": "map",
|
||||||
|
"icon-pitch-alignment": "map",
|
||||||
|
"icon-size": 1,
|
||||||
|
"symbol-placement": "line",
|
||||||
|
"symbol-spacing": 300
|
||||||
|
},
|
||||||
|
"paint": {"icon-opacity": 0.8}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "road-arrows-right",
|
||||||
|
"type": "symbol",
|
||||||
|
"source": "geojson",
|
||||||
|
"layout": {
|
||||||
|
"icon-allow-overlap": true,
|
||||||
|
"icon-image": "through",
|
||||||
|
"icon-offset": [50.339999999999996, 0],
|
||||||
|
"icon-rotate": 90,
|
||||||
|
"icon-rotation-alignment": "map",
|
||||||
|
"icon-pitch-alignment": "map",
|
||||||
|
"icon-size": 1,
|
||||||
|
"symbol-placement": "line",
|
||||||
|
"symbol-spacing": 300
|
||||||
|
},
|
||||||
|
"paint": {"icon-opacity": 0.8}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "road-arrows-left",
|
||||||
|
"type": "symbol",
|
||||||
|
"source": "geojson",
|
||||||
|
"layout": {
|
||||||
|
"icon-allow-overlap": true,
|
||||||
|
"icon-image": "through",
|
||||||
|
"icon-offset": [-53.339999999999996, 0],
|
||||||
|
"icon-rotate": 90,
|
||||||
|
"icon-rotation-alignment": "map",
|
||||||
|
"icon-pitch-alignment": "map",
|
||||||
|
"icon-size": 1,
|
||||||
|
"symbol-placement": "line",
|
||||||
|
"symbol-spacing": 300
|
||||||
|
},
|
||||||
|
"paint": {"icon-opacity": 0.8}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
23
metrics/integration/sprites/almccon.json
Normal file
23
metrics/integration/sprites/almccon.json
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"through": {
|
||||||
|
"width": 48,
|
||||||
|
"height": 64,
|
||||||
|
"x": 531,
|
||||||
|
"y": 64,
|
||||||
|
"pixelRatio": 1
|
||||||
|
},
|
||||||
|
"through;right": {
|
||||||
|
"width": 48,
|
||||||
|
"height": 64,
|
||||||
|
"x": 579,
|
||||||
|
"y": 64,
|
||||||
|
"pixelRatio": 1
|
||||||
|
},
|
||||||
|
"through;slight_right": {
|
||||||
|
"width": 48,
|
||||||
|
"height": 64,
|
||||||
|
"x": 627,
|
||||||
|
"y": 64,
|
||||||
|
"pixelRatio": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
metrics/integration/sprites/almccon.png
Normal file
BIN
metrics/integration/sprites/almccon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
@@ -29,6 +29,7 @@ layout (std140) uniform SymbolDrawableUBO {
|
|||||||
bool u_pitch_with_map;
|
bool u_pitch_with_map;
|
||||||
bool u_is_size_zoom_constant;
|
bool u_is_size_zoom_constant;
|
||||||
bool u_is_size_feature_constant;
|
bool u_is_size_feature_constant;
|
||||||
|
bool u_is_offset;
|
||||||
|
|
||||||
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
||||||
highp float u_size; // used when size is both zoom and feature constant
|
highp float u_size; // used when size is both zoom and feature constant
|
||||||
@@ -98,7 +99,9 @@ void main() {
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!u_is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
float fontScale = u_is_text_prop ? size / 24.0 : size;
|
float fontScale = u_is_text_prop ? size / 24.0 : size;
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ layout (std140) uniform SymbolDrawableUBO {
|
|||||||
bool u_pitch_with_map;
|
bool u_pitch_with_map;
|
||||||
bool u_is_size_zoom_constant;
|
bool u_is_size_zoom_constant;
|
||||||
bool u_is_size_feature_constant;
|
bool u_is_size_feature_constant;
|
||||||
|
bool u_is_offset;
|
||||||
|
|
||||||
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
||||||
highp float u_size; // used when size is both zoom and feature constant
|
highp float u_size; // used when size is both zoom and feature constant
|
||||||
@@ -122,7 +123,9 @@ void main() {
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!u_is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
float fontScale = u_is_text_prop ? size / 24.0 : size;
|
float fontScale = u_is_text_prop ? size / 24.0 : size;
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ layout (std140) uniform SymbolDrawableUBO {
|
|||||||
bool u_pitch_with_map;
|
bool u_pitch_with_map;
|
||||||
bool u_is_size_zoom_constant;
|
bool u_is_size_zoom_constant;
|
||||||
bool u_is_size_feature_constant;
|
bool u_is_size_feature_constant;
|
||||||
|
bool u_is_offset;
|
||||||
|
|
||||||
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
highp float u_size_t; // used to interpolate between zoom stops when size is a composite function
|
||||||
highp float u_size; // used when size is both zoom and feature constant
|
highp float u_size; // used when size is both zoom and feature constant
|
||||||
@@ -121,7 +122,9 @@ void main() {
|
|||||||
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
0.0, // Prevents oversized near-field symbols in pitched/overzoomed tiles
|
||||||
4.0);
|
4.0);
|
||||||
|
|
||||||
size *= perspective_ratio;
|
if (!u_is_offset) {
|
||||||
|
size *= perspective_ratio;
|
||||||
|
}
|
||||||
|
|
||||||
float fontScale = size / 24.0;
|
float fontScale = size / 24.0;
|
||||||
|
|
||||||
|
|||||||
@@ -19,14 +19,16 @@ struct SymbolDrawableData : public DrawableData {
|
|||||||
const style::AlignmentType pitchAlignment_,
|
const style::AlignmentType pitchAlignment_,
|
||||||
const style::AlignmentType rotationAlignment_,
|
const style::AlignmentType rotationAlignment_,
|
||||||
const style::SymbolPlacementType placement_,
|
const style::SymbolPlacementType placement_,
|
||||||
const style::IconTextFitType textFit_)
|
const style::IconTextFitType textFit_,
|
||||||
|
const bool isOffset_)
|
||||||
: isHalo(isHalo_),
|
: isHalo(isHalo_),
|
||||||
bucketVariablePlacement(bucketVariablePlacement_),
|
bucketVariablePlacement(bucketVariablePlacement_),
|
||||||
symbolType(symbolType_),
|
symbolType(symbolType_),
|
||||||
pitchAlignment(pitchAlignment_),
|
pitchAlignment(pitchAlignment_),
|
||||||
rotationAlignment(rotationAlignment_),
|
rotationAlignment(rotationAlignment_),
|
||||||
placement(placement_),
|
placement(placement_),
|
||||||
textFit(textFit_) {}
|
textFit(textFit_),
|
||||||
|
isOffset(isOffset_) {}
|
||||||
~SymbolDrawableData() override = default;
|
~SymbolDrawableData() override = default;
|
||||||
|
|
||||||
const bool isHalo;
|
const bool isHalo;
|
||||||
@@ -36,6 +38,7 @@ struct SymbolDrawableData : public DrawableData {
|
|||||||
const style::AlignmentType rotationAlignment;
|
const style::AlignmentType rotationAlignment;
|
||||||
const style::SymbolPlacementType placement;
|
const style::SymbolPlacementType placement;
|
||||||
const style::IconTextFitType textFit;
|
const style::IconTextFitType textFit;
|
||||||
|
const bool isOffset;
|
||||||
};
|
};
|
||||||
|
|
||||||
using UniqueSymbolDrawableData = std::unique_ptr<SymbolDrawableData>;
|
using UniqueSymbolDrawableData = std::unique_ptr<SymbolDrawableData>;
|
||||||
|
|||||||
@@ -512,9 +512,11 @@ void RenderSymbolLayer::update(gfx::ShaderRegistry& shaders,
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool sortFeaturesByKey = !impl_cast(baseImpl).layout.get<SymbolSortKey>().isUndefined();
|
const auto& layout = impl_cast(baseImpl).layout;
|
||||||
|
const bool sortFeaturesByKey = !layout.get<SymbolSortKey>().isUndefined();
|
||||||
std::multiset<SegmentGroup> renderableSegments;
|
std::multiset<SegmentGroup> renderableSegments;
|
||||||
std::unique_ptr<gfx::DrawableBuilder> builder;
|
std::unique_ptr<gfx::DrawableBuilder> builder;
|
||||||
|
const bool isOffset = !layout.get<IconOffset>().isUndefined();
|
||||||
|
|
||||||
const auto currentZoom = static_cast<float>(state.getZoom());
|
const auto currentZoom = static_cast<float>(state.getZoom());
|
||||||
const auto layerPrefix = getID() + "/";
|
const auto layerPrefix = getID() + "/";
|
||||||
@@ -560,8 +562,9 @@ void RenderSymbolLayer::update(gfx::ShaderRegistry& shaders,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto& layout = *bucket.layout;
|
const auto& bucketLayout = *bucket.layout;
|
||||||
const auto values = isText ? textPropertyValues(evaluated, layout) : iconPropertyValues(evaluated, layout);
|
const auto values = isText ? textPropertyValues(evaluated, bucketLayout)
|
||||||
|
: iconPropertyValues(evaluated, bucketLayout);
|
||||||
const std::string suffix = isText ? "text/" : "icon/";
|
const std::string suffix = isText ? "text/" : "icon/";
|
||||||
|
|
||||||
const auto addVertices = [&collisionBuilder](const auto& vertices) {
|
const auto addVertices = [&collisionBuilder](const auto& vertices) {
|
||||||
@@ -708,8 +711,9 @@ void RenderSymbolLayer::update(gfx::ShaderRegistry& shaders,
|
|||||||
const auto& evaluated = getEvaluated<SymbolLayerProperties>(renderable.renderData.layerProperties);
|
const auto& evaluated = getEvaluated<SymbolLayerProperties>(renderable.renderData.layerProperties);
|
||||||
auto& bucketPaintProperties = bucket.paintProperties.at(getID());
|
auto& bucketPaintProperties = bucket.paintProperties.at(getID());
|
||||||
|
|
||||||
const auto& layout = *bucket.layout;
|
const auto& bucketLayout = *bucket.layout;
|
||||||
const auto values = isText ? textPropertyValues(evaluated, layout) : iconPropertyValues(evaluated, layout);
|
const auto values = isText ? textPropertyValues(evaluated, bucketLayout)
|
||||||
|
: iconPropertyValues(evaluated, bucketLayout);
|
||||||
|
|
||||||
const auto& atlases = tile.getAtlasTextures();
|
const auto& atlases = tile.getAtlasTextures();
|
||||||
if (!atlases) {
|
if (!atlases) {
|
||||||
@@ -759,7 +763,7 @@ void RenderSymbolLayer::update(gfx::ShaderRegistry& shaders,
|
|||||||
textSizeIsZoomConstant);
|
textSizeIsZoomConstant);
|
||||||
}
|
}
|
||||||
if (!isText && !tileInfo.iconTweaker) {
|
if (!isText && !tileInfo.iconTweaker) {
|
||||||
const bool iconScaled = layout.get<IconSize>().constantOr(1.0) != 1.0 || bucket.iconsNeedLinear;
|
const bool iconScaled = bucketLayout.get<IconSize>().constantOr(1.0) != 1.0 || bucket.iconsNeedLinear;
|
||||||
tileInfo.iconTweaker = std::make_shared<gfx::DrawableAtlasesTweaker>(atlases,
|
tileInfo.iconTweaker = std::make_shared<gfx::DrawableAtlasesTweaker>(atlases,
|
||||||
idSymbolImageIconTexture,
|
idSymbolImageIconTexture,
|
||||||
idSymbolImageTexture,
|
idSymbolImageTexture,
|
||||||
@@ -819,8 +823,9 @@ void RenderSymbolLayer::update(gfx::ShaderRegistry& shaders,
|
|||||||
/*.symbolType=*/renderable.type,
|
/*.symbolType=*/renderable.type,
|
||||||
/*.pitchAlignment=*/values.pitchAlignment,
|
/*.pitchAlignment=*/values.pitchAlignment,
|
||||||
/*.rotationAlignment=*/values.rotationAlignment,
|
/*.rotationAlignment=*/values.rotationAlignment,
|
||||||
/*.placement=*/layout.get<SymbolPlacement>(),
|
/*.placement=*/bucketLayout.get<SymbolPlacement>(),
|
||||||
/*.textFit=*/layout.get<IconTextFit>()));
|
/*.textFit=*/bucketLayout.get<IconTextFit>(),
|
||||||
|
/*.isOffset=*/isOffset));
|
||||||
|
|
||||||
tileLayerGroup->addDrawable(passes, tileID, std::move(drawable));
|
tileLayerGroup->addDrawable(passes, tileID, std::move(drawable));
|
||||||
++stats.drawablesAdded;
|
++stats.drawablesAdded;
|
||||||
|
|||||||
@@ -181,6 +181,7 @@ void SymbolLayerTweaker::execute(LayerGroupBase& layerGroup, const PaintParamete
|
|||||||
.pitch_with_map = (symbolData.pitchAlignment == style::AlignmentType::Map),
|
.pitch_with_map = (symbolData.pitchAlignment == style::AlignmentType::Map),
|
||||||
.is_size_zoom_constant = size.isZoomConstant,
|
.is_size_zoom_constant = size.isZoomConstant,
|
||||||
.is_size_feature_constant = size.isFeatureConstant,
|
.is_size_feature_constant = size.isFeatureConstant,
|
||||||
|
.is_offset = symbolData.isOffset,
|
||||||
|
|
||||||
.size_t = size.sizeT,
|
.size_t = size.sizeT,
|
||||||
.size = size.size,
|
.size = size.size,
|
||||||
|
|||||||
Reference in New Issue
Block a user