osmgl 0.18.1 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/osmgl.d.cts CHANGED
@@ -903,7 +903,13 @@ declare class Shader {
903
903
  readonly program: WebGLProgram;
904
904
  private uniforms;
905
905
  private attribs;
906
- constructor(ctx: Context, name: string, vertexSource: string, fragmentSource: string, defines?: Record<string, string | number | boolean>);
906
+ constructor(ctx: Context, name: string, vertexSource: string, fragmentSource: string, defines?: Record<string, string | number | boolean>,
907
+ /**
908
+ * Места атрибутов, которые надо повторить, — у ВАРИАНТА программы (см. surfaceShader): VAO
909
+ * собран по местам базовой программы и обязан подойти каждому варианту. Общий список мест
910
+ * (ATTRIB_SLOTS) тут не годится: атрибутов больше, чем гарантированных шестнадцати мест.
911
+ */
912
+ bind?: ReadonlyMap<string, number>);
907
913
  private cacheLocations;
908
914
  use(): void;
909
915
  attribLocation(name: string): number;
@@ -1351,6 +1357,41 @@ interface FillExtrusionLayerSpec extends LayerBase {
1351
1357
  * Цвет при этом остаётся за темой: ручка только добавляет блик и градиент поверх него.
1352
1358
  */
1353
1359
  ice?: Interpolated<number>;
1360
+ /**
1361
+ * ОТРАЖЕНИЕ ДОМОВ В СТЕКЛЯННОЙ ЗЕМЛЕ, 0..1 — сила зеркала. Ноль — отражения нет.
1362
+ *
1363
+ * Работает только с z18 (`REFLECTION_MIN_ZOOM` в `layers/renderer`) и без рельефа: это второй
1364
+ * проход по всем домам кадра, и на общем плане он удвоил бы самую дорогую геометрию.
1365
+ */
1366
+ reflection?: Interpolated<number>;
1367
+ /**
1368
+ * БЛЕСК СТЕКЛЯННОЙ ЗЕМЛИ, 0..1: отражение неба по Френелю — чем дальше и чем более скользящий
1369
+ * взгляд, тем сильнее земля берёт цвет горизонта. Работает на любом зуме (это один квад), в
1370
+ * отличие от отражения домов.
1371
+ */
1372
+ reflectionGloss?: Interpolated<number>;
1373
+ /**
1374
+ * ДОМ КАК СТЕКЛО (по образцу Baidu) — только вместе с `ice`.
1375
+ *
1376
+ * `glassTint` — цвет стекла у земли (у Baidu бирюзовый), `glassTintAmount` — насколько (0..1),
1377
+ * `glassTintHeight` — на какой высоте, метры, цвет растворяется: низ цветной, верх светлый, как
1378
+ * у Baidu. Кровля светлее всего — оттенка на ней одна десятая. `glassRim` — светлая
1379
+ * кромка по Френелю: грань, повёрнутая к взгляду ребром, светится, как край стекла.
1380
+ */
1381
+ glassTint?: Interpolated<string>;
1382
+ glassTintAmount?: Interpolated<number>;
1383
+ glassTintHeight?: Interpolated<number>;
1384
+ glassRim?: Interpolated<number>;
1385
+ /**
1386
+ * Насколько верх дома ярче низа, 0..1 — в СВОЁМ цвете, без подмеса белого (0.1 — на 10 %).
1387
+ * Кровля — наравне с верхом стены. Только с `glassTintAmount`.
1388
+ */
1389
+ glassTopLight?: Interpolated<number>;
1390
+ /**
1391
+ * Градиент по плоской крыше, 0..1: ближний к камере край — в тон стекла, дальний — светлый.
1392
+ * Чтобы крыши стеклянного квартала не сливались в одно поле. Только с `glassTintAmount`.
1393
+ */
1394
+ glassRoofGradient?: Interpolated<number>;
1354
1395
  /**
1355
1396
  * Доля светящихся окон, 0..1 — для ночных тем. Какие именно окна горят,
1356
1397
  * решает хеш ячейки, поэтому при движении камеры свет не «бегает».
@@ -1851,6 +1892,13 @@ interface LightSpec {
1851
1892
  fillAltitude: number;
1852
1893
  fillColor: string;
1853
1894
  fillIntensity: number;
1895
+ /**
1896
+ * Сила теней, 0..1 (по умолчанию 1). Ноль — теней нет ВОВСЕ: проход карты теней не запускается.
1897
+ *
1898
+ * Заведено ради стеклянных тем по образцу Baidu: там город светится, и серое пятно у основания
1899
+ * каждого дома читается грязью. Дробное значение ослабляет тень на земле.
1900
+ */
1901
+ shadowStrength?: number;
1854
1902
  }
1855
1903
  /**
1856
1904
  * Небо и дымка.
@@ -3212,6 +3260,16 @@ declare class SeamAssembler {
3212
3260
  * камеры от того набора кусков, что есть прямо сейчас, — и здание «дышало» бы: то целое, то
3213
3261
  * половина. Пока хоть один кусок на месте, дом остаётся тем же самым.
3214
3262
  */
3263
+ /**
3264
+ * Дома, которые НЕ СШИЛИСЬ, с подписью набора кусков, на котором это случилось (01.10.2026).
3265
+ *
3266
+ * Не сшивается дом, у которого часть кусков не загружена: остатки не смыкаются. Без этой памяти
3267
+ * такой дом считался «устаревшим» на каждом заходе и снова отдавался объединению; когда таких
3268
+ * домов больше бюджета, заход не заканчивался НИКОГДА (`pending`), и карта в покое рисовала кадр
3269
+ * за кадром, проигрывая одни и те же объединения (замер на эмуляторе: ~28 кадров в секунду,
3270
+ * поток GL занят наполовину). Повторяем только при смене набора кусков.
3271
+ */
3272
+ private failed;
3215
3273
  private cache;
3216
3274
  /**
3217
3275
  * Пересобрать то, что изменилось.
@@ -3491,6 +3549,8 @@ interface Candidate {
3491
3549
  x: number;
3492
3550
  y: number;
3493
3551
  }[];
3552
+ /** Те же вершины линии в меркаторе (x, y парами) — по ним сетка мест отмеряется ПО ЗЕМЛЕ. */
3553
+ lineWorld?: number[];
3494
3554
  }
