Skip to content

WorldWind Kotlin v2.0.3

Latest

Choose a tag to compare

@EMaksymenko EMaksymenko released this 17 Jun 09:49
· 22 commits to develop since this release

WorldWind Kotlin 2.0.3

11 commits since 2.0.2.

3D Tiles (new)

OGC / Cesium 3D Tiles 1.0 / 1.1 streaming layer. Supports b3dm / i3dm / cmpt / pnts / glTF binary / Gaussian-splat payloads, served via Cesium Ion + Google Photorealistic + Bearer / custom-headers auth providers, with per-feature picking through batch tables. Vertical-datum correction via altitudeOffset + altitudeMode (ABSOLUTE / RELATIVE_TO_GROUND / CLAMP_TO_GROUND). Stencil-masked skip-LoD keeps fallback tiles visible under refining children without inter-LoD flicker.

Niantic SPZ Gaussian-splat codec wired in via the gaussianLoader hook on Ogc3dTilesLayer.

Tutorials: OGC Container (Utrecht), Google Photorealistic, Cesium Ion (defaults to asset 96188 OSM Buildings; swappable to any Ion asset).

Codec modules — new, independent Maven coordinates at 1.0.0

Three optional native-backed glTF extension modules. Each ships per-platform binaries (JVM JARs for macos-aarch64 / macos-x86_64 / linux-x86_64 / windows-x86_64; Android AARs for all four ABIs; iOS klibs via cinterop) and registers itself with the engine at startup via the corresponding installXxxDecoder() call.

Module glTF extension(s) covered
earth.worldwind:worldwind-formats-gltf-draco:1.0.0 KHR_draco_mesh_compression + 3DTILES_draco_point_compression
earth.worldwind:worldwind-formats-gltf-ktx2:1.0.0 KHR_texture_basisu (Basis Universal)
earth.worldwind:worldwind-formats-gltf-meshopt:1.0.0 EXT_meshopt_compression

The engine has no compile-time dependency on these — add them to your build only if your tilesets use the matching extension.

Fixes

  • Web — EGM96 geoid byte-order. The Kotlin/JS actual was viewing the fetched binary as a platform-native Int16Array (little-endian on x86/ARM) while the NGA file is big-endian per spec, returning byte-swapped offsets. Terrain mesh drifted by the local geoid separation: Utrecht tilesets levitated ~44 m above terrain, Manhattan OSM Buildings sat ~34 m below it. Fixed in webMain/EGM96Geoid.kt.

Other changes

  • JVM rendering: WorldWindow swapped from GLJPanel to heavyweight GLCanvas. Fewer blit copies, no PBO contention with Swing's repaint, far better per-frame stability under continuous redraws.
  • GeoPackage caches: per-put LRU eviction across all stores; long-running sessions can no longer out-grow their byte budget.
  • CachePolicy: removed the maxBytes capacity cap. LRU eviction pressure makes the hard ceiling redundant; callers size caches by working-set instead.
  • Internal: project version externalised to gradle.properties (worldwind.version, worldwind.codecsVersion) for CI-driven auto-release on master pushes when either advances past Maven Central.

Web tutorial host (GitHub Pages)

The Pages tutorial bundle now reads CESIUM_ION_TOKEN and GOOGLE_MAPS_API_KEY from repository Secrets at build time. Keys ship inside the public JS bundle, so they must be locked at the provider — HTTP-referrer restriction on the Google Maps Platform key (Map Tiles API only), asset-scoped + referrer-allowlisted Cesium Ion token (assets:read only). Placeholders fall back at build time for local dev without secrets configured.