react-native-cesium 1.0.5 → 1.1.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.
Files changed (62) hide show
  1. package/README.md +48 -11
  2. package/ReactNativeCesium.podspec +1 -1
  3. package/android/CMakeLists.txt +5 -3
  4. package/android/src/main/cpp/CesiumBridgeAndroid.cpp +196 -227
  5. package/android/src/main/cpp/CesiumBridgeAndroid.h +48 -49
  6. package/android/src/main/cpp/cpp-adapter.cpp +2 -2
  7. package/android/src/main/cpp/vulkan/VulkanBackend.cpp +1010 -569
  8. package/android/src/main/cpp/vulkan/VulkanBackend.h +121 -12
  9. package/android/src/main/cpp/vulkan/shaders/sky.frag +20 -10
  10. package/android/src/main/java/com/margelo/nitro/reactnativecesium/CesiumBridgeJNI.kt +28 -0
  11. package/android/src/main/java/com/margelo/nitro/reactnativecesium/HybridCesiumView.kt +295 -58
  12. package/cpp/engine/CameraSmoother.cpp +68 -0
  13. package/cpp/engine/CameraSmoother.hpp +24 -0
  14. package/cpp/engine/CameraTargetState.cpp +28 -0
  15. package/cpp/engine/CameraTargetState.hpp +97 -0
  16. package/cpp/engine/CesiumEngine.cpp +206 -60
  17. package/cpp/engine/CesiumEngine.hpp +77 -10
  18. package/cpp/engine/EngineTunables.hpp +64 -0
  19. package/cpp/engine/GeoidConverter.cpp +36 -0
  20. package/cpp/engine/GeoidConverter.hpp +10 -0
  21. package/cpp/engine/GlobeCamera.cpp +7 -2
  22. package/cpp/engine/MetricsAggregator.cpp +71 -0
  23. package/cpp/engine/MetricsAggregator.hpp +54 -0
  24. package/cpp/engine/TileLifecycleManager.cpp +0 -12
  25. package/cpp/engine/TileLifecycleManager.hpp +0 -3
  26. package/cpp/third_party/egm96/EGM96.c +289 -0
  27. package/cpp/third_party/egm96/EGM96.h +45 -0
  28. package/cpp/third_party/egm96/EGM96_data.h +65372 -0
  29. package/ios/CesiumBridge.h +24 -5
  30. package/ios/CesiumBridge.mm +148 -271
  31. package/ios/HybridCesiumView.swift +197 -40
  32. package/ios/metal/MetalBackend.mm +72 -23
  33. package/lib/typescript/src/index.d.ts +1 -1
  34. package/lib/typescript/src/index.d.ts.map +1 -1
  35. package/lib/typescript/src/specs/cesium-view.nitro.d.ts +26 -0
  36. package/lib/typescript/src/specs/cesium-view.nitro.d.ts.map +1 -1
  37. package/nitrogen/generated/android/c++/JCesiumMetrics.hpp +5 -1
  38. package/nitrogen/generated/android/c++/JHybridCesiumViewSpec.cpp +109 -1
  39. package/nitrogen/generated/android/c++/JHybridCesiumViewSpec.hpp +24 -0
  40. package/nitrogen/generated/android/c++/views/JHybridCesiumViewStateUpdater.cpp +48 -0
  41. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativecesium/CameraState.kt +25 -0
  42. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativecesium/CesiumMetrics.kt +32 -2
  43. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativecesium/HybridCesiumViewSpec.kt +72 -0
  44. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativecesium/Quaternion.kt +19 -0
  45. package/nitrogen/generated/ios/ReactNativeCesium-Swift-Cxx-Bridge.hpp +30 -0
  46. package/nitrogen/generated/ios/c++/HybridCesiumViewSpecSwift.hpp +85 -1
  47. package/nitrogen/generated/ios/c++/views/HybridCesiumViewComponent.mm +60 -0
  48. package/nitrogen/generated/ios/swift/CesiumMetrics.swift +7 -2
  49. package/nitrogen/generated/ios/swift/HybridCesiumViewSpec.swift +12 -0
  50. package/nitrogen/generated/ios/swift/HybridCesiumViewSpec_cxx.swift +288 -0
  51. package/nitrogen/generated/shared/c++/CesiumMetrics.hpp +5 -1
  52. package/nitrogen/generated/shared/c++/HybridCesiumViewSpec.cpp +24 -0
  53. package/nitrogen/generated/shared/c++/HybridCesiumViewSpec.hpp +25 -1
  54. package/nitrogen/generated/shared/c++/views/HybridCesiumViewComponent.cpp +132 -0
  55. package/nitrogen/generated/shared/c++/views/HybridCesiumViewComponent.hpp +13 -1
  56. package/nitrogen/generated/shared/json/CesiumViewConfig.json +12 -0
  57. package/package.json +4 -5
  58. package/scripts/cesium/clone.mjs +1 -1
  59. package/src/index.ts +1 -0
  60. package/src/specs/cesium-view.nitro.ts +29 -0
  61. package/cpp/engine/DeletionQueue.cpp +0 -28
  62. package/cpp/engine/DeletionQueue.hpp +0 -28
