@shopify/react-native-skia 2.9.1 → 2.10.1

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 (387) hide show
  1. package/android/CMakeLists.txt +8 -46
  2. package/android/build.gradle +33 -0
  3. package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaPackage.java +1 -2
  4. package/cpp/api/JsiNativeBuffer.h +23 -24
  5. package/cpp/api/JsiSkAnimatedImage.h +24 -25
  6. package/cpp/api/JsiSkAnimatedImageFactory.h +18 -17
  7. package/cpp/api/JsiSkApi.h +254 -96
  8. package/cpp/api/JsiSkCanvas.h +141 -266
  9. package/cpp/api/JsiSkColor.h +7 -5
  10. package/cpp/api/JsiSkColorFilter.h +15 -8
  11. package/cpp/api/JsiSkColorFilterFactory.h +49 -67
  12. package/cpp/api/JsiSkContourMeasure.h +31 -38
  13. package/cpp/api/JsiSkContourMeasureIter.h +20 -23
  14. package/cpp/api/JsiSkConverters.h +410 -0
  15. package/cpp/api/JsiSkData.h +13 -7
  16. package/cpp/api/JsiSkDataFactory.h +27 -32
  17. package/cpp/api/JsiSkFont.h +123 -192
  18. package/cpp/api/JsiSkFontMgr.h +33 -26
  19. package/cpp/api/JsiSkFontMgrFactory.h +12 -11
  20. package/cpp/api/JsiSkFontStyle.h +14 -12
  21. package/cpp/api/JsiSkImage.h +90 -79
  22. package/cpp/api/JsiSkImageFactory.h +93 -95
  23. package/cpp/api/JsiSkImageFilter.h +21 -11
  24. package/cpp/api/JsiSkImageFilterFactory.h +375 -629
  25. package/cpp/api/JsiSkImageInfo.h +25 -25
  26. package/cpp/api/JsiSkMaskFilter.h +21 -11
  27. package/cpp/api/JsiSkMaskFilterFactory.h +17 -17
  28. package/cpp/api/JsiSkMatrix.h +51 -88
  29. package/cpp/api/JsiSkNativeObjects.h +387 -0
  30. package/cpp/api/JsiSkPaint.h +104 -142
  31. package/cpp/api/JsiSkParagraph.h +54 -64
  32. package/cpp/api/JsiSkParagraphBuilder.h +43 -68
  33. package/cpp/api/JsiSkParagraphBuilderFactory.h +20 -24
  34. package/cpp/api/JsiSkPath.h +242 -350
  35. package/cpp/api/JsiSkPathBuilder.h +153 -273
  36. package/cpp/api/JsiSkPathBuilderFactory.h +19 -20
  37. package/cpp/api/JsiSkPathEffect.h +21 -11
  38. package/cpp/api/JsiSkPathEffectFactory.h +61 -80
  39. package/cpp/api/JsiSkPathFactory.h +148 -238
  40. package/cpp/api/JsiSkPicture.h +32 -27
  41. package/cpp/api/JsiSkPictureFactory.h +21 -26
  42. package/cpp/api/JsiSkPictureRecorder.h +27 -29
  43. package/cpp/api/JsiSkPoint.h +20 -23
  44. package/cpp/api/JsiSkRRect.h +24 -32
  45. package/cpp/api/JsiSkRSXform.h +31 -48
  46. package/cpp/api/JsiSkRect.h +40 -50
  47. package/cpp/api/JsiSkRuntimeEffect.h +85 -92
  48. package/cpp/api/JsiSkRuntimeEffectFactory.h +14 -18
  49. package/cpp/api/JsiSkRuntimeShaderBuilder.h +28 -30
  50. package/cpp/api/JsiSkSVG.h +15 -15
  51. package/cpp/api/JsiSkSVGFactory.h +17 -20
  52. package/cpp/api/JsiSkShader.h +15 -8
  53. package/cpp/api/JsiSkShaderFactory.h +159 -238
  54. package/cpp/api/JsiSkSkottie.h +131 -143
  55. package/cpp/api/JsiSkSurface.h +29 -32
  56. package/cpp/api/JsiSkSurfaceFactory.h +18 -20
  57. package/cpp/api/JsiSkTextBlob.h +15 -8
  58. package/cpp/api/JsiSkTextBlobFactory.h +40 -66
  59. package/cpp/api/JsiSkTypeface.h +25 -22
  60. package/cpp/api/JsiSkTypefaceFactory.h +17 -15
  61. package/cpp/api/JsiSkTypefaceFontProvider.h +43 -39
  62. package/cpp/api/JsiSkTypefaceFontProviderFactory.h +13 -12
  63. package/cpp/api/JsiSkVertices.h +23 -22
  64. package/cpp/api/JsiSkiaContext.h +22 -23
  65. package/cpp/api/JsiSkottieFactory.h +16 -17
  66. package/cpp/api/JsiVideo.h +43 -81
  67. package/cpp/api/recorder/Convertor.h +31 -61
  68. package/cpp/api/recorder/DataTypes.h +8 -16
  69. package/cpp/api/recorder/JsiRecorder.h +83 -55
  70. package/cpp/api/recorder/RNRecorder.h +1 -1
  71. package/cpp/jsi/BoxedNativeObject.h +146 -0
  72. package/cpp/{jsi2 → jsi}/EnumMapper.h +4 -1
  73. package/cpp/{jsi2 → jsi}/JSIConverter.h +0 -31
  74. package/cpp/{jsi2 → jsi}/NativeObject.h +131 -152
  75. package/cpp/jsi/RuntimeAwareCache.cpp +1 -1
  76. package/cpp/jsi/RuntimeAwareCache.h +26 -8
  77. package/cpp/jsi/ViewProperty.h +5 -11
  78. package/cpp/rnskia/RNDawnContext.h +18 -2
  79. package/cpp/rnskia/RNDawnInterop.cpp +19 -0
  80. package/cpp/rnskia/RNDawnUtils.h +18 -1
  81. package/cpp/rnskia/RNSkJsiViewApi.h +20 -11
  82. package/cpp/rnskia/RNSkManager.cpp +9 -168
  83. package/cpp/rnskia/RNSkPictureView.h +1 -1
  84. package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkaroundsAutogen.h +2 -0
  85. package/lib/commonjs/external/reanimated/renderHelpers.d.ts +15 -0
  86. package/lib/commonjs/external/reanimated/renderHelpers.js +30 -1
  87. package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
  88. package/lib/commonjs/mock/index.js +0 -1
  89. package/lib/commonjs/mock/index.js.map +1 -1
  90. package/lib/commonjs/skia/NativeSetup.js +4 -0
  91. package/lib/commonjs/skia/NativeSetup.js.map +1 -1
  92. package/lib/commonjs/skia/SkiaWorkletSerialization.d.ts +1 -0
  93. package/lib/commonjs/skia/SkiaWorkletSerialization.js +66 -0
  94. package/lib/commonjs/skia/SkiaWorkletSerialization.js.map +1 -0
  95. package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +15 -6
  96. package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
  97. package/lib/commonjs/skia/types/Skia.d.ts +5 -15
  98. package/lib/commonjs/skia/types/Skia.js.map +1 -1
  99. package/lib/commonjs/skia/types/index.d.ts +0 -1
  100. package/lib/commonjs/skia/types/index.js +0 -11
  101. package/lib/commonjs/skia/types/index.js.map +1 -1
  102. package/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -2
  103. package/lib/commonjs/skia/web/JsiSkImageFactory.js +2 -2
  104. package/lib/commonjs/skia/web/JsiSkImageFactory.js.map +1 -1
  105. package/lib/commonjs/skia/web/JsiSkia.js +1 -4
  106. package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
  107. package/lib/commonjs/sksg/Container.native.js +20 -1
  108. package/lib/commonjs/sksg/Container.native.js.map +1 -1
  109. package/lib/commonjs/views/index.d.ts +0 -1
  110. package/lib/commonjs/views/index.js +0 -11
  111. package/lib/commonjs/views/index.js.map +1 -1
  112. package/lib/module/external/reanimated/renderHelpers.d.ts +15 -0
  113. package/lib/module/external/reanimated/renderHelpers.js +29 -0
  114. package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
  115. package/lib/module/mock/index.js +0 -1
  116. package/lib/module/mock/index.js.map +1 -1
  117. package/lib/module/skia/NativeSetup.js +4 -0
  118. package/lib/module/skia/NativeSetup.js.map +1 -1
  119. package/lib/module/skia/SkiaWorkletSerialization.d.ts +1 -0
  120. package/lib/module/skia/SkiaWorkletSerialization.js +59 -0
  121. package/lib/module/skia/SkiaWorkletSerialization.js.map +1 -0
  122. package/lib/module/skia/types/Image/ImageFactory.d.ts +15 -6
  123. package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
  124. package/lib/module/skia/types/Skia.d.ts +5 -15
  125. package/lib/module/skia/types/Skia.js.map +1 -1
  126. package/lib/module/skia/types/index.d.ts +0 -1
  127. package/lib/module/skia/types/index.js +0 -1
  128. package/lib/module/skia/types/index.js.map +1 -1
  129. package/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -2
  130. package/lib/module/skia/web/JsiSkImageFactory.js +2 -2
  131. package/lib/module/skia/web/JsiSkImageFactory.js.map +1 -1
  132. package/lib/module/skia/web/JsiSkia.js +1 -4
  133. package/lib/module/skia/web/JsiSkia.js.map +1 -1
  134. package/lib/module/sksg/Container.native.js +21 -2
  135. package/lib/module/sksg/Container.native.js.map +1 -1
  136. package/lib/module/views/index.d.ts +0 -1
  137. package/lib/module/views/index.js +0 -1
  138. package/lib/module/views/index.js.map +1 -1
  139. package/lib/typescript/lib/commonjs/external/reanimated/renderHelpers.d.ts +2 -0
  140. package/lib/typescript/lib/commonjs/mock/index.d.ts +0 -1
  141. package/lib/typescript/lib/commonjs/skia/SkiaWorkletSerialization.d.ts +2 -0
  142. package/lib/typescript/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -2
  143. package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +1 -2
  144. package/lib/typescript/lib/module/external/reanimated/renderHelpers.d.ts +15 -0
  145. package/lib/typescript/lib/module/mock/index.d.ts +0 -2
  146. package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -2
  147. package/lib/typescript/lib/module/skia/SkiaWorkletSerialization.d.ts +1 -0
  148. package/lib/typescript/lib/module/skia/types/index.d.ts +0 -1
  149. package/lib/typescript/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -2
  150. package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +1 -2
  151. package/lib/typescript/lib/module/views/index.d.ts +0 -1
  152. package/lib/typescript/src/external/reanimated/renderHelpers.d.ts +15 -0
  153. package/lib/typescript/src/skia/SkiaWorkletSerialization.d.ts +1 -0
  154. package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +15 -6
  155. package/lib/typescript/src/skia/types/Skia.d.ts +5 -15
  156. package/lib/typescript/src/skia/types/index.d.ts +0 -1
  157. package/lib/typescript/src/skia/web/JsiSkImageFactory.d.ts +2 -2
  158. package/lib/typescript/src/views/index.d.ts +0 -1
  159. package/package.json +8 -5
  160. package/react-native-skia.podspec +38 -5
  161. package/src/external/reanimated/renderHelpers.ts +30 -0
  162. package/src/mock/index.ts +0 -1
  163. package/src/skia/NativeSetup.ts +5 -0
  164. package/src/skia/SkiaWorkletSerialization.ts +67 -0
  165. package/src/skia/types/Image/ImageFactory.ts +15 -6
  166. package/src/skia/types/Skia.ts +5 -15
  167. package/src/skia/types/index.ts +0 -1
  168. package/src/skia/web/JsiSkImageFactory.ts +3 -3
  169. package/src/skia/web/JsiSkia.ts +2 -5
  170. package/src/sksg/Container.native.ts +40 -2
  171. package/src/views/index.ts +0 -1
  172. package/android/cpp/jni/JniWebGPUView.cpp +0 -112
  173. package/android/cpp/rnskia-android/SkiaPlatformContext.h +0 -26
  174. package/android/src/main/java/com/shopify/reactnative/skia/WebGPUSurfaceView.java +0 -43
  175. package/android/src/main/java/com/shopify/reactnative/skia/WebGPUTextureView.java +0 -50
  176. package/android/src/main/java/com/shopify/reactnative/skia/WebGPUView.java +0 -98
  177. package/android/src/main/java/com/shopify/reactnative/skia/WebGPUViewAPI.java +0 -19
  178. package/android/src/main/java/com/shopify/reactnative/skia/WebGPUViewManager.java +0 -58
  179. package/apple/RNWebGPUAppleNativeBuffer.mm +0 -33
  180. package/apple/SkiaPlatformContext.h +0 -20
  181. package/apple/SkiaPlatformContext.mm +0 -21
  182. package/apple/SkiaWebGPUView.mm +0 -81
  183. package/apple/WebGPUMetalView.mm +0 -136
  184. package/cpp/api/JsiSkHostObjects.h +0 -257
  185. package/cpp/jsi/JsiHostObject.cpp +0 -137
  186. package/cpp/jsi/JsiHostObject.h +0 -385
  187. package/cpp/rnwgpu/ArrayBuffer.h +0 -117
  188. package/cpp/rnwgpu/Canvas.h +0 -50
  189. package/cpp/rnwgpu/PlatformContext.h +0 -18
  190. package/cpp/rnwgpu/SurfaceRegistry.h +0 -605
  191. package/cpp/rnwgpu/api/AppleNativeBuffer.h +0 -22
  192. package/cpp/rnwgpu/api/Convertors.h +0 -783
  193. package/cpp/rnwgpu/api/External.h +0 -12
  194. package/cpp/rnwgpu/api/GPU.cpp +0 -162
  195. package/cpp/rnwgpu/api/GPU.h +0 -60
  196. package/cpp/rnwgpu/api/GPUAdapter.cpp +0 -240
  197. package/cpp/rnwgpu/api/GPUAdapter.h +0 -60
  198. package/cpp/rnwgpu/api/GPUAdapterInfo.h +0 -57
  199. package/cpp/rnwgpu/api/GPUBindGroup.cpp +0 -3
  200. package/cpp/rnwgpu/api/GPUBindGroup.h +0 -51
  201. package/cpp/rnwgpu/api/GPUBindGroupLayout.h +0 -52
  202. package/cpp/rnwgpu/api/GPUBuffer.cpp +0 -107
  203. package/cpp/rnwgpu/api/GPUBuffer.h +0 -88
  204. package/cpp/rnwgpu/api/GPUCanvasContext.cpp +0 -75
  205. package/cpp/rnwgpu/api/GPUCanvasContext.h +0 -70
  206. package/cpp/rnwgpu/api/GPUCommandBuffer.h +0 -45
  207. package/cpp/rnwgpu/api/GPUCommandEncoder.cpp +0 -179
  208. package/cpp/rnwgpu/api/GPUCommandEncoder.h +0 -111
  209. package/cpp/rnwgpu/api/GPUCompilationInfo.h +0 -79
  210. package/cpp/rnwgpu/api/GPUCompilationMessage.h +0 -36
  211. package/cpp/rnwgpu/api/GPUComputePassEncoder.cpp +0 -60
  212. package/cpp/rnwgpu/api/GPUComputePassEncoder.h +0 -85
  213. package/cpp/rnwgpu/api/GPUComputePipeline.cpp +0 -12
  214. package/cpp/rnwgpu/api/GPUComputePipeline.h +0 -60
  215. package/cpp/rnwgpu/api/GPUDevice.cpp +0 -614
  216. package/cpp/rnwgpu/api/GPUDevice.h +0 -258
  217. package/cpp/rnwgpu/api/GPUDeviceLostInfo.cpp +0 -7
  218. package/cpp/rnwgpu/api/GPUDeviceLostInfo.h +0 -40
  219. package/cpp/rnwgpu/api/GPUError.h +0 -35
  220. package/cpp/rnwgpu/api/GPUExtent3D.h +0 -66
  221. package/cpp/rnwgpu/api/GPUExternalTexture.cpp +0 -139
  222. package/cpp/rnwgpu/api/GPUExternalTexture.h +0 -95
  223. package/cpp/rnwgpu/api/GPUFeatures.h +0 -203
  224. package/cpp/rnwgpu/api/GPUInternalError.h +0 -31
  225. package/cpp/rnwgpu/api/GPUOrigin2D.h +0 -55
  226. package/cpp/rnwgpu/api/GPUOrigin3D.h +0 -62
  227. package/cpp/rnwgpu/api/GPUOutOfMemoryError.h +0 -33
  228. package/cpp/rnwgpu/api/GPUPipelineLayout.h +0 -45
  229. package/cpp/rnwgpu/api/GPUQuerySet.cpp +0 -11
  230. package/cpp/rnwgpu/api/GPUQuerySet.h +0 -73
  231. package/cpp/rnwgpu/api/GPUQueue.cpp +0 -179
  232. package/cpp/rnwgpu/api/GPUQueue.h +0 -84
  233. package/cpp/rnwgpu/api/GPURenderBundle.h +0 -44
  234. package/cpp/rnwgpu/api/GPURenderBundleEncoder.cpp +0 -131
  235. package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +0 -110
  236. package/cpp/rnwgpu/api/GPURenderPassEncoder.cpp +0 -165
  237. package/cpp/rnwgpu/api/GPURenderPassEncoder.h +0 -130
  238. package/cpp/rnwgpu/api/GPURenderPipeline.cpp +0 -13
  239. package/cpp/rnwgpu/api/GPURenderPipeline.h +0 -61
  240. package/cpp/rnwgpu/api/GPUSampler.h +0 -44
  241. package/cpp/rnwgpu/api/GPUShaderModule.cpp +0 -56
  242. package/cpp/rnwgpu/api/GPUShaderModule.h +0 -66
  243. package/cpp/rnwgpu/api/GPUSharedFence.cpp +0 -80
  244. package/cpp/rnwgpu/api/GPUSharedFence.h +0 -53
  245. package/cpp/rnwgpu/api/GPUSharedTextureMemory.cpp +0 -135
  246. package/cpp/rnwgpu/api/GPUSharedTextureMemory.h +0 -75
  247. package/cpp/rnwgpu/api/GPUSupportedLimits.cpp +0 -129
  248. package/cpp/rnwgpu/api/GPUSupportedLimits.h +0 -131
  249. package/cpp/rnwgpu/api/GPUTexture.cpp +0 -47
  250. package/cpp/rnwgpu/api/GPUTexture.h +0 -162
  251. package/cpp/rnwgpu/api/GPUTextureView.h +0 -44
  252. package/cpp/rnwgpu/api/GPUUncapturedErrorEvent.h +0 -60
  253. package/cpp/rnwgpu/api/GPUValidationError.h +0 -32
  254. package/cpp/rnwgpu/api/ImageBitmap.h +0 -62
  255. package/cpp/rnwgpu/api/NativeBufferUtils.h +0 -87
  256. package/cpp/rnwgpu/api/RNWebGPU.h +0 -82
  257. package/cpp/rnwgpu/api/WebGPUConstants.h +0 -36
  258. package/cpp/rnwgpu/api/descriptors/GPUBindGroupDescriptor.h +0 -64
  259. package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +0 -78
  260. package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutDescriptor.h +0 -56
  261. package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutEntry.h +0 -97
  262. package/cpp/rnwgpu/api/descriptors/GPUBlendComponent.h +0 -57
  263. package/cpp/rnwgpu/api/descriptors/GPUBlendState.h +0 -52
  264. package/cpp/rnwgpu/api/descriptors/GPUBufferBinding.h +0 -56
  265. package/cpp/rnwgpu/api/descriptors/GPUBufferBindingLayout.h +0 -56
  266. package/cpp/rnwgpu/api/descriptors/GPUBufferDescriptor.h +0 -59
  267. package/cpp/rnwgpu/api/descriptors/GPUBufferUsage.h +0 -39
  268. package/cpp/rnwgpu/api/descriptors/GPUCanvasConfiguration.h +0 -76
  269. package/cpp/rnwgpu/api/descriptors/GPUColor.h +0 -66
  270. package/cpp/rnwgpu/api/descriptors/GPUColorTargetState.h +0 -58
  271. package/cpp/rnwgpu/api/descriptors/GPUColorWrite.h +0 -29
  272. package/cpp/rnwgpu/api/descriptors/GPUCommandBufferDescriptor.h +0 -45
  273. package/cpp/rnwgpu/api/descriptors/GPUCommandEncoderDescriptor.h +0 -45
  274. package/cpp/rnwgpu/api/descriptors/GPUComputePassDescriptor.h +0 -56
  275. package/cpp/rnwgpu/api/descriptors/GPUComputePassTimestampWrites.h +0 -58
  276. package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +0 -67
  277. package/cpp/rnwgpu/api/descriptors/GPUDawnTogglesDescriptor.h +0 -56
  278. package/cpp/rnwgpu/api/descriptors/GPUDepthStencilState.h +0 -103
  279. package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +0 -109
  280. package/cpp/rnwgpu/api/descriptors/GPUExternalTextureBindingLayout.h +0 -38
  281. package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +0 -90
  282. package/cpp/rnwgpu/api/descriptors/GPUFragmentState.h +0 -73
  283. package/cpp/rnwgpu/api/descriptors/GPUImageCopyBuffer.h +0 -62
  284. package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +0 -63
  285. package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +0 -65
  286. package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +0 -81
  287. package/cpp/rnwgpu/api/descriptors/GPUImageDataLayout.h +0 -54
  288. package/cpp/rnwgpu/api/descriptors/GPUMapMode.h +0 -22
  289. package/cpp/rnwgpu/api/descriptors/GPUMultisampleState.h +0 -54
  290. package/cpp/rnwgpu/api/descriptors/GPUPipelineLayoutDescriptor.h +0 -57
  291. package/cpp/rnwgpu/api/descriptors/GPUPrimitiveState.h +0 -69
  292. package/cpp/rnwgpu/api/descriptors/GPUProgrammableStage.h +0 -61
  293. package/cpp/rnwgpu/api/descriptors/GPUQuerySetDescriptor.h +0 -55
  294. package/cpp/rnwgpu/api/descriptors/GPUQueueDescriptor.h +0 -43
  295. package/cpp/rnwgpu/api/descriptors/GPURenderBundleDescriptor.h +0 -45
  296. package/cpp/rnwgpu/api/descriptors/GPURenderBundleEncoderDescriptor.h +0 -80
  297. package/cpp/rnwgpu/api/descriptors/GPURenderPassColorAttachment.h +0 -81
  298. package/cpp/rnwgpu/api/descriptors/GPURenderPassDepthStencilAttachment.h +0 -101
  299. package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +0 -92
  300. package/cpp/rnwgpu/api/descriptors/GPURenderPassTimestampWrites.h +0 -58
  301. package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +0 -103
  302. package/cpp/rnwgpu/api/descriptors/GPURequestAdapterOptions.h +0 -51
  303. package/cpp/rnwgpu/api/descriptors/GPUSamplerBindingLayout.h +0 -45
  304. package/cpp/rnwgpu/api/descriptors/GPUSamplerDescriptor.h +0 -110
  305. package/cpp/rnwgpu/api/descriptors/GPUShaderModuleCompilationHint.h +0 -60
  306. package/cpp/rnwgpu/api/descriptors/GPUShaderModuleDescriptor.h +0 -62
  307. package/cpp/rnwgpu/api/descriptors/GPUShaderStage.h +0 -25
  308. package/cpp/rnwgpu/api/descriptors/GPUSharedFenceDescriptor.h +0 -58
  309. package/cpp/rnwgpu/api/descriptors/GPUSharedFenceState.h +0 -51
  310. package/cpp/rnwgpu/api/descriptors/GPUSharedTextureMemoryDescriptor.h +0 -73
  311. package/cpp/rnwgpu/api/descriptors/GPUStencilFaceState.h +0 -64
  312. package/cpp/rnwgpu/api/descriptors/GPUStorageTextureBindingLayout.h +0 -59
  313. package/cpp/rnwgpu/api/descriptors/GPUTextureBindingLayout.h +0 -59
  314. package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +0 -91
  315. package/cpp/rnwgpu/api/descriptors/GPUTextureUsage.h +0 -29
  316. package/cpp/rnwgpu/api/descriptors/GPUTextureViewDescriptor.h +0 -91
  317. package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +0 -64
  318. package/cpp/rnwgpu/api/descriptors/GPUVertexAttribute.h +0 -53
  319. package/cpp/rnwgpu/api/descriptors/GPUVertexBufferLayout.h +0 -62
  320. package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +0 -73
  321. package/cpp/rnwgpu/api/descriptors/Unions.h +0 -1969
  322. package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +0 -214
  323. package/cpp/rnwgpu/async/AsyncTaskHandle.h +0 -58
  324. package/cpp/rnwgpu/async/RuntimeContext.cpp +0 -199
  325. package/cpp/rnwgpu/async/RuntimeContext.h +0 -134
  326. package/lib/commonjs/skia/types/WebGPU.d.ts +0 -184
  327. package/lib/commonjs/skia/types/WebGPU.js +0 -105
  328. package/lib/commonjs/skia/types/WebGPU.js.map +0 -1
  329. package/lib/commonjs/specs/WebGPUViewNativeComponent.d.ts +0 -8
  330. package/lib/commonjs/specs/WebGPUViewNativeComponent.js +0 -10
  331. package/lib/commonjs/specs/WebGPUViewNativeComponent.js.map +0 -1
  332. package/lib/commonjs/specs/WebGPUViewNativeComponent.web.d.ts +0 -8
  333. package/lib/commonjs/specs/WebGPUViewNativeComponent.web.js +0 -103
  334. package/lib/commonjs/specs/WebGPUViewNativeComponent.web.js.map +0 -1
  335. package/lib/commonjs/specs/utils.d.ts +0 -1
  336. package/lib/commonjs/specs/utils.js +0 -11
  337. package/lib/commonjs/specs/utils.js.map +0 -1
  338. package/lib/commonjs/views/WebGPUCanvas.d.ts +0 -33
  339. package/lib/commonjs/views/WebGPUCanvas.js +0 -79
  340. package/lib/commonjs/views/WebGPUCanvas.js.map +0 -1
  341. package/lib/commonjs/views/WebGPUCanvas.web.d.ts +0 -23
  342. package/lib/commonjs/views/WebGPUCanvas.web.js +0 -20
  343. package/lib/commonjs/views/WebGPUCanvas.web.js.map +0 -1
  344. package/lib/module/skia/types/WebGPU.d.ts +0 -184
  345. package/lib/module/skia/types/WebGPU.js +0 -99
  346. package/lib/module/skia/types/WebGPU.js.map +0 -1
  347. package/lib/module/specs/WebGPUViewNativeComponent.d.ts +0 -8
  348. package/lib/module/specs/WebGPUViewNativeComponent.js +0 -4
  349. package/lib/module/specs/WebGPUViewNativeComponent.js.map +0 -1
  350. package/lib/module/specs/WebGPUViewNativeComponent.web.d.ts +0 -8
  351. package/lib/module/specs/WebGPUViewNativeComponent.web.js +0 -96
  352. package/lib/module/specs/WebGPUViewNativeComponent.web.js.map +0 -1
  353. package/lib/module/specs/utils.d.ts +0 -1
  354. package/lib/module/specs/utils.js +0 -5
  355. package/lib/module/specs/utils.js.map +0 -1
  356. package/lib/module/views/WebGPUCanvas.d.ts +0 -33
  357. package/lib/module/views/WebGPUCanvas.js +0 -70
  358. package/lib/module/views/WebGPUCanvas.js.map +0 -1
  359. package/lib/module/views/WebGPUCanvas.web.d.ts +0 -23
  360. package/lib/module/views/WebGPUCanvas.web.js +0 -12
  361. package/lib/module/views/WebGPUCanvas.web.js.map +0 -1
  362. package/lib/typescript/lib/commonjs/skia/types/WebGPU.d.ts +0 -2
  363. package/lib/typescript/lib/commonjs/specs/WebGPUViewNativeComponent.d.ts +0 -4
  364. package/lib/typescript/lib/commonjs/specs/WebGPUViewNativeComponent.web.d.ts +0 -3
  365. package/lib/typescript/lib/commonjs/specs/utils.d.ts +0 -2
  366. package/lib/typescript/lib/commonjs/views/WebGPUCanvas.d.ts +0 -6
  367. package/lib/typescript/lib/commonjs/views/WebGPUCanvas.web.d.ts +0 -6
  368. package/lib/typescript/lib/module/skia/types/WebGPU.d.ts +0 -31
  369. package/lib/typescript/lib/module/specs/WebGPUViewNativeComponent.d.ts +0 -2
  370. package/lib/typescript/lib/module/specs/WebGPUViewNativeComponent.web.d.ts +0 -2
  371. package/lib/typescript/lib/module/specs/utils.d.ts +0 -1
  372. package/lib/typescript/lib/module/views/WebGPUCanvas.d.ts +0 -7
  373. package/lib/typescript/lib/module/views/WebGPUCanvas.web.d.ts +0 -8
  374. package/lib/typescript/src/skia/types/WebGPU.d.ts +0 -184
  375. package/lib/typescript/src/specs/WebGPUViewNativeComponent.d.ts +0 -8
  376. package/lib/typescript/src/specs/WebGPUViewNativeComponent.web.d.ts +0 -8
  377. package/lib/typescript/src/specs/utils.d.ts +0 -1
  378. package/lib/typescript/src/views/WebGPUCanvas.d.ts +0 -33
  379. package/lib/typescript/src/views/WebGPUCanvas.web.d.ts +0 -23
  380. package/src/skia/types/WebGPU.ts +0 -226
  381. package/src/specs/WebGPUViewNativeComponent.ts +0 -11
  382. package/src/specs/WebGPUViewNativeComponent.web.ts +0 -110
  383. package/src/specs/utils.ts +0 -4
  384. package/src/views/WebGPUCanvas.tsx +0 -125
  385. package/src/views/WebGPUCanvas.web.tsx +0 -36
  386. /package/cpp/{jsi2 → jsi}/Promise.cpp +0 -0
  387. /package/cpp/{jsi2 → jsi}/Promise.h +0 -0
