s3m-maplibre 0.4.19 → 0.4.21

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/docs/API.md CHANGED
@@ -122,6 +122,7 @@ new S3MLayer(options?: S3MLayerOptions)
122
122
  | `pickable` | `boolean` | `true` | 是否响应点击 |
123
123
  | `maxTiles` | `number` | `64` | 每个数据集驻留瓦片上限,超了淘汰最久没用的(不是停止加载) |
124
124
  | `maxTriangles` | `number` | `Infinity` | 每个数据集驻留三角形总数的软上限(不限制)。`maxTiles` 管不住的场景用来做刹车,见[s3m-three 性能调优](../s3m-three/docs/API.md#移动端--差设备) |
125
+ | `maxMemory` | `number` | `Infinity` | 每个数据集驻留显存/内存字节数的软上限(不限制)。几何+纹理显存超限触发 make-before-break 主动淘汰 |
125
126
  | `totalMaxTiles` | `number` | — | 多数据集全局瓦片总预算,在可见数据集间动态均衡分配配额,防止多图层叠合爆显存 |
126
127
  | `light` | `LightOptions` | — | 场景光照配置(环境光、主光、方位角、高度角及 headlamp/fixed 模式) |
127
128
  | `maxConcurrent` | `number` | `4` | 每个数据集并发请求数 |
@@ -285,6 +286,8 @@ readonly lodPixelRatioCap: number
285
286
  setMaxImageCache(n: number, datasetId?: string): void // 纹理缓存条数,默认 128
286
287
  setMaxTriangles(n: number, datasetId?: string): void // 驻留面数软上限,Infinity = 不限制(默认)
287
288
  readonly maxTriangles: number
289
+ setMaxMemory(bytes: number, datasetId?: string): void // 驻留显存字节软上限,Infinity = 不限制(默认)
290
+ readonly maxMemory: number
288
291
  setAnisotropyCap(cap: number): void // 各向异性上限,Infinity = 取 GPU 最大值(默认)
289
292
  readonly anisotropyCap: number
290
293
  setMaxTextureSize(n: number): void // 纹理长边像素上限,Infinity = 不限制(默认)
@@ -629,7 +632,7 @@ e[14] = -2 · far · near' / (far - near')
629
632
  - **`layer.viewer.geo` 在 MapLibre 上经常是 `null`,这是正常的**:`createMapLibreGeoAdapter()` 只有从宿主拿到 `WorldCoordinateHelper`(`transform.worldCoordinateHelper` 等 4 个候选位置)时才生效,拿不到就返回 `null`,渲染层自动回退标准 Web 墨卡托——正是 MapLibre 的默认 CRS,数值完全一致。当前 MapLibre 5.24 的 dist 里并没有这个成员,所以在 MapLibre 上这条 adapter 分支实际是空跑的。**自己换算经纬度时不要用 `if (viewer.geo)` 当门槛**,直接用 `worldFromLngLat(viewer.geo, lng, lat)`(`s3m-three` 导出,内部自带兜底),否则会把本来能用的墨卡托路径挡掉。
630
633
  - **多数据集叠加**应位于同一城市量级(几公里内),跨城市叠加会重新引入 float32 精度问题。
631
634
 
632
- 解析 / 几何 / 纹理 / 单体化相关的已知限制(Draco 回归覆盖、实例化单体、CRN 判定、切线流、KTX2、骨骼动画)见 [s3m-three 已知限制](../s3m-three/docs/API.md#已知限制)。
635
+ 解析 / 几何 / 纹理 / 单体化相关的已知限制(实例化单体样式与拾取、切线流、骨骼动画等)见 [s3m-three 已知限制](../s3m-three/docs/API.md#已知限制)。
633
636
 
634
637
  ---
635
638
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "s3m-maplibre",
3
- "version": "0.4.19",
3
+ "version": "0.4.21",
4
4
  "description": "SuperMap S3M 三维模型格式的 MapLibre / Mapbox 原生渲染图层:浏览器内直接解析 .s3mb 瓦片,无需转 3D Tiles,支持多数据集叠加、白膜/按高度/按单体/动态扫描着色、单体级 GPU 拾取与属性查询。基于 s3m-three 渲染内核。",
5
5
  "type": "module",
6
6
  "repository": {
@@ -60,7 +60,7 @@
60
60
  "author": "",
61
61
  "license": "Apache-2.0",
62
62
  "dependencies": {
63
- "s3m-three": "^0.4.19"
63
+ "s3m-three": "^0.4.21"
64
64
  },
65
65
  "peerDependencies": {
66
66
  "three": ">=0.155.0"
package/src/S3MLayer.ts CHANGED
@@ -936,6 +936,19 @@ export class S3MLayer extends HostRenderer {
936
936
  this.viewer.setMaxTriangles(n, datasetId);
937
937
  }
938
938
 
939
+ /** 当前每个数据集的驻留显存/内存字节预算。Infinity = 不限制 */
940
+ get maxMemory(): number {
941
+ return this.viewer.maxMemory;
942
+ }
943
+
944
+ /**
945
+ * 动态调整每个数据集驻留显存/内存字节总数的软上限(默认 Infinity = 不限制)。
946
+ * 瓦片几何与纹理显存超限时触发主动 make-before-break 淘汰。
947
+ */
948
+ setMaxMemory(bytes: number, datasetId?: string): void {
949
+ this.viewer.setMaxMemory(bytes, datasetId);
950
+ }
951
+
939
952
  /** 当前各向异性过滤上限。Infinity = 取 GPU 最大值 */
940
953
  get anisotropyCap(): number {
941
954
  return this.viewer.anisotropyCap;