@shopify/react-native-skia 2.9.1-next.1 → 2.10.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 (273) hide show
  1. package/android/CMakeLists.txt +1 -5
  2. package/android/cpp/jni/JniWebGPUView.cpp +52 -7
  3. package/android/src/main/java/com/shopify/reactnative/skia/WebGPUSurfaceView.java +3 -1
  4. package/android/src/main/java/com/shopify/reactnative/skia/WebGPUTextureView.java +11 -5
  5. package/android/src/main/java/com/shopify/reactnative/skia/WebGPUView.java +10 -7
  6. package/android/src/main/java/com/shopify/reactnative/skia/WebGPUViewAPI.java +7 -2
  7. package/android/src/main/java/com/shopify/reactnative/skia/WebGPUViewManager.java +1 -1
  8. package/apple/WebGPUMetalView.mm +49 -6
  9. package/cpp/api/JsiNativeBuffer.h +15 -10
  10. package/cpp/api/JsiSkAnimatedImage.h +21 -19
  11. package/cpp/api/JsiSkAnimatedImageFactory.h +13 -14
  12. package/cpp/api/JsiSkApi.h +246 -92
  13. package/cpp/api/JsiSkCanvas.h +76 -58
  14. package/cpp/api/JsiSkColor.h +7 -5
  15. package/cpp/api/JsiSkColorFilter.h +15 -8
  16. package/cpp/api/JsiSkColorFilterFactory.h +45 -45
  17. package/cpp/api/JsiSkContourMeasure.h +24 -21
  18. package/cpp/api/JsiSkContourMeasureIter.h +18 -21
  19. package/cpp/api/JsiSkData.h +13 -7
  20. package/cpp/api/JsiSkDataFactory.h +22 -21
  21. package/cpp/api/JsiSkFont.h +56 -44
  22. package/cpp/api/JsiSkFontMgr.h +22 -13
  23. package/cpp/api/JsiSkFontMgrFactory.h +12 -10
  24. package/cpp/api/JsiSkFontStyle.h +14 -12
  25. package/cpp/api/JsiSkImage.h +45 -34
  26. package/cpp/api/JsiSkImageFactory.h +47 -52
  27. package/cpp/api/JsiSkImageFilter.h +21 -11
  28. package/cpp/api/JsiSkImageFilterFactory.h +96 -96
  29. package/cpp/api/JsiSkImageInfo.h +22 -19
  30. package/cpp/api/JsiSkMaskFilter.h +21 -11
  31. package/cpp/api/JsiSkMaskFilterFactory.h +16 -13
  32. package/cpp/api/JsiSkMatrix.h +31 -31
  33. package/cpp/api/JsiSkNativeObjects.h +419 -0
  34. package/cpp/api/JsiSkPaint.h +59 -39
  35. package/cpp/api/JsiSkParagraph.h +39 -32
  36. package/cpp/api/JsiSkParagraphBuilder.h +24 -21
  37. package/cpp/api/JsiSkParagraphBuilderFactory.h +13 -12
  38. package/cpp/api/JsiSkParagraphStyle.h +20 -10
  39. package/cpp/api/JsiSkPath.h +95 -70
  40. package/cpp/api/JsiSkPathBuilder.h +83 -67
  41. package/cpp/api/JsiSkPathBuilderFactory.h +16 -17
  42. package/cpp/api/JsiSkPathEffect.h +21 -11
  43. package/cpp/api/JsiSkPathEffectFactory.h +33 -32
  44. package/cpp/api/JsiSkPathFactory.h +79 -103
  45. package/cpp/api/JsiSkPicture.h +24 -13
  46. package/cpp/api/JsiSkPictureFactory.h +21 -26
  47. package/cpp/api/JsiSkPictureRecorder.h +21 -22
  48. package/cpp/api/JsiSkPoint.h +19 -22
  49. package/cpp/api/JsiSkRRect.h +22 -29
  50. package/cpp/api/JsiSkRSXform.h +26 -30
  51. package/cpp/api/JsiSkRect.h +28 -30
  52. package/cpp/api/JsiSkRuntimeEffect.h +39 -30
  53. package/cpp/api/JsiSkRuntimeEffectFactory.h +12 -12
  54. package/cpp/api/JsiSkRuntimeShaderBuilder.h +25 -18
  55. package/cpp/api/JsiSkSVG.h +13 -13
  56. package/cpp/api/JsiSkSVGFactory.h +17 -20
  57. package/cpp/api/JsiSkShader.h +15 -8
  58. package/cpp/api/JsiSkShaderFactory.h +41 -48
  59. package/cpp/api/JsiSkSkottie.h +49 -39
  60. package/cpp/api/JsiSkStrutStyle.h +18 -8
  61. package/cpp/api/JsiSkSurface.h +24 -24
  62. package/cpp/api/JsiSkSurfaceFactory.h +15 -16
  63. package/cpp/api/JsiSkTextBlob.h +15 -8
  64. package/cpp/api/JsiSkTextBlobFactory.h +25 -28
  65. package/cpp/api/JsiSkTextStyle.h +34 -24
  66. package/cpp/api/JsiSkTypeface.h +19 -12
  67. package/cpp/api/JsiSkTypefaceFactory.h +12 -12
  68. package/cpp/api/JsiSkTypefaceFontProvider.h +30 -25
  69. package/cpp/api/JsiSkTypefaceFontProviderFactory.h +14 -12
  70. package/cpp/api/JsiSkVertices.h +21 -18
  71. package/cpp/api/JsiSkiaContext.h +17 -17
  72. package/cpp/api/JsiSkottieFactory.h +16 -17
  73. package/cpp/api/JsiVideo.h +27 -25
  74. package/cpp/api/recorder/Convertor.h +31 -61
  75. package/cpp/api/recorder/DataTypes.h +8 -16
  76. package/cpp/api/recorder/JsiRecorder.h +83 -55
  77. package/cpp/api/recorder/RNRecorder.h +1 -1
  78. package/cpp/jsi/BoxedNativeObject.h +146 -0
  79. package/cpp/{jsi2 → jsi}/EnumMapper.h +4 -1
  80. package/cpp/{jsi2 → jsi}/NativeObject.h +120 -146
  81. package/cpp/jsi/RuntimeAwareCache.cpp +1 -1
  82. package/cpp/jsi/RuntimeAwareCache.h +26 -8
  83. package/cpp/jsi/ViewProperty.h +5 -11
  84. package/cpp/rnskia/RNSkJsiViewApi.h +20 -11
  85. package/cpp/rnskia/RNSkManager.cpp +29 -25
  86. package/cpp/rnskia/RNSkPictureView.h +1 -1
  87. package/cpp/rnwgpu/ArrayBuffer.h +5 -6
  88. package/cpp/rnwgpu/Canvas.h +4 -2
  89. package/cpp/rnwgpu/SurfaceRegistry.h +469 -131
  90. package/cpp/rnwgpu/api/GPU.cpp +4 -4
  91. package/cpp/rnwgpu/api/GPU.h +1 -1
  92. package/cpp/rnwgpu/api/GPUAdapter.cpp +12 -6
  93. package/cpp/rnwgpu/api/GPUAdapter.h +5 -4
  94. package/cpp/rnwgpu/api/GPUAdapterInfo.h +1 -1
  95. package/cpp/rnwgpu/api/GPUBindGroup.h +1 -1
  96. package/cpp/rnwgpu/api/GPUBindGroupLayout.h +1 -1
  97. package/cpp/rnwgpu/api/GPUBuffer.cpp +12 -2
  98. package/cpp/rnwgpu/api/GPUBuffer.h +4 -3
  99. package/cpp/rnwgpu/api/GPUCanvasContext.cpp +33 -19
  100. package/cpp/rnwgpu/api/GPUCanvasContext.h +4 -2
  101. package/cpp/rnwgpu/api/GPUCommandBuffer.h +1 -1
  102. package/cpp/rnwgpu/api/GPUCommandEncoder.h +1 -1
  103. package/cpp/rnwgpu/api/GPUCompilationInfo.h +1 -1
  104. package/cpp/rnwgpu/api/GPUCompilationMessage.h +1 -1
  105. package/cpp/rnwgpu/api/GPUComputePassEncoder.h +1 -1
  106. package/cpp/rnwgpu/api/GPUComputePipeline.h +1 -1
  107. package/cpp/rnwgpu/api/GPUDevice.cpp +38 -24
  108. package/cpp/rnwgpu/api/GPUDevice.h +12 -10
  109. package/cpp/rnwgpu/api/GPUDeviceLostInfo.h +1 -1
  110. package/cpp/rnwgpu/api/GPUError.h +1 -1
  111. package/cpp/rnwgpu/api/GPUExtent3D.h +1 -1
  112. package/cpp/rnwgpu/api/GPUExternalTexture.h +1 -1
  113. package/cpp/rnwgpu/api/GPUInternalError.h +1 -1
  114. package/cpp/rnwgpu/api/GPUOrigin2D.h +1 -1
  115. package/cpp/rnwgpu/api/GPUOrigin3D.h +1 -1
  116. package/cpp/rnwgpu/api/GPUOutOfMemoryError.h +1 -1
  117. package/cpp/rnwgpu/api/GPUPipelineLayout.h +1 -1
  118. package/cpp/rnwgpu/api/GPUQuerySet.h +1 -1
  119. package/cpp/rnwgpu/api/GPUQueue.cpp +6 -2
  120. package/cpp/rnwgpu/api/GPUQueue.h +4 -4
  121. package/cpp/rnwgpu/api/GPURenderBundle.h +1 -1
  122. package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +1 -1
  123. package/cpp/rnwgpu/api/GPURenderPassEncoder.h +1 -1
  124. package/cpp/rnwgpu/api/GPURenderPipeline.h +1 -1
  125. package/cpp/rnwgpu/api/GPUSampler.h +1 -1
  126. package/cpp/rnwgpu/api/GPUShaderModule.cpp +8 -3
  127. package/cpp/rnwgpu/api/GPUShaderModule.h +4 -4
  128. package/cpp/rnwgpu/api/GPUSharedFence.h +1 -1
  129. package/cpp/rnwgpu/api/GPUSharedTextureMemory.h +1 -1
  130. package/cpp/rnwgpu/api/GPUSupportedLimits.h +1 -1
  131. package/cpp/rnwgpu/api/GPUTexture.h +1 -1
  132. package/cpp/rnwgpu/api/GPUTextureView.h +1 -1
  133. package/cpp/rnwgpu/api/GPUUncapturedErrorEvent.h +1 -1
  134. package/cpp/rnwgpu/api/GPUValidationError.h +1 -1
  135. package/cpp/rnwgpu/api/ImageBitmap.h +1 -1
  136. package/cpp/rnwgpu/api/RNWebGPU.h +21 -1
  137. package/cpp/rnwgpu/api/descriptors/GPUBindGroupDescriptor.h +1 -1
  138. package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +1 -1
  139. package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutDescriptor.h +1 -1
  140. package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutEntry.h +1 -1
  141. package/cpp/rnwgpu/api/descriptors/GPUBlendComponent.h +1 -1
  142. package/cpp/rnwgpu/api/descriptors/GPUBlendState.h +1 -1
  143. package/cpp/rnwgpu/api/descriptors/GPUBufferBinding.h +1 -1
  144. package/cpp/rnwgpu/api/descriptors/GPUBufferBindingLayout.h +1 -1
  145. package/cpp/rnwgpu/api/descriptors/GPUBufferDescriptor.h +1 -1
  146. package/cpp/rnwgpu/api/descriptors/GPUCanvasConfiguration.h +1 -1
  147. package/cpp/rnwgpu/api/descriptors/GPUColor.h +1 -1
  148. package/cpp/rnwgpu/api/descriptors/GPUColorTargetState.h +1 -1
  149. package/cpp/rnwgpu/api/descriptors/GPUCommandBufferDescriptor.h +1 -1
  150. package/cpp/rnwgpu/api/descriptors/GPUCommandEncoderDescriptor.h +1 -1
  151. package/cpp/rnwgpu/api/descriptors/GPUComputePassDescriptor.h +1 -1
  152. package/cpp/rnwgpu/api/descriptors/GPUComputePassTimestampWrites.h +1 -1
  153. package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +1 -1
  154. package/cpp/rnwgpu/api/descriptors/GPUDawnTogglesDescriptor.h +1 -1
  155. package/cpp/rnwgpu/api/descriptors/GPUDepthStencilState.h +1 -1
  156. package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +1 -1
  157. package/cpp/rnwgpu/api/descriptors/GPUExternalTextureBindingLayout.h +1 -1
  158. package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +1 -1
  159. package/cpp/rnwgpu/api/descriptors/GPUFragmentState.h +1 -1
  160. package/cpp/rnwgpu/api/descriptors/GPUImageCopyBuffer.h +1 -1
  161. package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +1 -1
  162. package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +1 -1
  163. package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +1 -1
  164. package/cpp/rnwgpu/api/descriptors/GPUImageDataLayout.h +1 -1
  165. package/cpp/rnwgpu/api/descriptors/GPUMultisampleState.h +1 -1
  166. package/cpp/rnwgpu/api/descriptors/GPUPipelineLayoutDescriptor.h +1 -1
  167. package/cpp/rnwgpu/api/descriptors/GPUPrimitiveState.h +1 -1
  168. package/cpp/rnwgpu/api/descriptors/GPUProgrammableStage.h +1 -1
  169. package/cpp/rnwgpu/api/descriptors/GPUQuerySetDescriptor.h +1 -1
  170. package/cpp/rnwgpu/api/descriptors/GPUQueueDescriptor.h +1 -1
  171. package/cpp/rnwgpu/api/descriptors/GPURenderBundleDescriptor.h +1 -1
  172. package/cpp/rnwgpu/api/descriptors/GPURenderBundleEncoderDescriptor.h +1 -1
  173. package/cpp/rnwgpu/api/descriptors/GPURenderPassColorAttachment.h +1 -1
  174. package/cpp/rnwgpu/api/descriptors/GPURenderPassDepthStencilAttachment.h +1 -1
  175. package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +1 -1
  176. package/cpp/rnwgpu/api/descriptors/GPURenderPassTimestampWrites.h +1 -1
  177. package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +1 -1
  178. package/cpp/rnwgpu/api/descriptors/GPURequestAdapterOptions.h +1 -1
  179. package/cpp/rnwgpu/api/descriptors/GPUSamplerBindingLayout.h +1 -1
  180. package/cpp/rnwgpu/api/descriptors/GPUSamplerDescriptor.h +1 -1
  181. package/cpp/rnwgpu/api/descriptors/GPUShaderModuleCompilationHint.h +1 -1
  182. package/cpp/rnwgpu/api/descriptors/GPUShaderModuleDescriptor.h +1 -1
  183. package/cpp/rnwgpu/api/descriptors/GPUSharedFenceDescriptor.h +1 -1
  184. package/cpp/rnwgpu/api/descriptors/GPUSharedFenceState.h +1 -1
  185. package/cpp/rnwgpu/api/descriptors/GPUSharedTextureMemoryDescriptor.h +1 -1
  186. package/cpp/rnwgpu/api/descriptors/GPUStencilFaceState.h +1 -1
  187. package/cpp/rnwgpu/api/descriptors/GPUStorageTextureBindingLayout.h +1 -1
  188. package/cpp/rnwgpu/api/descriptors/GPUTextureBindingLayout.h +1 -1
  189. package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +1 -1
  190. package/cpp/rnwgpu/api/descriptors/GPUTextureViewDescriptor.h +1 -1
  191. package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +1 -1
  192. package/cpp/rnwgpu/api/descriptors/GPUVertexAttribute.h +1 -1
  193. package/cpp/rnwgpu/api/descriptors/GPUVertexBufferLayout.h +1 -1
  194. package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +1 -1
  195. package/cpp/rnwgpu/api/descriptors/Unions.h +1 -1
  196. package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +20 -21
  197. package/cpp/rnwgpu/async/RuntimeContext.cpp +5 -0
  198. package/cpp/rnwgpu/async/RuntimeContext.h +15 -2
  199. package/lib/commonjs/external/reanimated/renderHelpers.d.ts +15 -0
  200. package/lib/commonjs/external/reanimated/renderHelpers.js +30 -1
  201. package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
  202. package/lib/commonjs/skia/NativeSetup.js +4 -0
  203. package/lib/commonjs/skia/NativeSetup.js.map +1 -1
  204. package/lib/commonjs/skia/SkiaWorkletSerialization.d.ts +1 -0
  205. package/lib/commonjs/skia/SkiaWorkletSerialization.js +66 -0
  206. package/lib/commonjs/skia/SkiaWorkletSerialization.js.map +1 -0
  207. package/lib/commonjs/sksg/Container.native.js +20 -1
  208. package/lib/commonjs/sksg/Container.native.js.map +1 -1
  209. package/lib/commonjs/views/WebGPUCanvas.d.ts +1 -0
  210. package/lib/commonjs/views/WebGPUCanvas.js +13 -0
  211. package/lib/commonjs/views/WebGPUCanvas.js.map +1 -1
  212. package/lib/module/external/reanimated/renderHelpers.d.ts +15 -0
  213. package/lib/module/external/reanimated/renderHelpers.js +29 -0
  214. package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
  215. package/lib/module/skia/NativeSetup.js +4 -0
  216. package/lib/module/skia/NativeSetup.js.map +1 -1
  217. package/lib/module/skia/SkiaWorkletSerialization.d.ts +1 -0
  218. package/lib/module/skia/SkiaWorkletSerialization.js +59 -0
  219. package/lib/module/skia/SkiaWorkletSerialization.js.map +1 -0
  220. package/lib/module/sksg/Container.native.js +21 -2
  221. package/lib/module/sksg/Container.native.js.map +1 -1
  222. package/lib/module/views/WebGPUCanvas.d.ts +1 -0
  223. package/lib/module/views/WebGPUCanvas.js +14 -1
  224. package/lib/module/views/WebGPUCanvas.js.map +1 -1
  225. package/lib/typescript/lib/commonjs/external/reanimated/renderHelpers.d.ts +2 -0
  226. package/lib/typescript/lib/commonjs/skia/SkiaWorkletSerialization.d.ts +2 -0
  227. package/lib/typescript/lib/module/external/reanimated/renderHelpers.d.ts +15 -0
  228. package/lib/typescript/lib/module/skia/SkiaWorkletSerialization.d.ts +1 -0
  229. package/lib/typescript/src/external/reanimated/renderHelpers.d.ts +15 -0
  230. package/lib/typescript/src/skia/SkiaWorkletSerialization.d.ts +1 -0
  231. package/lib/typescript/src/views/WebGPUCanvas.d.ts +1 -0
  232. package/package.json +12 -8
  233. package/react-native-skia.podspec +1 -2
  234. package/src/external/reanimated/renderHelpers.ts +30 -0
  235. package/src/skia/NativeSetup.ts +5 -0
  236. package/src/skia/SkiaWorkletSerialization.ts +67 -0
  237. package/src/sksg/Container.native.ts +40 -2
  238. package/src/views/WebGPUCanvas.tsx +17 -1
  239. package/cpp/api/JsiSkHostObjects.h +0 -257
  240. package/cpp/dawn/include/dawn/dawn_proc.h +0 -53
  241. package/cpp/dawn/include/dawn/dawn_proc_table.h +0 -330
  242. package/cpp/dawn/include/dawn/dawn_thread_dispatch_proc.h +0 -47
  243. package/cpp/dawn/include/dawn/dawn_version.h +0 -41
  244. package/cpp/dawn/include/dawn/native/D3D11Backend.h +0 -65
  245. package/cpp/dawn/include/dawn/native/D3D12Backend.h +0 -86
  246. package/cpp/dawn/include/dawn/native/D3DBackend.h +0 -56
  247. package/cpp/dawn/include/dawn/native/DawnNative.h +0 -369
  248. package/cpp/dawn/include/dawn/native/MetalBackend.h +0 -56
  249. package/cpp/dawn/include/dawn/native/NullBackend.h +0 -39
  250. package/cpp/dawn/include/dawn/native/OpenGLBackend.h +0 -89
  251. package/cpp/dawn/include/dawn/native/VulkanBackend.h +0 -183
  252. package/cpp/dawn/include/dawn/native/WebGPUBackend.h +0 -49
  253. package/cpp/dawn/include/dawn/native/dawn_native_export.h +0 -49
  254. package/cpp/dawn/include/dawn/platform/DawnPlatform.h +0 -210
  255. package/cpp/dawn/include/dawn/platform/dawn_platform_export.h +0 -49
  256. package/cpp/dawn/include/dawn/replay/Replay.h +0 -99
  257. package/cpp/dawn/include/dawn/replay/dawn_replay_export.h +0 -49
  258. package/cpp/dawn/include/dawn/webgpu_cpp_print.h +0 -2844
  259. package/cpp/dawn/include/tint/tint.h +0 -90
  260. package/cpp/dawn/include/webgpu/webgpu.h +0 -4987
  261. package/cpp/dawn/include/webgpu/webgpu_cpp.h +0 -10080
  262. package/cpp/dawn/include/webgpu/webgpu_cpp_chained_struct.h +0 -57
  263. package/cpp/dawn/include/webgpu/webgpu_enum_class_bitmasks.h +0 -161
  264. package/cpp/dawn/include/webgpu/webgpu_glfw.h +0 -88
  265. package/cpp/jsi/JsiHostObject.cpp +0 -137
  266. package/cpp/jsi/JsiHostObject.h +0 -385
  267. package/cpp/skia/src/gpu/graphite/ContextOptionsPriv.h +0 -45
  268. package/cpp/skia/src/gpu/graphite/ResourceTypes.h +0 -360
  269. package/cpp/skia/src/gpu/graphite/TextureProxyView.h +0 -105
  270. package/libs/.graphite +0 -1
  271. /package/cpp/{jsi2 → jsi}/JSIConverter.h +0 -0
  272. /package/cpp/{jsi2 → jsi}/Promise.cpp +0 -0
  273. /package/cpp/{jsi2 → jsi}/Promise.h +0 -0