@@ -1,13 +1,16 @@
1
1
  #pragma once
2
2
 
3
3
  #include <memory>
4
+ #include <optional>
4
5
  #include <string>
5
6
  #include <utility>
7
+ #include <variant>
6
8
 
9
+ #include "JsiSkConverters.h"
7
10
  #include "JsiSkDispatcher.h"
8
- #include "JsiSkHostObjects.h"
9
11
  #include "JsiSkImageInfo.h"
10
12
  #include "JsiSkMatrix.h"
13
+ #include "JsiSkNativeObjects.h"
11
14
  #include "JsiSkShader.h"
12
15
  #include "api/third_party/base64.h"
13
16
 
@@ -15,8 +18,8 @@
15
18
  #include "utils/RNSkTypedArray.h"
16
19
 
17
20
  #if defined(SK_GRAPHITE)
18
- #include "rnskia/RNDawnContext.h"
19
21
  #include "include/gpu/graphite/Context.h"
22
+ #include "rnskia/RNDawnContext.h"
20
23
  #else
21
24
  #include "include/gpu/ganesh/GrDirectContext.h"
22
25
  #endif
@@ -140,63 +143,50 @@ inline SkSamplingOptions SamplingOptionsFromValue(jsi::Runtime &runtime,
140
143
  return samplingOptions;
141
144
  }