3495
3555
  /**
3496
3556
  * Размещённая подпись: то, что реально видно на экране в этом кадре.
@@ -5400,6 +5460,19 @@ declare const DEFAULT_SHADOWS: ShadowSettings;
5400
5460
  declare class LayerRenderer {
5401
5461
  private fill;
5402
5462
  private surface;
5463
+ /**
5464
+ * ВАРИАНТЫ ПРОГРАММЫ ПОВЕРХНОСТИ: без кода теней и под один материал (см. NO_SHADOWS и MATERIAL в
5465
+ * шейдере). Собираются по первой надобности и живут до конца — их не больше десятка.
5466
+ */
5467
+ private surfaceVariants;
5468
+ /** Варианты программы зданий: без теней, без фасада, без стекла (см. buildingShader). */
5469
+ private buildingVariants;
5470
+ /** Варианты программы линий: без теней, под один материал и один рисунок (см. lineShader). */
5471
+ private lineVariants;
5472
+ /** Для чего варианты уже собраны (см. warmVariants): стиль, тени, детализация. */
5473
+ private warmedStyle;
5474
+ private warmedShadows;
5475
+ private warmedDetail;
5403
5476
  private surfaceLocs;
5404
5477
  private line;
5405
5478
  private building;
@@ -5443,6 +5516,17 @@ declare class LayerRenderer {
5443
5516
  /** Настройки теней; правит карта через `setShadows`. */
5444
5517
  readonly shadows: ShadowSettings;
5445
5518
  private shadowTarget;
5519
+ /** Отражение домов в стеклянной земле (см. `renderReflection`). */
5520
+ private reflectionTarget;
5521
+ private reflectionShader;
5522
+ private reflectionQuad;
5523
+ private reflectionBuffers;
5524
+ /** Сила отражения в ЭТОМ кадре; ноль — прохода нет. */
5525
+ private reflectionStrength;
5526
+ /** Блеск стеклянной земли в этом кадре (см. `reflectionGloss`). */
5527
+ private reflectionGloss;
5528
+ /** Идёт проход отражения: шейдер домов переворачивает их по высоте. */
5529
+ private mirror;
5446
5530
  /** Пустышка под sampler2DShadow, когда теней нет, — см. createShadowPlaceholder. */
5447
5531
  private shadowPlaceholder;
5448
5532
  /** Тени посчитаны в этом кадре и их можно накладывать. */
@@ -5641,7 +5725,10 @@ declare class LayerRenderer {
5641
5725
  hiddenVenueLayer: string | null;
5642
5726
  /** Урезанные индексы по тайлам; ключ — тайл, отпечаток — состав набора. */
5643
5727
  private hiddenCut;
5728
+ /** Отпечаток общего набора скрытого (заменённые + оболочки). `null` — ещё не считали. */
5644
5729
  private hiddenStamp;
5730
+ /** Отпечаток раскладки швов по тайлам. */
5731
+ private hiddenTileStamps;
5645
5732
  /**
5646
5733
  * Отпечаток наборов скрытого — ОДИН раз за кадр, а не на каждый тайк.
5647
5734
  *
@@ -5977,6 +6064,34 @@ declare class LayerRenderer {
5977
6064
  * рисует землю. Программе без соответствующих юниформов установка молча проходит мимо.
5978
6065
  */
5979
6066
  private applyTileScale;
6067
+ /** Номер материала слоя; ноль — без материала (в том числе при нулевой детализации). */
6068
+ private materialIdOf;
6069
+ /**
6070
+ * Программа поверхности под этот слой и кадр. Тени выключены — берётся вариант без их кода,
6071
+ * материал — только свой. Так программа меньше, и мобильный GPU держит больше пикселей в работе:
6072
+ * на Adreno 610 полотно подешевело с 32 до 6 мс за кадр (01.10.2026).
6073
+ */
6074
+ private surfaceShader;
6075
+ /**
6076
+ * Программа зданий под этот слой и кадр — тот же приём, что у поверхности: выключенное (тени,
6077
+ * фасад при нулевой детализации, стекло вне ледяной темы) в программу не попадает. Цена здания
6078
+ * на мобильном GPU определяется размером программы, а не тем, какие ветки выполнились.
6079
+ */
6080
+ private buildingShader;
6081
+ /**
6082
+ * СОБРАТЬ ВАРИАНТЫ ПРОГРАММ ЗАРАНЕЕ — при смене стиля, а не при первой встрече в кадре.
6083
+ *
6084
+ * Сборка программы на мобильном GPU стоит десятки миллисекунд (замер на Adreno 610: кадр 187 мс
6085
+ * без единой заливки — это сборка). Встреча «по пути» приходится ровно на проезд по городу, когда
6086
+ * в кадр въезжает слой нового вида, — и выглядит рывком. Поэтому все варианты стиля собираются
6087
+ * разом: один долгий кадр при загрузке вместо рывков на ходу. Тени — по ожидаемому состоянию;
6088
+ * переключение теней соберёт свой набор один раз. Фасад зависит от зума — перебираем зумы слоя.
6089
+ */
6090
+ private warmVariants;
6091
+ /** Рисунок вдоль линии: 0 сплошная, 1 штрих, 2 шевроны, 3 стрелки, 4 только стрелки, 5 стрелки-штрих. */
6092
+ private linePatternOf;
6093
+ /** Программа линий под этот слой и кадр — тот же приём, что у поверхности (см. surfaceShader). */
6094
+ private lineShader;
5980
6095
  private applyMaterial;
5981
6096
  private drawFill;
5982
6097
  private drawLine;
@@ -6039,6 +6154,28 @@ declare class LayerRenderer {
6039
6154
  * тот проход считает всё лежащим на нуле.
6040
6155
  */
6041
6156
  private drawSurface;
6157
+ /**
6158
+ * Сила отражения в кадре: наибольшая из `reflection` видимых слоёв домов, с плавным входом на
6159
+ * `REFLECTION_MIN_ZOOM`. На рельефе и глобусе отражения нет: земля там не плоскость, и зеркало в
6160
+ * плоскости z = 0 показало бы дома не там, где они отражаются.
6161
+ */
6162
+ private reflectionStrengthOf;
6163
+ /** Блеск стеклянной земли: наибольший `reflectionGloss` видимых слоёв домов, на любом зуме. */
6164
+ private reflectionGlossOf;
6165
+ /**
6166
+ * ОТРАЖЕНИЕ ДОМОВ — В СВОЙ БУФЕР, ДО ОСНОВНОГО КАДРА.
6167
+ *
6168
+ * Приём зеркала в плоскости (`Reflector` three.js): для плоскости земли отражённая камера
6169
+ * равносильна тем же домам, перевёрнутым по высоте, — их и рисует обычный проход зданий с
6170
+ * `u_mirror = −1`. Намотка треугольников при этом зеркальная, поэтому отсекаются ПЕРЕДНИЕ грани.
6171
+ * Тени в отражении не нужны: его и так едва видно. Буфер — в полразмера кадра.
6172
+ */
6173
+ private renderReflection;
6174
+ /**
6175
+ * СТЕКЛЯННАЯ ЗЕМЛЯ — один квад во весь экран: размытое отражение домов (с z18) и блеск неба по
6176
+ * Френелю (на любом зуме). Выше горизонта не рисуется: там небо, а не стекло.
6177
+ */
6178
+ private drawReflection;
6042
6179
  private drawBuildings;
6043
6180
  /** Подсветить один сшитый дом: геометрия берётся из его же меша. */
6044
6181
  private drawSeamHighlight;
package/dist/osmgl.d.ts CHANGED
@@ -903,7 +903,13 @@ declare class Shader {
903
903
  readonly program: WebGLProgram;
904
904
  private uniforms;
905
905
  private attribs;
906
- constructor(ctx: Context, name: string, vertexSource: string, fragmentSource: string, defines?: Record<string, string | number | boolean>);
906
+ constructor(ctx: Context, name: string, vertexSource: string, fragmentSource: string, defines?: Record<string, string | number | boolean>,
907
+ /**
908
+ * Места атрибутов, которые надо повторить, — у ВАРИАНТА программы (см. surfaceShader): VAO
909
+ * собран по местам базовой программы и обязан подойти каждому варианту. Общий список мест
910
+ * (ATTRIB_SLOTS) тут не годится: атрибутов больше, чем гарантированных шестнадцати мест.
911
+ */
912
+ bind?: ReadonlyMap<string, number>);
907
913
  private cacheLocations;
908
914
  use(): void;
909
915
  attribLocation(name: string): number;
@@ -1351,6 +1357,41 @@ interface FillExtrusionLayerSpec extends LayerBase {
1351
1357
  * Цвет при этом остаётся за темой: ручка только добавляет блик и градиент поверх него.
1352
1358
  */
1353
1359
  ice?: Interpolated<number>;
1360
+ /**
1361
+ * ОТРАЖЕНИЕ ДОМОВ В СТЕКЛЯННОЙ ЗЕМЛЕ, 0..1 — сила зеркала. Ноль — отражения нет.
1362
+ *
1363
+ * Работает только с z18 (`REFLECTION_MIN_ZOOM` в `layers/renderer`) и без рельефа: это второй
1364
+ * проход по всем домам кадра, и на общем плане он удвоил бы самую дорогую геометрию.
1365
+ */
1366
+ reflection?: Interpolated<number>;
1367
+ /**
1368
+ * БЛЕСК СТЕКЛЯННОЙ ЗЕМЛИ, 0..1: отражение неба по Френелю — чем дальше и чем более скользящий
1369
+ * взгляд, тем сильнее земля берёт цвет горизонта. Работает на любом зуме (это один квад), в
1370
+ * отличие от отражения домов.
1371
+ */
1372
+ reflectionGloss?: Interpolated<number>;
1373
+ /**
1374
+ * ДОМ КАК СТЕКЛО (по образцу Baidu) — только вместе с `ice`.
1375
+ *
1376
+ * `glassTint` — цвет стекла у земли (у Baidu бирюзовый), `glassTintAmount` — насколько (0..1),
1377
+ * `glassTintHeight` — на какой высоте, метры, цвет растворяется: низ цветной, верх светлый, как
1378
+ * у Baidu. Кровля светлее всего — оттенка на ней одна десятая. `glassRim` — светлая
1379
+ * кромка по Френелю: грань, повёрнутая к взгляду ребром, светится, как край стекла.
1380
+ */
1381
+ glassTint?: Interpolated<string>;
1382
+ glassTintAmount?: Interpolated<number>;
1383
+ glassTintHeight?: Interpolated<number>;
1384
+ glassRim?: Interpolated<number>;
1385
+ /**
1386
+ * Насколько верх дома ярче низа, 0..1 — в СВОЁМ цвете, без подмеса белого (0.1 — на 10 %).
1387
+ * Кровля — наравне с верхом стены. Только с `glassTintAmount`.
1388
+ */
1389
+ glassTopLight?: Interpolated<number>;
1390
+ /**
1391
+ * Градиент по плоской крыше, 0..1: ближний к камере край — в тон стекла, дальний — светлый.
1392
+ * Чтобы крыши стеклянного квартала не сливались в одно поле. Только с `glassTintAmount`.
1393
+ */
1394
+ glassRoofGradient?: Interpolated<number>;
1354
1395
  /**
1355
1396
  * Доля светящихся окон, 0..1 — для ночных тем. Какие именно окна горят,
1356
1397
  * решает хеш ячейки, поэтому при движении камеры свет не «бегает».
@@ -1851,6 +1892,13 @@ interface LightSpec {
1851
1892
  fillAltitude: number;
1852
1893
  fillColor: string;
1853
1894
  fillIntensity: number;
1895
+ /**
1896
+ * Сила теней, 0..1 (по умолчанию 1). Ноль — теней нет ВОВСЕ: проход карты теней не запускается.
1897
+ *
1898
+ * Заведено ради стеклянных тем по образцу Baidu: там город светится, и серое пятно у основания
1899
+ * каждого дома читается грязью. Дробное значение ослабляет тень на земле.
1900
+ */
1901
+ shadowStrength?: number;
1854
1902
  }
1855
1903
  /**
1856
1904
  * Небо и дымка.
@@ -3212,6 +3260,16 @@ declare class SeamAssembler {
3212
3260
  * камеры от того набора кусков, что есть прямо сейчас, — и здание «дышало» бы: то целое, то
3213
3261
  * половина. Пока хоть один кусок на месте, дом остаётся тем же самым.
3214
3262
  */
3263
+ /**
3264
+ * Дома, которые НЕ СШИЛИСЬ, с подписью набора кусков, на котором это случилось (01.10.2026).
3265
+ *
3266
+ * Не сшивается дом, у которого часть кусков не загружена: остатки не смыкаются. Без этой памяти
3267
+ * такой дом считался «устаревшим» на каждом заходе и снова отдавался объединению; когда таких
3268
+ * домов больше бюджета, заход не заканчивался НИКОГДА (`pending`), и карта в покое рисовала кадр
3269
+ * за кадром, проигрывая одни и те же объединения (замер на эмуляторе: ~28 кадров в секунду,
3270
+ * поток GL занят наполовину). Повторяем только при смене набора кусков.
3271
+ */
3272
+ private failed;
3215
3273
  private cache;
3216
3274
  /**
3217
3275
  * Пересобрать то, что изменилось.
@@ -3491,6 +3549,8 @@ interface Candidate {
3491
3549
  x: number;
3492
3550
  y: number;
3493
3551
  }[];
3552
+ /** Те же вершины линии в меркаторе (x, y парами) — по ним сетка мест отмеряется ПО ЗЕМЛЕ. */
3553
+ lineWorld?: number[];
3494
3554
  }
3495
3555
  /**
3496
3556
  * Размещённая подпись: то, что реально видно на экране в этом кадре.
@@ -5400,6 +5460,19 @@ declare const DEFAULT_SHADOWS: ShadowSettings;
5400
5460
  declare class LayerRenderer {
5401
5461
  private fill;
5402
5462
  private surface;
5463
+ /**
5464
+ * ВАРИАНТЫ ПРОГРАММЫ ПОВЕРХНОСТИ: без кода теней и под один материал (см. NO_SHADOWS и MATERIAL в
5465
+ * шейдере). Собираются по первой надобности и живут до конца — их не больше десятка.
5466
+ */
5467
+ private surfaceVariants;
5468
+ /** Варианты программы зданий: без теней, без фасада, без стекла (см. buildingShader). */
5469
+ private buildingVariants;
5470
+ /** Варианты программы линий: без теней, под один материал и один рисунок (см. lineShader). */
5471
+ private lineVariants;
5472
+ /** Для чего варианты уже собраны (см. warmVariants): стиль, тени, детализация. */
5473
+ private warmedStyle;
5474
+ private warmedShadows;
5475
+ private warmedDetail;
5403
5476
  private surfaceLocs;
5404
5477
  private line;
5405
5478
  private building;
@@ -5443,6 +5516,17 @@ declare class LayerRenderer {
5443
5516
  /** Настройки теней; правит карта через `setShadows`. */
5444
5517
  readonly shadows: ShadowSettings;
5445
5518
  private shadowTarget;
5519
+ /** Отражение домов в стеклянной земле (см. `renderReflection`). */
5520
+ private reflectionTarget;
5521
+ private reflectionShader;
5522
+ private reflectionQuad;
5523
+ private reflectionBuffers;
5524
+ /** Сила отражения в ЭТОМ кадре; ноль — прохода нет. */
5525
+ private reflectionStrength;
5526
+ /** Блеск стеклянной земли в этом кадре (см. `reflectionGloss`). */
5527
+ private reflectionGloss;
5528
+ /** Идёт проход отражения: шейдер домов переворачивает их по высоте. */
5529
+ private mirror;
5446
5530
  /** Пустышка под sampler2DShadow, когда теней нет, — см. createShadowPlaceholder. */
5447
5531
  private shadowPlaceholder;
5448
5532
  /** Тени посчитаны в этом кадре и их можно накладывать. */
@@ -5641,7 +5725,10 @@ declare class LayerRenderer {
5641
5725
  hiddenVenueLayer: string | null;
5642
5726
  /** Урезанные индексы по тайлам; ключ — тайл, отпечаток — состав набора. */
5643
5727
  private hiddenCut;
5728
+ /** Отпечаток общего набора скрытого (заменённые + оболочки). `null` — ещё не считали. */
5644
5729
  private hiddenStamp;
5730
+ /** Отпечаток раскладки швов по тайлам. */
5731
+ private hiddenTileStamps;
5645
5732
  /**
5646
5733
  * Отпечаток наборов скрытого — ОДИН раз за кадр, а не на каждый тайк.
5647
5734
  *
@@ -5977,6 +6064,34 @@ declare class LayerRenderer {
5977
6064
  * рисует землю. Программе без соответствующих юниформов установка молча проходит мимо.
5978
6065
  */
5979
6066
  private applyTileScale;
6067
+ /** Номер материала слоя; ноль — без материала (в том числе при нулевой детализации). */
6068
+ private materialIdOf;
6069
+ /**
6070
+ * Программа поверхности под этот слой и кадр. Тени выключены — берётся вариант без их кода,
6071
+ * материал — только свой. Так программа меньше, и мобильный GPU держит больше пикселей в работе:
6072
+ * на Adreno 610 полотно подешевело с 32 до 6 мс за кадр (01.10.2026).
6073
+ */
6074
+ private surfaceShader;
6075
+ /**
6076
+ * Программа зданий под этот слой и кадр — тот же приём, что у поверхности: выключенное (тени,
6077
+ * фасад при нулевой детализации, стекло вне ледяной темы) в программу не попадает. Цена здания
6078
+ * на мобильном GPU определяется размером программы, а не тем, какие ветки выполнились.
6079
+ */
6080
+ private buildingShader;
6081
+ /**
6082
+ * СОБРАТЬ ВАРИАНТЫ ПРОГРАММ ЗАРАНЕЕ — при смене стиля, а не при первой встрече в кадре.
6083
+ *
6084
+ * Сборка программы на мобильном GPU стоит десятки миллисекунд (замер на Adreno 610: кадр 187 мс
6085
+ * без единой заливки — это сборка). Встреча «по пути» приходится ровно на проезд по городу, когда
6086
+ * в кадр въезжает слой нового вида, — и выглядит рывком. Поэтому все варианты стиля собираются
6087
+ * разом: один долгий кадр при загрузке вместо рывков на ходу. Тени — по ожидаемому состоянию;
6088
+ * переключение теней соберёт свой набор один раз. Фасад зависит от зума — перебираем зумы слоя.
6089
+ */
6090
+ private warmVariants;
6091
+ /** Рисунок вдоль линии: 0 сплошная, 1 штрих, 2 шевроны, 3 стрелки, 4 только стрелки, 5 стрелки-штрих. */
6092
+ private linePatternOf;
6093
+ /** Программа линий под этот слой и кадр — тот же приём, что у поверхности (см. surfaceShader). */
6094
+ private lineShader;
5980
6095
  private applyMaterial;
5981
6096
  private drawFill;
5982
6097
  private drawLine;
@@ -6039,6 +6154,28 @@ declare class LayerRenderer {
6039
6154
  * тот проход считает всё лежащим на нуле.
6040
6155
  */
6041
6156
  private drawSurface;
6157
+ /**
6158
+ * Сила отражения в кадре: наибольшая из `reflection` видимых слоёв домов, с плавным входом на
6159
+ * `REFLECTION_MIN_ZOOM`. На рельефе и глобусе отражения нет: земля там не плоскость, и зеркало в
6160
+ * плоскости z = 0 показало бы дома не там, где они отражаются.
6161
+ */
6162
+ private reflectionStrengthOf;
6163
+ /** Блеск стеклянной земли: наибольший `reflectionGloss` видимых слоёв домов, на любом зуме. */
6164
+ private reflectionGlossOf;
6165
+ /**
6166
+ * ОТРАЖЕНИЕ ДОМОВ — В СВОЙ БУФЕР, ДО ОСНОВНОГО КАДРА.
6167
+ *
6168
+ * Приём зеркала в плоскости (`Reflector` three.js): для плоскости земли отражённая камера
6169
+ * равносильна тем же домам, перевёрнутым по высоте, — их и рисует обычный проход зданий с
6170
+ * `u_mirror = −1`. Намотка треугольников при этом зеркальная, поэтому отсекаются ПЕРЕДНИЕ грани.
6171
+ * Тени в отражении не нужны: его и так едва видно. Буфер — в полразмера кадра.
6172
+ */
6173
+ private renderReflection;
6174
+ /**
6175
+ * СТЕКЛЯННАЯ ЗЕМЛЯ — один квад во весь экран: размытое отражение домов (с z18) и блеск неба по
6176
+ * Френелю (на любом зуме). Выше горизонта не рисуется: там небо, а не стекло.
6177
+ */
6178
+ private drawReflection;
6042
6179
  private drawBuildings;
6043
6180
  /** Подсветить один сшитый дом: геометрия берётся из его же меша. */
6044
6181
  private drawSeamHighlight;