@@ -1,6 +1,10 @@
1
1
  import Rea from "../external/reanimated/ReanimatedProxy";
2
2
  import type { Skia, SkPicture } from "../skia/types";
3
- import { HAS_REANIMATED_3 } from "../external/reanimated/renderHelpers";
3
+ import {
4
+ HAS_REANIMATED_3,
5
+ HAS_REANIMATED_4,
6
+ REANIMATED_VERSION_MAJOR,
7
+ } from "../external/reanimated/renderHelpers";
4
8
  import type { JsiRecorder } from "../skia/types/Recorder";
5
9
 
6
10
  import { ReanimatedRecorder } from "./Recorder/ReanimatedRecorder";
@@ -79,10 +83,44 @@ class NativeReanimatedContainer extends Container {
79
83
  }
80
84
  }
81
85
 
86
+ let hasWarnedAboutReanimatedSupport = false;
87
+
88
+ const reanimatedSupportError = () => {
89
+ if (REANIMATED_VERSION_MAJOR !== null && REANIMATED_VERSION_MAJOR >= 4) {
90
+ return (
91
+ "React Native Skia requires react-native-worklets >= 0.7.0 for its " +
92
+ "Reanimated integration on native platforms. Reanimated 4 is " +
93
+ "installed, but react-native-worklets is missing or too old. " +
94
+ "Please install or upgrade react-native-worklets."
95
+ );
96
+ }
97
+ return (
98
+ "React Native Skia requires Reanimated 4 (react-native-worklets >= " +
99
+ "0.7.0) for its Reanimated integration on native platforms. " +
100
+ "Reanimated 3 is not supported anymore: Skia objects cannot be used " +
101
+ "inside worklets or shared values with it. " +
102
+ "Please upgrade to react-native-reanimated >= 4.0.0."
103
+ );
104
+ };
105
+
82
106
  export const createContainer = (Skia: Skia, nativeId: number) => {
83
- if (HAS_REANIMATED_3 && nativeId !== -1) {
107
+ if (HAS_REANIMATED_4 && nativeId !== -1) {
84
108
  return new NativeReanimatedContainer(Skia, nativeId);
85
109
  } else {
110
+ if (HAS_REANIMATED_3 && !HAS_REANIMATED_4) {
111
+ const message = reanimatedSupportError();
112
+ if (__DEV__) {
113
+ // Fail loudly in development — a silent fallback to static rendering
114
+ // would only be noticed as frozen animations.
115
+ throw new Error(message);
116
+ }
117
+ if (!hasWarnedAboutReanimatedSupport) {
118
+ hasWarnedAboutReanimatedSupport = true;
119
+ console.error(
120
+ `${message} Falling back to static rendering (animations will not run).`
121
+ );
122
+ }
123
+ }
86
124
  return new StaticContainer(Skia, nativeId);
87
125
  }
88
126
  };
@@ -1,4 +1,4 @@
1
- import React, { useImperativeHandle, useRef, useState } from "react";
1
+ import React, { useEffect, useImperativeHandle, useRef, useState } from "react";
2
2
  import type { ViewProps } from "react-native";
3
3
  import { View, Platform } from "react-native";
4
4
 
@@ -19,6 +19,9 @@ declare global {
19
19
  width: number,
20
20
  height: number
21
21
  ) => RNCanvasContext;
22
+ // Retires a canvas context; called by the Canvas on unmount (the Canvas
23
+ // owns the native registry entry for its contextId).
24
+ destroyContext: (contextId: number) => void;
22
25
  };