142
145
 
143
- class JsiSkImage : public JsiSkWrappingSkPtrHostObject<SkImage> {
146
+ class JsiSkImage : public JsiSkWrappingSkPtrNativeObject<JsiSkImage, SkImage> {
144
147
  private:
145
148
  std::shared_ptr<Dispatcher> _dispatcher;
146
149
 
147
150
  public:
151
+ static constexpr const char *CLASS_NAME = "Image";
152
+
148
153
  // TODO-API: Properties?
149
- JSI_HOST_FUNCTION(width) { return static_cast<double>(getObject()->width()); }
150
- JSI_HOST_FUNCTION(height) {
151
- return static_cast<double>(getObject()->height());
152
- }
154
+ double width() { return static_cast<double>(getObject()->width()); }
155
+ double height() { return static_cast<double>(getObject()->height()); }
153
156
 
154
- JSI_HOST_FUNCTION(getImageInfo) {
155
- return JsiSkImageInfo::toValue(runtime, getContext(),
156
- getObject()->imageInfo());
157
+ std::shared_ptr<JsiSkImageInfo> getImageInfo() {
158
+ return std::make_shared<JsiSkImageInfo>(getContext(),
159
+ getObject()->imageInfo());
157
160
  }
158
161
 
159
- JSI_HOST_FUNCTION(makeShaderOptions) {
160
- auto tmx = (SkTileMode)arguments[0].asNumber();
161
- auto tmy = (SkTileMode)arguments[1].asNumber();
162
- auto fm = (SkFilterMode)arguments[2].asNumber();
163
- auto mm = (SkMipmapMode)arguments[3].asNumber();
164
- auto m = count > 4 && !arguments[4].isUndefined()
165
- ? JsiSkMatrix::fromValue(runtime, arguments[4]).get()
166
- : nullptr;
167
- auto shader =
168
- getObject()->makeShader(tmx, tmy, SkSamplingOptions(fm, mm), m);
169
- auto shaderObj =
170
- std::make_shared<JsiSkShader>(getContext(), std::move(shader));
171
- return JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE(runtime, shaderObj,
172
- getContext());
162
+ std::shared_ptr<JsiSkShader>
163
+ makeShaderOptions(double tmx, double tmy, double fm, double mm,
164
+ std::optional<std::shared_ptr<SkMatrix>> m) {
165
+ auto shader = getObject()->makeShader(
166
+ static_cast<SkTileMode>(tmx), static_cast<SkTileMode>(tmy),
167
+ SkSamplingOptions(static_cast<SkFilterMode>(fm),
168
+ static_cast<SkMipmapMode>(mm)),
169
+ m.has_value() ? m->get() : nullptr);
170
+ return std::make_shared<JsiSkShader>(getContext(), std::move(shader));
173
171
  }
174
172
 
175
- JSI_HOST_FUNCTION(makeShaderCubic) {
176
- auto tmx = (SkTileMode)arguments[0].asNumber();
177
- auto tmy = (SkTileMode)arguments[1].asNumber();
178
- auto B = SkDoubleToScalar(arguments[2].asNumber());
179
- auto C = SkDoubleToScalar(arguments[3].asNumber());
180
- auto m = count > 4 && !arguments[4].isUndefined()
181
- ? JsiSkMatrix::fromValue(runtime, arguments[4]).get()
182
- : nullptr;
183
- auto shader =
184
- getObject()->makeShader(tmx, tmy, SkSamplingOptions({B, C}), m);
185
- auto shaderObj =
186
- std::make_shared<JsiSkShader>(getContext(), std::move(shader));
187
- return JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE(runtime, shaderObj,
188
- getContext());
173
+ std::shared_ptr<JsiSkShader>
174
+ makeShaderCubic(double tmx, double tmy, double B, double C,
175
+ std::optional<std::shared_ptr<SkMatrix>> m) {
176
+ auto shader = getObject()->makeShader(
177
+ static_cast<SkTileMode>(tmx), static_cast<SkTileMode>(tmy),
178
+ SkSamplingOptions({SkDoubleToScalar(B), SkDoubleToScalar(C)}),
179
+ m.has_value() ? m->get() : nullptr);
180
+ return std::make_shared<JsiSkShader>(getContext(), std::move(shader));
189
181
  }
190
182
 
191
- sk_sp<SkData> encodeImageData(const jsi::Value *arguments, size_t count) {
183
+ sk_sp<SkData> encodeImageData(JsiOptional<double> formatParam,
184
+ JsiOptional<double> qualityParam) {
192
185
  // Get optional parameters
193
- auto format =
194
- count >= 1 ? static_cast<SkEncodedImageFormat>(arguments[0].asNumber())
195
- : SkEncodedImageFormat::kPNG;
196
-
197
- auto quality = (count >= 2 && arguments[1].isNumber())
198
- ? arguments[1].asNumber()
199
- : 100.0;
186
+ auto format = formatParam.has_value()
187
+ ? static_cast<SkEncodedImageFormat>(*formatParam)
188
+ : SkEncodedImageFormat::kPNG;
189
+ auto quality = qualityParam.has_value() ? *qualityParam : 100.0;
200
190
  auto image = getObject();
201
191
  #if defined(SK_GRAPHITE)
202
192
  image = DawnContext::getInstance().MakeRasterImage(image);
@@ -240,8 +230,17 @@ public:
240
230
  return data;
241
231
  }
242
232
 
233
+ // Stays raw: constructs a Uint8Array result.
243
234
  JSI_HOST_FUNCTION(encodeToBytes) {
244
- auto data = encodeImageData(arguments, count);
235
+ JsiOptional<double> format =
236
+ count >= 1 && !arguments[0].isUndefined() && !arguments[0].isNull()
237
+ ? JsiOptional<double>(arguments[0].asNumber())
238
+ : JsiOptional<double>();
239
+ JsiOptional<double> quality = count >= 2 && arguments[1].isNumber()
240
+ ? JsiOptional<double>(
241
+ arguments[1].asNumber())
242
+ : JsiOptional<double>();
243
+ auto data = encodeImageData(format, quality);
245
244
  if (!data) {
246
245
  return jsi::Value::null();
247
246
  }
@@ -263,17 +262,18 @@ public:
263
262
  return array;
264
263
  }
265
264
 
266
- JSI_HOST_FUNCTION(encodeToBase64) {
267
- auto data = encodeImageData(arguments, count);
265
+ std::variant<std::nullptr_t, std::string>
266
+ encodeToBase64(JsiOptional<double> format, JsiOptional<double> quality) {
267
+ auto data = encodeImageData(format, quality);
268
268
  if (!data) {
269
- return jsi::Value::null();
269
+ return nullptr;
270
270
  }
271
271
 
272
272
  auto len = Base64::Encode(data->bytes(), data->size(), nullptr);
273
273
  auto buffer = std::string(len, 0);
274
274
  Base64::Encode(data->bytes(), data->size(),
275
275
  reinterpret_cast<void *>(&buffer[0]));
276
- return jsi::String::createFromAscii(runtime, buffer);
276
+ return buffer;
277
277
  }
278
278
 
279
279
  JSI_HOST_FUNCTION(readPixels) {
@@ -330,24 +330,22 @@ public:
330
330
  return dest;
331
331
  }
332
332
 
333
- JSI_HOST_FUNCTION(makeNonTextureImage) {
333
+ std::variant<std::nullptr_t, std::shared_ptr<JsiSkImage>>
334
+ makeNonTextureImage() {
334
335
  #if defined(SK_GRAPHITE)
335
336
  auto rasterImage = DawnContext::getInstance().MakeRasterImage(getObject());
336
337
  #else
337
338
  auto grContext = getContext()->getDirectContext();
338
339
  auto image = getObject();
339
340
  if (!grContext) {
340
- throw jsi::JSError(runtime, "No GPU context available.");
341
+ throw std::runtime_error("No GPU context available.");
341
342
  }
342
343
  auto rasterImage = image->makeRasterImage(grContext);
343
344
  #endif
344
345
  if (!rasterImage) {
345
- return jsi::Value::null();
346
+ return nullptr;
346
347
  }
347
- auto hostObjectInstance =
348
- std::make_shared<JsiSkImage>(getContext(), std::move(rasterImage));
349
- return JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE(
350
- runtime, hostObjectInstance, getContext());
348
+ return std::make_shared<JsiSkImage>(getContext(), std::move(rasterImage));
351
349
  }
352
350
 
353
351
  JSI_HOST_FUNCTION(getNativeTextureUnstable) {
@@ -359,29 +357,44 @@ public:
359
357
  return JsiTextureInfo::toValue(runtime, texInfo);
360
358
  }
361
359
 
362
- JSI_HOST_FUNCTION(isTextureBacked) {
363
- return jsi::Value(getObject()->isTextureBacked());
360
+ bool isTextureBacked() { return getObject()->isTextureBacked(); }
361
+
362
+ /**
363
+ Returns the underlying object from a host object of this type
364
+ */
365
+ static sk_sp<SkImage> fromValue(jsi::Runtime &runtime,
366
+ const jsi::Value &obj) {
367
+ return objectFromValue(runtime, obj);
364
368
  }
365
369
 
366
- EXPORT_JSI_API_TYPENAME(JsiSkImage, Image)
367
-
368
- JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkImage, width),
369
- JSI_EXPORT_FUNC(JsiSkImage, height),
370
- JSI_EXPORT_FUNC(JsiSkImage, getImageInfo),
371
- JSI_EXPORT_FUNC(JsiSkImage, makeShaderOptions),
372
- JSI_EXPORT_FUNC(JsiSkImage, makeShaderCubic),
373
- JSI_EXPORT_FUNC(JsiSkImage, encodeToBytes),
374
- JSI_EXPORT_FUNC(JsiSkImage, encodeToBase64),
375
- JSI_EXPORT_FUNC(JsiSkImage, readPixels),
376
- JSI_EXPORT_FUNC(JsiSkImage, makeNonTextureImage),
377
- JSI_EXPORT_FUNC(JsiSkImage, getNativeTextureUnstable),
378
- JSI_EXPORT_FUNC(JsiSkImage, isTextureBacked),
379
- JSI_EXPORT_FUNC(JsiSkImage, dispose))
370
+ static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
371
+ installCommon(runtime, prototype);
372
+ installMethod(runtime, prototype, "width", &JsiSkImage::width);
373
+ installMethod(runtime, prototype, "height", &JsiSkImage::height);
374
+ installMethod(runtime, prototype, "getImageInfo",
375
+ &JsiSkImage::getImageInfo);
376
+ installMethod(runtime, prototype, "makeShaderOptions",
377
+ &JsiSkImage::makeShaderOptions);
378
+ installMethod(runtime, prototype, "makeShaderCubic",
379
+ &JsiSkImage::makeShaderCubic);
380
+ installHostMethod(runtime, prototype, "encodeToBytes",
381
+ &JsiSkImage::encodeToBytes);
382
+ installMethod(runtime, prototype, "encodeToBase64",
383
+ &JsiSkImage::encodeToBase64);
384
+ installHostMethod(runtime, prototype, "readPixels",
385
+ &JsiSkImage::readPixels);
386
+ installMethod(runtime, prototype, "makeNonTextureImage",
387
+ &JsiSkImage::makeNonTextureImage);
388
+ installHostMethod(runtime, prototype, "getNativeTextureUnstable",
389
+ &JsiSkImage::getNativeTextureUnstable);
390
+ installMethod(runtime, prototype, "isTextureBacked",
391
+ &JsiSkImage::isTextureBacked);
392
+ }
380
393
 
381
394
  JsiSkImage(std::shared_ptr<RNSkPlatformContext> context,
382
395
  const sk_sp<SkImage> image)
383
- : JsiSkWrappingSkPtrHostObject<SkImage>(std::move(context),
384
- std::move(image)) {
396
+ : JsiSkWrappingSkPtrNativeObject<JsiSkImage, SkImage>(std::move(context),
397
+ std::move(image)) {
385
398
  // Get the dispatcher for the current thread
386
399
  _dispatcher = Dispatcher::getDispatcher();
387
400
  // Process any pending operations (e.g. deletions of previous resources)
@@ -406,7 +419,7 @@ public:
406
419
  }
407
420
  }
408
421
 
409
- size_t getMemoryPressure() const override {
422
+ size_t getMemoryPressure() override {
410
423
  if (isDisposed()) {
411
424
  return 0;
412
425
  }
@@ -420,8 +433,6 @@ public:
420
433
  }
421
434
  return 0;
422
435
  }
423
-
424
- std::string getObjectType() const override { return "JsiSkImage"; }
425
436
  };
426
437
 
427
438
  } // namespace RNSkia
@@ -2,71 +2,58 @@
2
2
 
3
3
  #include <memory>
4
4
  #include <utility>
5
+ #include <variant>
5
6
 
6
7
  #include <jsi/jsi.h>
7
8
 
8
- #include "jsi/JsiPromises.h"
9
+ #include "JsiSkConverters.h"
9
10
  #include "JsiSkData.h"
10
- #include "JsiSkHostObjects.h"
11
11
  #include "JsiSkImage.h"
12
12
  #include "JsiSkImageInfo.h"
13
+ #include "JsiSkNativeObjects.h"
14
+ #include "jsi/JsiPromises.h"
13
15
 
14
16
  #ifdef SK_GRAPHITE
15
17
  #include "rnskia/RNDawnContext.h"
16
- #include "rnwgpu/api/GPUTexture.h"
17
18
  #endif
18
19
 
19
20
  namespace RNSkia {
20
21
 
21
22
  namespace jsi = facebook::jsi;
22
23
 
23
- class JsiSkImageFactory : public JsiSkHostObject {
24
+ class JsiSkImageFactory : public JsiSkNativeObject<JsiSkImageFactory> {
24
25
  public:
25
- JSI_HOST_FUNCTION(MakeNull) {
26
- auto hostObjectInstance =
27
- std::make_shared<JsiSkImage>(getContext(), nullptr);
28
- return JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE(
29
- runtime, hostObjectInstance, getContext());
26
+ static constexpr const char *CLASS_NAME = "ImageFactory";
27
+
28
+ std::shared_ptr<JsiSkImage> MakeNull() {
29
+ return std::make_shared<JsiSkImage>(getContext(), nullptr);
30
30
  }
31
31
 
32
- JSI_HOST_FUNCTION(MakeImageFromEncoded) {
33
- auto data = JsiSkData::fromValue(runtime, arguments[0]);
32
+ std::variant<std::nullptr_t, std::shared_ptr<JsiSkImage>>
33
+ MakeImageFromEncoded(sk_sp<SkData> data) {
34
34
  auto image = SkImages::DeferredFromEncodedData(data);
35
35
  if (image == nullptr) {
36
- return jsi::Value::null();
36
+ return nullptr;
37
37
  }
38
- auto hostObjectInstance =
39
- std::make_shared<JsiSkImage>(getContext(), std::move(image));
40
- return JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE(
41
- runtime, hostObjectInstance, getContext());
38
+ return std::make_shared<JsiSkImage>(getContext(), std::move(image));
42
39
  }
43
40
 
44
- JSI_HOST_FUNCTION(MakeImageFromNativeBuffer) {
45
- jsi::BigInt pointer = arguments[0].asBigInt(runtime);
46
- const uintptr_t nativeBufferPointer = pointer.asUint64(runtime);
47
- void *rawPointer = reinterpret_cast<void *>(nativeBufferPointer);
41
+ std::shared_ptr<JsiSkImage> MakeImageFromNativeBuffer(void *rawPointer) {
48
42
  auto image = getContext()->makeImageFromNativeBuffer(rawPointer);
49
43
  if (image == nullptr) {
50
44
  throw std::runtime_error("Failed to convert NativeBuffer to SkImage!");
51
45
  }
52
- auto hostObjectInstance =
53
- std::make_shared<JsiSkImage>(getContext(), std::move(image));
54
- return JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE(
55
- runtime, hostObjectInstance, getContext());
46
+ return std::make_shared<JsiSkImage>(getContext(), std::move(image));
56
47
  }
57
48
 
58
- JSI_HOST_FUNCTION(MakeImage) {
59
- auto imageInfo = JsiSkImageInfo::fromValue(runtime, arguments[0]);
60
- auto pixelData = JsiSkData::fromValue(runtime, arguments[1]);
61
- auto bytesPerRow = arguments[2].asNumber();
49
+ std::variant<std::nullptr_t, std::shared_ptr<JsiSkImage>>
50
+ MakeImage(std::shared_ptr<SkImageInfo> imageInfo, sk_sp<SkData> pixelData,
51
+ double bytesPerRow) {
62
52
  auto image = SkImages::RasterFromData(*imageInfo, pixelData, bytesPerRow);
63
53
  if (image == nullptr) {
64
- return jsi::Value::null();
54
+ return nullptr;
65
55
  }
66
- auto hostObjectInstance =
67
- std::make_shared<JsiSkImage>(getContext(), std::move(image));
68
- return JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE(
69
- runtime, hostObjectInstance, getContext());
56
+ return std::make_shared<JsiSkImage>(getContext(), std::move(image));
70
57
  }
71
58
 
72
59
  JSI_HOST_FUNCTION(MakeImageFromViewTag) {
@@ -88,10 +75,9 @@ public:
88
75
  promise->reject("Failed to create image from view tag");
89
76
  return;
90
77
  }
91
- auto hostObjectInstance =
92
- std::make_shared<JsiSkImage>(context, std::move(result));
93
- promise->resolve(JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE(
94
- runtime, hostObjectInstance, context));
78
+ promise->resolve(
79
+ makeJsiObject(runtime, std::make_shared<JsiSkImage>(
80
+ context, std::move(result))));
95
81
  });
96
82
  });
97
83
  });
@@ -105,97 +91,109 @@ public:
105
91
  if (image == nullptr) {
106
92
  throw std::runtime_error("Failed to convert native texture to SkImage!");
107
93
  }
108
- if (count > 4 && arguments[4].isObject() &&
109
- arguments[4].asObject(runtime).isHostObject(runtime)) {
110
- auto jsiImage =
111
- arguments[4].asObject(runtime).asHostObject<JsiSkImage>(runtime);
112
- jsiImage->setObject(image);
113
- return jsi::Value(runtime, arguments[4]);
94
+ if (count > 4) {
95
+ auto jsiImage = tryGetJsiObject<JsiSkImage>(runtime, arguments[4]);
96
+ if (jsiImage) {
97
+ jsiImage->setObject(image);
98
+ return jsi::Value(runtime, arguments[4]);
99
+ }
114
100
  }
115
- auto hostObjectInstance =
116
- std::make_shared<JsiSkImage>(getContext(), std::move(image));
117
- return JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE(
118
- runtime, hostObjectInstance, getContext());
101
+ return makeJsiObject(
102
+ runtime, std::make_shared<JsiSkImage>(getContext(), std::move(image)));
119
103
  }
120
104
 
121
- JSI_HOST_FUNCTION(MakeImageFromTexture) {
105
+ // Pointer-based texture interop with react-native-webgpu. The GPUTexture
106
+ // JS objects live in react-native-webgpu, so textures cross the package
107
+ // boundary as raw WGPUTexture pointers (BigInt), exactly like the device
108
+ // handoff (Skia.getNativeDevice / importDevice). Only sound on the shared
109
+ // device: both packages link one Dawn and share one wgpu::Instance.
110
+
111
+ JSI_HOST_FUNCTION(MakeImageFromNativeTexture) {
122
112
  #ifdef SK_GRAPHITE
123
- if (count < 1 || !arguments[0].isObject()) {
124
- throw std::runtime_error(
125
- "MakeImageFromTexture requires a GPUTexture argument");
113
+ if (count < 1 || !arguments[0].isBigInt()) {
114
+ throw std::runtime_error("MakeImageFromNativeTexture requires a "
115
+ "WGPUTexture pointer (BigInt), e.g. "
116
+ "texture.nativePointer");
126
117
  }
127
- auto obj = arguments[0].asObject(runtime);
128
- auto gpuTexture = obj.getNativeState<rnwgpu::GPUTexture>(runtime);
129
- if (!gpuTexture) {
130
- throw std::runtime_error("Invalid GPUTexture object");
118
+ auto raw = reinterpret_cast<WGPUTexture>(
119
+ arguments[0].asBigInt(runtime).asUint64(runtime));
120
+ if (raw == nullptr) {
121
+ throw std::runtime_error(
122
+ "MakeImageFromNativeTexture: pointer must be non-null");
131
123
  }
132
-
133
- wgpu::Texture texture = gpuTexture->get();
134
- int width = static_cast<int>(gpuTexture->getWidth());
135
- int height = static_cast<int>(gpuTexture->getHeight());
136
- wgpu::TextureFormat format = gpuTexture->getFormat();
137
-
124
+ // Borrow: AddRef so our wgpu::Texture holds its own reference; the
125
+ // wrapped SkImage retains the texture for its lifetime (see
126
+ // DawnContext::MakeImageFromTexture) and the caller keeps ownership of
127
+ // the JS GPUTexture.
128
+ wgpuTextureAddRef(raw);
129
+ wgpu::Texture texture = wgpu::Texture::Acquire(raw);
138
130
  auto &dawnContext = DawnContext::getInstance();
139
- auto image =
140
- dawnContext.MakeImageFromTexture(texture, width, height, format);
131
+ auto image = dawnContext.MakeImageFromTexture(
132
+ texture, static_cast<int>(texture.GetWidth()),
133
+ static_cast<int>(texture.GetHeight()), texture.GetFormat());
141
134
  if (image == nullptr) {
142
- throw std::runtime_error("Failed to create SkImage from GPUTexture!");
135
+ throw std::runtime_error(
136
+ "MakeImageFromNativeTexture: failed to wrap the texture");
143
137
  }
144
- auto hostObjectInstance =
145
- std::make_shared<JsiSkImage>(getContext(), std::move(image));
146
- return JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE(
147
- runtime, hostObjectInstance, getContext());
138
+ return makeJsiObject(
139
+ runtime, std::make_shared<JsiSkImage>(getContext(), std::move(image)));
148
140
  #else
149
141
  throw std::runtime_error(
150
- "MakeImageFromTexture is only available with the Graphite backend. "
151
- "Rebuild with SK_GRAPHITE enabled.");
142
+ "MakeImageFromNativeTexture is only available with the Graphite "
143
+ "backend. Rebuild with SK_GRAPHITE enabled.");
152
144
  #endif
153
145
  }
154
146
 
155
- JSI_HOST_FUNCTION(MakeTextureFromImage) {
147
+ JSI_HOST_FUNCTION(MakeNativeTextureFromImage) {
156
148
  #ifdef SK_GRAPHITE
157
149
  if (count < 1) {
158
150
  throw std::runtime_error(
159
- "MakeTextureFromImage requires an SkImage argument");
151
+ "MakeNativeTextureFromImage requires an SkImage argument");
160
152
  }
161
153
  auto image = JsiSkImage::fromValue(runtime, arguments[0]);
162
154
  if (!image) {
163
155
  throw std::runtime_error("Invalid SkImage object");
164
156
  }
165
-
166
157
  auto &dawnContext = DawnContext::getInstance();
167
158
  wgpu::Texture texture = dawnContext.MakeTextureFromImage(image);
168
159
  if (!texture) {
169
- throw std::runtime_error("Failed to create GPUTexture from SkImage!");
160
+ throw std::runtime_error(
161
+ "MakeNativeTextureFromImage: failed to create the texture");
170
162
  }
171
-
172
- auto gpuTexture =
173
- std::make_shared<rnwgpu::GPUTexture>(texture, "SkImage Texture");
174
- return rnwgpu::GPUTexture::create(runtime, gpuTexture);
163
+ // Transfer ownership: the returned pointer carries one reference and must
164
+ // be adopted exactly once (react-native-webgpu's adoptTexture()), which
165
+ // releases it when the JS GPUTexture is destroyed.
166
+ return jsi::BigInt::fromUint64(
167
+ runtime, reinterpret_cast<uint64_t>(texture.MoveToCHandle()));
175
168
  #else
176
169
  throw std::runtime_error(
177
- "MakeTextureFromImage is only available with the Graphite backend. "
178
- "Rebuild with SK_GRAPHITE enabled.");
170
+ "MakeNativeTextureFromImage is only available with the Graphite "
171
+ "backend. Rebuild with SK_GRAPHITE enabled.");
179
172
  #endif
180
173
  }
181
174
 
182
- size_t getMemoryPressure() const override { return 1024; }
183
-
184
- std::string getObjectType() const override { return "JsiSkImageFactory"; }
185
-
186
- JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkImageFactory, MakeImageFromEncoded),
187
- JSI_EXPORT_FUNC(JsiSkImageFactory, MakeImageFromViewTag),
188
- JSI_EXPORT_FUNC(JsiSkImageFactory,
189
- MakeImageFromNativeBuffer),
190
- JSI_EXPORT_FUNC(JsiSkImageFactory,
191
- MakeImageFromNativeTextureUnstable),
192
- JSI_EXPORT_FUNC(JsiSkImageFactory, MakeImage),
193
- JSI_EXPORT_FUNC(JsiSkImageFactory, MakeNull),
194
- JSI_EXPORT_FUNC(JsiSkImageFactory, MakeImageFromTexture),
195
- JSI_EXPORT_FUNC(JsiSkImageFactory, MakeTextureFromImage))
175
+ size_t getMemoryPressure() override { return 1024; }
176
+
177
+ static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
178
+ installMethod(runtime, prototype, "MakeImageFromEncoded",
179
+ &JsiSkImageFactory::MakeImageFromEncoded);
180
+ installHostMethod(runtime, prototype, "MakeImageFromViewTag",
181
+ &JsiSkImageFactory::MakeImageFromViewTag);
182
+ installMethod(runtime, prototype, "MakeImageFromNativeBuffer",
183
+ &JsiSkImageFactory::MakeImageFromNativeBuffer);
184
+ installHostMethod(runtime, prototype, "MakeImageFromNativeTextureUnstable",
185
+ &JsiSkImageFactory::MakeImageFromNativeTextureUnstable);
186
+ installMethod(runtime, prototype, "MakeImage",
187
+ &JsiSkImageFactory::MakeImage);
188
+ installMethod(runtime, prototype, "MakeNull", &JsiSkImageFactory::MakeNull);
189
+ installHostMethod(runtime, prototype, "MakeImageFromNativeTexture",
190
+ &JsiSkImageFactory::MakeImageFromNativeTexture);
191
+ installHostMethod(runtime, prototype, "MakeNativeTextureFromImage",
192
+ &JsiSkImageFactory::MakeNativeTextureFromImage);
193
+ }
196
194
 
197
195
  explicit JsiSkImageFactory(std::shared_ptr<RNSkPlatformContext> context)
198
- : JsiSkHostObject(std::move(context)) {}
196
+ : JsiSkNativeObject<JsiSkImageFactory>(std::move(context)) {}
199
197
  };
200
198
 
201
199
  } // namespace RNSkia
@@ -5,7 +5,7 @@
5
5
 
6
6
  #include <jsi/jsi.h>
7
7
 
8
- #include "JsiSkHostObjects.h"
8
+ #include "JsiSkNativeObjects.h"
9
9
 
10
10
  #pragma clang diagnostic push
11
11
  #pragma clang diagnostic ignored "-Wdocumentation"
@@ -18,19 +18,29 @@ namespace RNSkia {
18
18
 
19
19
  namespace jsi = facebook::jsi;
20
20
 
21
- class JsiSkImageFilter : public JsiSkWrappingSkPtrHostObject<SkImageFilter> {
21
+ class JsiSkImageFilter
22
+ : public JsiSkWrappingSkPtrNativeObject<JsiSkImageFilter, SkImageFilter> {
22
23
  public:
24
+ static constexpr const char *CLASS_NAME = "ImageFilter";
25
+
23
26
  JsiSkImageFilter(std::shared_ptr<RNSkPlatformContext> context,
24
27
  sk_sp<SkImageFilter> imageFilter)
25
- : JsiSkWrappingSkPtrHostObject<SkImageFilter>(std::move(context),
26
- std::move(imageFilter)) {}
27
-
28
- size_t getMemoryPressure() const override { return 1024 * 1024; }
29
-
30
- std::string getObjectType() const override { return "JsiSkImageFilter"; }
31
-
32
- EXPORT_JSI_API_TYPENAME(JsiSkImageFilter, ImageFilter)
33
- JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkImageFilter, dispose))
28
+ : JsiSkWrappingSkPtrNativeObject<JsiSkImageFilter, SkImageFilter>(
29
+ std::move(context), std::move(imageFilter)) {}
30
+
31
+ size_t getMemoryPressure() override { return 1024 * 1024; }
32
+
33
+ static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
34
+ installCommon(runtime, prototype);
35
+ }
36
+
37
+ /**
38
+ Returns the underlying object from a host object of this type
39
+ */
40
+ static sk_sp<SkImageFilter> fromValue(jsi::Runtime &runtime,
41
+ const jsi::Value &obj) {
42
+ return objectFromValue(runtime, obj);
43
+ }
34
44
  };
35
45
 
36
46
  } // namespace RNSkia