@@ -4,13 +4,21 @@
4
4
  #include <memory>
5
5
  #include <string>
6
6
 
7
+ #include "engine/CameraTargetState.hpp"
8
+ #include "engine/CesiumEngine.hpp"
9
+ #include "engine/MetricsAggregator.hpp"
10
+
7
11
  namespace reactnativecesium {
8
12
  class VulkanBackend;
9
- class CesiumEngine;
10
13
  struct FrameResult;
11
- struct CameraParams;
12
- }
14
+ } // namespace reactnativecesium
13
15
 
16
+ // Thin Android shell. All cross-platform logic (camera demand state +
17
+ // smoothing, FPS / metrics aggregation, credit HTML stripping) lives in
18
+ // shared C++ next to CesiumEngine. This class only owns:
19
+ // - the JNI/window surface,
20
+ // - the Vulkan backend instance, and
21
+ // - the EngineConfig snapshot mirrored from JS props.
14
22
  struct CesiumBridgeAndroid {
15
23
  void init(JNIEnv* env, jobject surface, int width, int height,
16
24
  const std::string& cacheDir, const std::string& cacertPath);
@@ -27,10 +35,24 @@ struct CesiumBridgeAndroid {
27
35
  double qw, double qx, double qy, double qz);
28
36
  void setVerticalFovDeg(double degrees);
29
37
  void setMaximumScreenSpaceError(double v);
30
- void setMaximumSimultaneousTileLoads(int v);
31
- void setLoadingDescendantLimit(int v);
38
+ void setMaximumSimultaneousTileLoads(int32_t v);
39
+ void setLoadingDescendantLimit(int32_t v);
32
40
  void setMsaaSampleCount(int samples);
33
41
 
42
+ // Optional knobs (default values mirror EngineConfig defaults).
43
+ void setMaximumCachedMiB(int32_t v);
44
+ void setPreloadAncestors(bool v);
45
+ void setPreloadSiblings(bool v);
46
+ void setForbidHoles(bool v);
47
+ void setEnableWaterMask(bool v);
48
+ void setEnableFogCulling(bool v);
49
+ void setEnforceCulledScreenSpaceError(bool v);
50
+ void setCulledScreenSpaceError(double v);
51
+ void setEnableLodTransitionPeriod(bool v);
52
+ void setLodTransitionLength(double v);
53
+ void setSqliteCacheMaxRows(int32_t v);
54
+ void setTaskProcessorThreads(int32_t v);
55
+
34
56
  void markNeedsRender();
35
57
  bool shouldRenderNextFrame();
36
58
  void renderFrame(double dt);
@@ -48,57 +70,34 @@ struct CesiumBridgeAndroid {
48
70
  double readViewCorrectionY();
49
71
  double readViewCorrectionZ();
50
72
 
51
- // Metrics
52
- double metricsFps() const { return metricsFps_; }
53
- int metricsTilesRendered() const { return metricsTilesRendered_; }
54
- int metricsTilesLoading() const { return metricsTilesLoading_; }
55
- int metricsTilesVisited() const { return metricsTilesVisited_; }
56
- bool metricsIonTokenConfigured() const { return metricsIonTokenConfigured_; }
57
- bool metricsTilesetReady() const { return metricsTilesetReady_; }
58
- const std::string& metricsCreditsPlainText() const { return metricsCreditsPlainText_; }
73
+ // Metrics readback (delegated to MetricsAggregator)
74
+ double metricsFps() const { return metrics_.latest().fps; }
75
+ int metricsTilesRendered() const { return metrics_.latest().tilesRendered; }
76
+ int metricsTilesLoading() const { return metrics_.latest().tilesLoading; }
77
+ int metricsTilesVisited() const { return metrics_.latest().tilesVisited; }
78
+ bool metricsIonTokenConfigured() const { return metrics_.latest().ionTokenConfigured; }
79
+ bool metricsTilesetReady() const { return metrics_.latest().tilesetReady; }
80
+ bool metricsTlsConfigured() const { return metrics_.latest().tlsConfigured; }
81
+ const std::string& metricsCreditsPlainText() const {
82
+ return metrics_.latest().creditsPlainText;
83
+ }
59
84
 
60
85
  private:
61
86
  void buildEngine();
87
+ // Push the current `config_` state to the live engine (runtime-mutable
88
+ // fields go through tileset_->getOptions(); token/asset id changes force
89
+ // a tileset rebuild).
90
+ void applyEngineConfig();
62
91
 
63
92
  std::unique_ptr<reactnativecesium::VulkanBackend> vulkanBackend_;
64
93
  std::unique_ptr<reactnativecesium::CesiumEngine> engine_;
65
94
  std::unique_ptr<reactnativecesium::FrameResult> frameResult_;
66
95
 
67
- int viewportWidth_ = 0;
68
- int viewportHeight_ = 0;
69
- bool initialized_ = false;
70
-
71
- std::string cacheDir_;
72
- std::string cacertPath_;
73
- std::string ionAccessToken_;
74
- int64_t ionTilesetAssetId_ = 1;
75
-
76
- double maxSSE_ = 32.0;
77
- double maxSimLoads_ = 12.0;
78
- double loadDescLim_ = 20.0;
79
-
80
- // Camera demand target
81
- double camTargetLat_ = 46.15;
82
- double camTargetLon_ = 7.35;
83
- double camTargetAlt_ = 12000.0;
84
- double camTargetHeading_ = 129.0;
85
- double camTargetPitch_ = -45.0;
86
- double camTargetRoll_ = 0.0;
87
- double camTargetViewQw_ = 1.0;
88
- double camTargetViewQx_ = 0.0;
89
- double camTargetViewQy_ = 0.0;
90
- double camTargetViewQz_ = 0.0;
91
- bool forceRenderNextFrame_ = true;
96
+ int viewportWidth_ = 0;
97
+ int viewportHeight_ = 0;
98
+ bool initialized_ = false;
92
99
 
93
- // Metrics
94
- double fpsEma_ = 0.0;
95
- int metricsTick_ = 0;
96
- double metricsFps_ = 0.0;
97
- int metricsTilesRendered_ = 0;
98
- int metricsTilesLoading_ = 0;
99
- int metricsTilesVisited_ = 0;
100
- bool metricsIonTokenConfigured_ = false;
101
- bool metricsTilesetReady_ = false;
102
- std::string metricsCreditsPlainText_;
103
- std::string lastCreditHtmlJoined_;
100
+ reactnativecesium::EngineConfig config_;
101
+ reactnativecesium::CameraTargetState target_;
102
+ reactnativecesium::MetricsAggregator metrics_;
104
103
  };
@@ -4,13 +4,13 @@
4
4
 
5
5
  #include "ReactNativeCesiumOnLoad.hpp"
6
6
 
7
- #include <Cesium3DTilesContent/registerAllTileContentTypes.h>
7
+ // Cesium tile content types are registered exactly once in CesiumEngine's
8
+ // constructor; do not duplicate that registration here.
8
9
 
9
10
  static const uint32_t kCesiumVulkanApiVersion = VK_MAKE_VERSION(1, 1, 0);
10
11
 
11
12
  JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
12
13
  (void)kCesiumVulkanApiVersion;
13
- Cesium3DTilesContent::registerAllTileContentTypes();
14
14
  return facebook::jni::initialize(vm, []() {
15
15
  margelo::nitro::reactnativecesium::registerAllNatives();
16
16
  });