23
26
  }
24
27
 
@@ -55,6 +58,19 @@ export const WebGPUCanvas = ({
55
58
  const viewRef = useRef(null);
56
59
  const [contextId] = useState(() => generateContextId());
57
60
 
61
+ // Retire the native registry entry for this contextId on unmount. When a
62
+ // native surface is still attached, this is a no-op and the native view's
63
+ // own teardown retires the entry instead — which keeps StrictMode's
64
+ // simulated unmount (which re-runs effects without unmounting native views)
65
+ // from orphaning a live surface.
66
+ useEffect(() => {
67
+ return () => {
68
+ if (typeof RNWebGPU !== "undefined") {
69
+ RNWebGPU.destroyContext(contextId);
70
+ }
71
+ };
72
+ }, [contextId]);
73
+
58
74
  useImperativeHandle(ref, () => ({
59
75
  getContextId: () => contextId,
60
76
  getNativeSurface: () => {
@@ -1,257 +0,0 @@
1
- #pragma once
2
-
3
- #include <algorithm>
4
- #include <memory>
5
- #include <string>
6
- #include <utility>
7
-
8
- #include "jsi/JsiHostObject.h"
9
- #include "utils/RNSkLog.h"
10
- #include "rnskia/RNSkPlatformContext.h"
11
-
12
- namespace RNSkia {
13
-
14
- namespace jsi = facebook::jsi;
15
-
16
- // Minimum memory pressure reported for any host object.
17
- // This accounts for C++ wrapper overhead and ensures dispose() never
18
- // increases reported memory pressure (which would defeat its purpose).
19
- static constexpr size_t kMinMemoryPressure = 256;
20
-
21
- /**
22
- * Base class for jsi host objects - these are all implemented as JsiHostObjects
23
- * and has a pointer to the platform context.
24
- */
25
- class JsiSkHostObject : public RNJsi::JsiHostObject {
26
- public:
27
- /**
28
- * Default constructor
29
- * @param context Platform context
30
- */
31
- explicit JsiSkHostObject(std::shared_ptr<RNSkPlatformContext> context)
32
- : _context(context) {}
33
-
34
- /**
35
- * Override this method to return the memory pressure for the wrapped object.
36
- * @return The memory pressure in bytes
37
- */
38
- virtual size_t getMemoryPressure() const = 0;
39
-
40
- /**
41
- * Returns the type name of the host object.
42
- */
43
- virtual std::string getObjectType() const = 0;
44
-
45
- protected:
46
- /**
47
- * @return A pointer to the platform context
48
- */
49
- std::shared_ptr<RNSkPlatformContext> getContext() { return _context; }
50
-
51
- private:
52
- std::shared_ptr<RNSkPlatformContext> _context;
53
- };
54
-
55
- #define JSI_API_TYPENAME(A) \
56
- JSI_PROPERTY_GET(__typename__) { \
57
- return jsi::String::createFromUtf8(runtime, #A); \
58
- }
59
-
60
- #define EXPORT_JSI_API_TYPENAME(CLASS, TYPENAME) \
61
- JSI_API_TYPENAME(TYPENAME) \
62
- JSI_EXPORT_PROPERTY_GETTERS(JSI_EXPORT_PROP_GET(CLASS, __typename__))
63
-
64
- // Define this macro to enable memory pressure debug logging
65
- // #define RNSKIA_DEBUG_MEMORY_PRESSURE
66
-
67
- #ifdef RNSKIA_DEBUG_MEMORY_PRESSURE
68
- // Version with debug logging
69
- #define JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE( \
70
- runtime, hostObjectInstance, context) \
71
- [&]() { \
72
- auto result = \
73
- jsi::Object::createFromHostObject(runtime, hostObjectInstance); \
74
- auto memoryPressure = hostObjectInstance->getMemoryPressure(); \
75
- const void *hostObjectId = \
76
- static_cast<const void *>(hostObjectInstance.get()); \
77
- const char *mpUnit = "bytes"; \
78
- double mpValue = static_cast<double>(memoryPressure); \
79
- if (memoryPressure >= 1024ULL * 1024ULL) { \
80
- mpUnit = "MB"; \
81
- mpValue /= (1024.0 * 1024.0); \
82
- RNSkLogger::logToConsole( \
83
- "Host object %s (id=%p) memory pressure %.2f %s", \
84
- hostObjectInstance->getObjectType().c_str(), hostObjectId, mpValue, \
85
- mpUnit); \
86
- } else if (memoryPressure >= 1024ULL) { \
87
- mpUnit = "KB"; \
88
- mpValue /= 1024.0; \
89
- RNSkLogger::logToConsole( \
90
- "Host object %s (id=%p) memory pressure %.2f %s", \
91
- hostObjectInstance->getObjectType().c_str(), hostObjectId, mpValue, \
92
- mpUnit); \
93
- } else { \
94
- RNSkLogger::logToConsole( \
95
- "Host object %s (id=%p) memory pressure %zu %s", \
96
- hostObjectInstance->getObjectType().c_str(), hostObjectId, \
97
- memoryPressure, mpUnit); \
98
- } \
99
- if (memoryPressure > 0) { \
100
- result.setExternalMemoryPressure(runtime, memoryPressure); \
101
- } \
102
- return result; \
103
- }()
104
- #else
105
- // Version without debug logging (optimized)
106
- #define JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE( \
107
- runtime, hostObjectInstance, context) \
108
- [&]() { \
109
- auto result = \
110
- jsi::Object::createFromHostObject(runtime, hostObjectInstance); \
111
- auto memoryPressure = hostObjectInstance->getMemoryPressure(); \
112
- if (memoryPressure > 0) { \
113
- result.setExternalMemoryPressure(runtime, memoryPressure); \
114
- } \
115
- return result; \
116
- }()
117
- #endif
118
-
119
- template <typename T> class JsiSkWrappingHostObject : public JsiSkHostObject {
120
- public:
121
- /**
122
- * Default constructor
123
- * @param context Platform context
124
- */
125
- JsiSkWrappingHostObject(std::shared_ptr<RNSkPlatformContext> context,
126
- T object)
127
- : JsiSkHostObject(std::move(context)), _object(std::move(object)) {}
128
-
129
- /**
130
- * Returns the underlying object exposed by this host object. This object
131
- * should be wrapped in a shared pointer of some kind.
132
- * Throws if the object has been disposed.
133
- * @return Underlying object
134
- */
135
- T getObject() { return validateObject(); }
136
- const T getObject() const { return validateObject(); }
137
-
138
- /**
139
- * Updates the inner object with a new version of the object.
140
- */
141
- void setObject(T object) { _object = object; }
142
-
143
- /**
144
- * Dispose function that can be exposed to JS by using the JSI_API_TYPENAME
145
- * macro.
146
- */
147
- JSI_HOST_FUNCTION(dispose) {
148
- if (!isDisposed()) {
149
- thisValue.asObject(runtime).setExternalMemoryPressure(runtime,
150
- kMinMemoryPressure);
151
- }
152
- safeDispose();
153
- return jsi::Value::undefined();
154
- }
155
-
156
- protected:
157
- /**
158
- * Override to implement disposal of allocated resources like smart pointers.
159
- * This method will only be called once for each instance of this class.
160
- */
161
- virtual void releaseResources() = 0;
162
-
163
- /**
164
- * Returns true if the object has been disposed.
165
- */
166
- bool isDisposed() const {
167
- return _isDisposed.load(std::memory_order_acquire);
168
- }
169
-
170
- /**
171
- * Returns the underlying object without checking if disposed.
172
- * Use this in destructors and releaseResources() where we need to access
173
- * the object even after dispose() was called.
174
- */
175
- T getObjectUnchecked() const { return _object; }
176
-
177
- private:
178
- /**
179
- * Validates that _object was not disposed and returns it.
180
- */
181
- T validateObject() const {
182
- if (_isDisposed.load(std::memory_order_acquire)) {
183
- throw std::runtime_error("Attempted to access a disposed object.");
184
- }
185
- return _object;
186
- }
187
-
188
- void safeDispose() {
189
- bool expected = false;
190
- if (_isDisposed.compare_exchange_strong(expected, true,
191
- std::memory_order_acq_rel)) {
192
- releaseResources();
193
- }
194
- }
195
-
196
- /**
197
- * Wrapped object.
198
- */
199
- T _object;
200
-
201
- /**
202
- * Resource disposed flag.
203
- */
204
- std::atomic<bool> _isDisposed = {false};
205
- };
206
-
207
- template <typename T>
208
- class JsiSkWrappingSharedPtrHostObject
209
- : public JsiSkWrappingHostObject<std::shared_ptr<T>> {
210
- public:
211
- JsiSkWrappingSharedPtrHostObject(std::shared_ptr<RNSkPlatformContext> context,
212
- std::shared_ptr<T> object)
213
- : JsiSkWrappingHostObject<std::shared_ptr<T>>(std::move(context),
214
- std::move(object)) {}
215
-
216
- /**
217
- Returns the underlying object from a host object of this type
218
- */
219
- static std::shared_ptr<T> fromValue(jsi::Runtime &runtime,
220
- const jsi::Value &obj) {
221
- return std::static_pointer_cast<JsiSkWrappingSharedPtrHostObject>(
222
- obj.asObject(runtime).asHostObject(runtime))
223
- ->getObject();
224
- }
225
-
226
- protected:
227
- void releaseResources() override {
228
- // Clear internally allocated objects
229
- this->setObject(nullptr);
230
- }
231
- };
232
-
233
- template <typename T>
234
- class JsiSkWrappingSkPtrHostObject : public JsiSkWrappingHostObject<sk_sp<T>> {
235
- public:
236
- JsiSkWrappingSkPtrHostObject(std::shared_ptr<RNSkPlatformContext> context,
237
- sk_sp<T> object)
238
- : JsiSkWrappingHostObject<sk_sp<T>>(std::move(context),
239
- std::move(object)) {}
240
-
241
- /**
242
- Returns the underlying object from a host object of this type
243
- */
244
- static sk_sp<T> fromValue(jsi::Runtime &runtime, const jsi::Value &obj) {
245
- return std::static_pointer_cast<JsiSkWrappingSkPtrHostObject>(
246
- obj.asObject(runtime).asHostObject(runtime))
247
- ->getObject();
248
- }
249
-
250
- protected:
251
- void releaseResources() override {
252
- // Clear internally allocated objects
253
- this->setObject(nullptr);
254
- }
255
- };
256
-
257
- } // namespace RNSkia
@@ -1,53 +0,0 @@
1
- // Copyright 2019 The Dawn & Tint Authors
2
- //
3
- // Redistribution and use in source and binary forms, with or without
4
- // modification, are permitted provided that the following conditions are met:
5
- //
6
- // 1. Redistributions of source code must retain the above copyright notice, this
7
- // list of conditions and the following disclaimer.
8
- //
9
- // 2. Redistributions in binary form must reproduce the above copyright notice,
10
- // this list of conditions and the following disclaimer in the documentation
11
- // and/or other materials provided with the distribution.
12
- //
13
- // 3. Neither the name of the copyright holder nor the names of its
14
- // contributors may be used to endorse or promote products derived from
15
- // this software without specific prior written permission.
16
- //
17
- // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
- // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
- // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
- // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
21
- // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
- // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23
- // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24
- // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25
- // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
- // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
- #ifndef INCLUDE_DAWN_DAWN_PROC_H_
29
- #define INCLUDE_DAWN_DAWN_PROC_H_
30
-
31
- #include <webgpu/webgpu.h>
32
-
33
- #include "dawn/dawn_proc_table.h"
34
-
35
- #ifdef __cplusplus
36
- extern "C" {
37
- #endif
38
-
39
- // Sets the static proctable used by libdawn_proc to implement the Dawn entrypoints. Passing NULL
40
- // for `procs` sets up the null proctable that contains only null function pointers. It is the
41
- // default value of the proctable. Setting the proctable back to null is good practice when you
42
- // are done using libdawn_proc since further usage will cause a segfault instead of calling an
43
- // unexpected function.
44
- WGPU_EXPORT void dawnProcSetProcs(const DawnProcTable* procs);
45
-
46
- // Returns the static array of uint8_t of size 20 representing the Dawn version.
47
- WGPU_EXPORT const uint8_t* dawnProcGetVersion();
48
-
49
- #ifdef __cplusplus
50
- } // extern "C"
51
- #endif
52
-
53
- #endif // INCLUDE_DAWN_DAWN_PROC_H_