@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.
- package/android/CMakeLists.txt +8 -46
- package/android/build.gradle +33 -0
- package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaPackage.java +1 -2
- package/cpp/api/JsiNativeBuffer.h +23 -24
- package/cpp/api/JsiSkAnimatedImage.h +24 -25
- package/cpp/api/JsiSkAnimatedImageFactory.h +18 -17
- package/cpp/api/JsiSkApi.h +254 -96
- package/cpp/api/JsiSkCanvas.h +141 -266
- package/cpp/api/JsiSkColor.h +7 -5
- package/cpp/api/JsiSkColorFilter.h +15 -8
- package/cpp/api/JsiSkColorFilterFactory.h +49 -67
- package/cpp/api/JsiSkContourMeasure.h +31 -38
- package/cpp/api/JsiSkContourMeasureIter.h +20 -23
- package/cpp/api/JsiSkConverters.h +410 -0
- package/cpp/api/JsiSkData.h +13 -7
- package/cpp/api/JsiSkDataFactory.h +27 -32
- package/cpp/api/JsiSkFont.h +123 -192
- package/cpp/api/JsiSkFontMgr.h +33 -26
- package/cpp/api/JsiSkFontMgrFactory.h +12 -11
- package/cpp/api/JsiSkFontStyle.h +14 -12
- package/cpp/api/JsiSkImage.h +90 -79
- package/cpp/api/JsiSkImageFactory.h +93 -95
- package/cpp/api/JsiSkImageFilter.h +21 -11
- package/cpp/api/JsiSkImageFilterFactory.h +375 -629
- package/cpp/api/JsiSkImageInfo.h +25 -25
- package/cpp/api/JsiSkMaskFilter.h +21 -11
- package/cpp/api/JsiSkMaskFilterFactory.h +17 -17
- package/cpp/api/JsiSkMatrix.h +51 -88
- package/cpp/api/JsiSkNativeObjects.h +387 -0
- package/cpp/api/JsiSkPaint.h +104 -142
- package/cpp/api/JsiSkParagraph.h +54 -64
- package/cpp/api/JsiSkParagraphBuilder.h +43 -68
- package/cpp/api/JsiSkParagraphBuilderFactory.h +20 -24
- package/cpp/api/JsiSkPath.h +242 -350
- package/cpp/api/JsiSkPathBuilder.h +153 -273
- package/cpp/api/JsiSkPathBuilderFactory.h +19 -20
- package/cpp/api/JsiSkPathEffect.h +21 -11
- package/cpp/api/JsiSkPathEffectFactory.h +61 -80
- package/cpp/api/JsiSkPathFactory.h +148 -238
- package/cpp/api/JsiSkPicture.h +32 -27
- package/cpp/api/JsiSkPictureFactory.h +21 -26
- package/cpp/api/JsiSkPictureRecorder.h +27 -29
- package/cpp/api/JsiSkPoint.h +20 -23
- package/cpp/api/JsiSkRRect.h +24 -32
- package/cpp/api/JsiSkRSXform.h +31 -48
- package/cpp/api/JsiSkRect.h +40 -50
- package/cpp/api/JsiSkRuntimeEffect.h +85 -92
- package/cpp/api/JsiSkRuntimeEffectFactory.h +14 -18
- package/cpp/api/JsiSkRuntimeShaderBuilder.h +28 -30
- package/cpp/api/JsiSkSVG.h +15 -15
- package/cpp/api/JsiSkSVGFactory.h +17 -20
- package/cpp/api/JsiSkShader.h +15 -8
- package/cpp/api/JsiSkShaderFactory.h +159 -238
- package/cpp/api/JsiSkSkottie.h +131 -143
- package/cpp/api/JsiSkSurface.h +29 -32
- package/cpp/api/JsiSkSurfaceFactory.h +18 -20
- package/cpp/api/JsiSkTextBlob.h +15 -8
- package/cpp/api/JsiSkTextBlobFactory.h +40 -66
- package/cpp/api/JsiSkTypeface.h +25 -22
- package/cpp/api/JsiSkTypefaceFactory.h +17 -15
- package/cpp/api/JsiSkTypefaceFontProvider.h +43 -39
- package/cpp/api/JsiSkTypefaceFontProviderFactory.h +13 -12
- package/cpp/api/JsiSkVertices.h +23 -22
- package/cpp/api/JsiSkiaContext.h +22 -23
- package/cpp/api/JsiSkottieFactory.h +16 -17
- package/cpp/api/JsiVideo.h +43 -81
- package/cpp/api/recorder/Convertor.h +31 -61
- package/cpp/api/recorder/DataTypes.h +8 -16
- package/cpp/api/recorder/JsiRecorder.h +83 -55
- package/cpp/api/recorder/RNRecorder.h +1 -1
- package/cpp/jsi/BoxedNativeObject.h +146 -0
- package/cpp/{jsi2 → jsi}/EnumMapper.h +4 -1
- package/cpp/{jsi2 → jsi}/JSIConverter.h +0 -31
- package/cpp/{jsi2 → jsi}/NativeObject.h +131 -152
- package/cpp/jsi/RuntimeAwareCache.cpp +1 -1
- package/cpp/jsi/RuntimeAwareCache.h +26 -8
- package/cpp/jsi/ViewProperty.h +5 -11
- package/cpp/rnskia/RNDawnContext.h +18 -2
- package/cpp/rnskia/RNDawnInterop.cpp +19 -0
- package/cpp/rnskia/RNDawnUtils.h +18 -1
- package/cpp/rnskia/RNSkJsiViewApi.h +20 -11
- package/cpp/rnskia/RNSkManager.cpp +9 -168
- package/cpp/rnskia/RNSkPictureView.h +1 -1
- package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkaroundsAutogen.h +2 -0
- package/lib/commonjs/external/reanimated/renderHelpers.d.ts +15 -0
- package/lib/commonjs/external/reanimated/renderHelpers.js +30 -1
- package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
- package/lib/commonjs/mock/index.js +0 -1
- package/lib/commonjs/mock/index.js.map +1 -1
- package/lib/commonjs/skia/NativeSetup.js +4 -0
- package/lib/commonjs/skia/NativeSetup.js.map +1 -1
- package/lib/commonjs/skia/SkiaWorkletSerialization.d.ts +1 -0
- package/lib/commonjs/skia/SkiaWorkletSerialization.js +66 -0
- package/lib/commonjs/skia/SkiaWorkletSerialization.js.map +1 -0
- package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +15 -6
- package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/commonjs/skia/types/Skia.d.ts +5 -15
- package/lib/commonjs/skia/types/Skia.js.map +1 -1
- package/lib/commonjs/skia/types/index.d.ts +0 -1
- package/lib/commonjs/skia/types/index.js +0 -11
- package/lib/commonjs/skia/types/index.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -2
- package/lib/commonjs/skia/web/JsiSkImageFactory.js +2 -2
- package/lib/commonjs/skia/web/JsiSkImageFactory.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkia.js +1 -4
- package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
- package/lib/commonjs/sksg/Container.native.js +20 -1
- package/lib/commonjs/sksg/Container.native.js.map +1 -1
- package/lib/commonjs/views/index.d.ts +0 -1
- package/lib/commonjs/views/index.js +0 -11
- package/lib/commonjs/views/index.js.map +1 -1
- package/lib/module/external/reanimated/renderHelpers.d.ts +15 -0
- package/lib/module/external/reanimated/renderHelpers.js +29 -0
- package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
- package/lib/module/mock/index.js +0 -1
- package/lib/module/mock/index.js.map +1 -1
- package/lib/module/skia/NativeSetup.js +4 -0
- package/lib/module/skia/NativeSetup.js.map +1 -1
- package/lib/module/skia/SkiaWorkletSerialization.d.ts +1 -0
- package/lib/module/skia/SkiaWorkletSerialization.js +59 -0
- package/lib/module/skia/SkiaWorkletSerialization.js.map +1 -0
- package/lib/module/skia/types/Image/ImageFactory.d.ts +15 -6
- package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/module/skia/types/Skia.d.ts +5 -15
- package/lib/module/skia/types/Skia.js.map +1 -1
- package/lib/module/skia/types/index.d.ts +0 -1
- package/lib/module/skia/types/index.js +0 -1
- package/lib/module/skia/types/index.js.map +1 -1
- package/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -2
- package/lib/module/skia/web/JsiSkImageFactory.js +2 -2
- package/lib/module/skia/web/JsiSkImageFactory.js.map +1 -1
- package/lib/module/skia/web/JsiSkia.js +1 -4
- package/lib/module/skia/web/JsiSkia.js.map +1 -1
- package/lib/module/sksg/Container.native.js +21 -2
- package/lib/module/sksg/Container.native.js.map +1 -1
- package/lib/module/views/index.d.ts +0 -1
- package/lib/module/views/index.js +0 -1
- package/lib/module/views/index.js.map +1 -1
- package/lib/typescript/lib/commonjs/external/reanimated/renderHelpers.d.ts +2 -0
- package/lib/typescript/lib/commonjs/mock/index.d.ts +0 -1
- package/lib/typescript/lib/commonjs/skia/SkiaWorkletSerialization.d.ts +2 -0
- package/lib/typescript/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -2
- package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +1 -2
- package/lib/typescript/lib/module/external/reanimated/renderHelpers.d.ts +15 -0
- package/lib/typescript/lib/module/mock/index.d.ts +0 -2
- package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -2
- package/lib/typescript/lib/module/skia/SkiaWorkletSerialization.d.ts +1 -0
- package/lib/typescript/lib/module/skia/types/index.d.ts +0 -1
- package/lib/typescript/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -2
- package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +1 -2
- package/lib/typescript/lib/module/views/index.d.ts +0 -1
- package/lib/typescript/src/external/reanimated/renderHelpers.d.ts +15 -0
- package/lib/typescript/src/skia/SkiaWorkletSerialization.d.ts +1 -0
- package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +15 -6
- package/lib/typescript/src/skia/types/Skia.d.ts +5 -15
- package/lib/typescript/src/skia/types/index.d.ts +0 -1
- package/lib/typescript/src/skia/web/JsiSkImageFactory.d.ts +2 -2
- package/lib/typescript/src/views/index.d.ts +0 -1
- package/package.json +8 -5
- package/react-native-skia.podspec +38 -5
- package/src/external/reanimated/renderHelpers.ts +30 -0
- package/src/mock/index.ts +0 -1
- package/src/skia/NativeSetup.ts +5 -0
- package/src/skia/SkiaWorkletSerialization.ts +67 -0
- package/src/skia/types/Image/ImageFactory.ts +15 -6
- package/src/skia/types/Skia.ts +5 -15
- package/src/skia/types/index.ts +0 -1
- package/src/skia/web/JsiSkImageFactory.ts +3 -3
- package/src/skia/web/JsiSkia.ts +2 -5
- package/src/sksg/Container.native.ts +40 -2
- package/src/views/index.ts +0 -1
- package/android/cpp/jni/JniWebGPUView.cpp +0 -112
- package/android/cpp/rnskia-android/SkiaPlatformContext.h +0 -26
- package/android/src/main/java/com/shopify/reactnative/skia/WebGPUSurfaceView.java +0 -43
- package/android/src/main/java/com/shopify/reactnative/skia/WebGPUTextureView.java +0 -50
- package/android/src/main/java/com/shopify/reactnative/skia/WebGPUView.java +0 -98
- package/android/src/main/java/com/shopify/reactnative/skia/WebGPUViewAPI.java +0 -19
- package/android/src/main/java/com/shopify/reactnative/skia/WebGPUViewManager.java +0 -58
- package/apple/RNWebGPUAppleNativeBuffer.mm +0 -33
- package/apple/SkiaPlatformContext.h +0 -20
- package/apple/SkiaPlatformContext.mm +0 -21
- package/apple/SkiaWebGPUView.mm +0 -81
- package/apple/WebGPUMetalView.mm +0 -136
- package/cpp/api/JsiSkHostObjects.h +0 -257
- package/cpp/jsi/JsiHostObject.cpp +0 -137
- package/cpp/jsi/JsiHostObject.h +0 -385
- package/cpp/rnwgpu/ArrayBuffer.h +0 -117
- package/cpp/rnwgpu/Canvas.h +0 -50
- package/cpp/rnwgpu/PlatformContext.h +0 -18
- package/cpp/rnwgpu/SurfaceRegistry.h +0 -605
- package/cpp/rnwgpu/api/AppleNativeBuffer.h +0 -22
- package/cpp/rnwgpu/api/Convertors.h +0 -783
- package/cpp/rnwgpu/api/External.h +0 -12
- package/cpp/rnwgpu/api/GPU.cpp +0 -162
- package/cpp/rnwgpu/api/GPU.h +0 -60
- package/cpp/rnwgpu/api/GPUAdapter.cpp +0 -240
- package/cpp/rnwgpu/api/GPUAdapter.h +0 -60
- package/cpp/rnwgpu/api/GPUAdapterInfo.h +0 -57
- package/cpp/rnwgpu/api/GPUBindGroup.cpp +0 -3
- package/cpp/rnwgpu/api/GPUBindGroup.h +0 -51
- package/cpp/rnwgpu/api/GPUBindGroupLayout.h +0 -52
- package/cpp/rnwgpu/api/GPUBuffer.cpp +0 -107
- package/cpp/rnwgpu/api/GPUBuffer.h +0 -88
- package/cpp/rnwgpu/api/GPUCanvasContext.cpp +0 -75
- package/cpp/rnwgpu/api/GPUCanvasContext.h +0 -70
- package/cpp/rnwgpu/api/GPUCommandBuffer.h +0 -45
- package/cpp/rnwgpu/api/GPUCommandEncoder.cpp +0 -179
- package/cpp/rnwgpu/api/GPUCommandEncoder.h +0 -111
- package/cpp/rnwgpu/api/GPUCompilationInfo.h +0 -79
- package/cpp/rnwgpu/api/GPUCompilationMessage.h +0 -36
- package/cpp/rnwgpu/api/GPUComputePassEncoder.cpp +0 -60
- package/cpp/rnwgpu/api/GPUComputePassEncoder.h +0 -85
- package/cpp/rnwgpu/api/GPUComputePipeline.cpp +0 -12
- package/cpp/rnwgpu/api/GPUComputePipeline.h +0 -60
- package/cpp/rnwgpu/api/GPUDevice.cpp +0 -614
- package/cpp/rnwgpu/api/GPUDevice.h +0 -258
- package/cpp/rnwgpu/api/GPUDeviceLostInfo.cpp +0 -7
- package/cpp/rnwgpu/api/GPUDeviceLostInfo.h +0 -40
- package/cpp/rnwgpu/api/GPUError.h +0 -35
- package/cpp/rnwgpu/api/GPUExtent3D.h +0 -66
- package/cpp/rnwgpu/api/GPUExternalTexture.cpp +0 -139
- package/cpp/rnwgpu/api/GPUExternalTexture.h +0 -95
- package/cpp/rnwgpu/api/GPUFeatures.h +0 -203
- package/cpp/rnwgpu/api/GPUInternalError.h +0 -31
- package/cpp/rnwgpu/api/GPUOrigin2D.h +0 -55
- package/cpp/rnwgpu/api/GPUOrigin3D.h +0 -62
- package/cpp/rnwgpu/api/GPUOutOfMemoryError.h +0 -33
- package/cpp/rnwgpu/api/GPUPipelineLayout.h +0 -45
- package/cpp/rnwgpu/api/GPUQuerySet.cpp +0 -11
- package/cpp/rnwgpu/api/GPUQuerySet.h +0 -73
- package/cpp/rnwgpu/api/GPUQueue.cpp +0 -179
- package/cpp/rnwgpu/api/GPUQueue.h +0 -84
- package/cpp/rnwgpu/api/GPURenderBundle.h +0 -44
- package/cpp/rnwgpu/api/GPURenderBundleEncoder.cpp +0 -131
- package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +0 -110
- package/cpp/rnwgpu/api/GPURenderPassEncoder.cpp +0 -165
- package/cpp/rnwgpu/api/GPURenderPassEncoder.h +0 -130
- package/cpp/rnwgpu/api/GPURenderPipeline.cpp +0 -13
- package/cpp/rnwgpu/api/GPURenderPipeline.h +0 -61
- package/cpp/rnwgpu/api/GPUSampler.h +0 -44
- package/cpp/rnwgpu/api/GPUShaderModule.cpp +0 -56
- package/cpp/rnwgpu/api/GPUShaderModule.h +0 -66
- package/cpp/rnwgpu/api/GPUSharedFence.cpp +0 -80
- package/cpp/rnwgpu/api/GPUSharedFence.h +0 -53
- package/cpp/rnwgpu/api/GPUSharedTextureMemory.cpp +0 -135
- package/cpp/rnwgpu/api/GPUSharedTextureMemory.h +0 -75
- package/cpp/rnwgpu/api/GPUSupportedLimits.cpp +0 -129
- package/cpp/rnwgpu/api/GPUSupportedLimits.h +0 -131
- package/cpp/rnwgpu/api/GPUTexture.cpp +0 -47
- package/cpp/rnwgpu/api/GPUTexture.h +0 -162
- package/cpp/rnwgpu/api/GPUTextureView.h +0 -44
- package/cpp/rnwgpu/api/GPUUncapturedErrorEvent.h +0 -60
- package/cpp/rnwgpu/api/GPUValidationError.h +0 -32
- package/cpp/rnwgpu/api/ImageBitmap.h +0 -62
- package/cpp/rnwgpu/api/NativeBufferUtils.h +0 -87
- package/cpp/rnwgpu/api/RNWebGPU.h +0 -82
- package/cpp/rnwgpu/api/WebGPUConstants.h +0 -36
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupDescriptor.h +0 -64
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +0 -78
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutDescriptor.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutEntry.h +0 -97
- package/cpp/rnwgpu/api/descriptors/GPUBlendComponent.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUBlendState.h +0 -52
- package/cpp/rnwgpu/api/descriptors/GPUBufferBinding.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUBufferBindingLayout.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUBufferDescriptor.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPUBufferUsage.h +0 -39
- package/cpp/rnwgpu/api/descriptors/GPUCanvasConfiguration.h +0 -76
- package/cpp/rnwgpu/api/descriptors/GPUColor.h +0 -66
- package/cpp/rnwgpu/api/descriptors/GPUColorTargetState.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPUColorWrite.h +0 -29
- package/cpp/rnwgpu/api/descriptors/GPUCommandBufferDescriptor.h +0 -45
- package/cpp/rnwgpu/api/descriptors/GPUCommandEncoderDescriptor.h +0 -45
- package/cpp/rnwgpu/api/descriptors/GPUComputePassDescriptor.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUComputePassTimestampWrites.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +0 -67
- package/cpp/rnwgpu/api/descriptors/GPUDawnTogglesDescriptor.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUDepthStencilState.h +0 -103
- package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +0 -109
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureBindingLayout.h +0 -38
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +0 -90
- package/cpp/rnwgpu/api/descriptors/GPUFragmentState.h +0 -73
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyBuffer.h +0 -62
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +0 -63
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +0 -65
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +0 -81
- package/cpp/rnwgpu/api/descriptors/GPUImageDataLayout.h +0 -54
- package/cpp/rnwgpu/api/descriptors/GPUMapMode.h +0 -22
- package/cpp/rnwgpu/api/descriptors/GPUMultisampleState.h +0 -54
- package/cpp/rnwgpu/api/descriptors/GPUPipelineLayoutDescriptor.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUPrimitiveState.h +0 -69
- package/cpp/rnwgpu/api/descriptors/GPUProgrammableStage.h +0 -61
- package/cpp/rnwgpu/api/descriptors/GPUQuerySetDescriptor.h +0 -55
- package/cpp/rnwgpu/api/descriptors/GPUQueueDescriptor.h +0 -43
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleDescriptor.h +0 -45
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleEncoderDescriptor.h +0 -80
- package/cpp/rnwgpu/api/descriptors/GPURenderPassColorAttachment.h +0 -81
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDepthStencilAttachment.h +0 -101
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +0 -92
- package/cpp/rnwgpu/api/descriptors/GPURenderPassTimestampWrites.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +0 -103
- package/cpp/rnwgpu/api/descriptors/GPURequestAdapterOptions.h +0 -51
- package/cpp/rnwgpu/api/descriptors/GPUSamplerBindingLayout.h +0 -45
- package/cpp/rnwgpu/api/descriptors/GPUSamplerDescriptor.h +0 -110
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleCompilationHint.h +0 -60
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleDescriptor.h +0 -62
- package/cpp/rnwgpu/api/descriptors/GPUShaderStage.h +0 -25
- package/cpp/rnwgpu/api/descriptors/GPUSharedFenceDescriptor.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPUSharedFenceState.h +0 -51
- package/cpp/rnwgpu/api/descriptors/GPUSharedTextureMemoryDescriptor.h +0 -73
- package/cpp/rnwgpu/api/descriptors/GPUStencilFaceState.h +0 -64
- package/cpp/rnwgpu/api/descriptors/GPUStorageTextureBindingLayout.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPUTextureBindingLayout.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +0 -91
- package/cpp/rnwgpu/api/descriptors/GPUTextureUsage.h +0 -29
- package/cpp/rnwgpu/api/descriptors/GPUTextureViewDescriptor.h +0 -91
- package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +0 -64
- package/cpp/rnwgpu/api/descriptors/GPUVertexAttribute.h +0 -53
- package/cpp/rnwgpu/api/descriptors/GPUVertexBufferLayout.h +0 -62
- package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +0 -73
- package/cpp/rnwgpu/api/descriptors/Unions.h +0 -1969
- package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +0 -214
- package/cpp/rnwgpu/async/AsyncTaskHandle.h +0 -58
- package/cpp/rnwgpu/async/RuntimeContext.cpp +0 -199
- package/cpp/rnwgpu/async/RuntimeContext.h +0 -134
- package/lib/commonjs/skia/types/WebGPU.d.ts +0 -184
- package/lib/commonjs/skia/types/WebGPU.js +0 -105
- package/lib/commonjs/skia/types/WebGPU.js.map +0 -1
- package/lib/commonjs/specs/WebGPUViewNativeComponent.d.ts +0 -8
- package/lib/commonjs/specs/WebGPUViewNativeComponent.js +0 -10
- package/lib/commonjs/specs/WebGPUViewNativeComponent.js.map +0 -1
- package/lib/commonjs/specs/WebGPUViewNativeComponent.web.d.ts +0 -8
- package/lib/commonjs/specs/WebGPUViewNativeComponent.web.js +0 -103
- package/lib/commonjs/specs/WebGPUViewNativeComponent.web.js.map +0 -1
- package/lib/commonjs/specs/utils.d.ts +0 -1
- package/lib/commonjs/specs/utils.js +0 -11
- package/lib/commonjs/specs/utils.js.map +0 -1
- package/lib/commonjs/views/WebGPUCanvas.d.ts +0 -33
- package/lib/commonjs/views/WebGPUCanvas.js +0 -79
- package/lib/commonjs/views/WebGPUCanvas.js.map +0 -1
- package/lib/commonjs/views/WebGPUCanvas.web.d.ts +0 -23
- package/lib/commonjs/views/WebGPUCanvas.web.js +0 -20
- package/lib/commonjs/views/WebGPUCanvas.web.js.map +0 -1
- package/lib/module/skia/types/WebGPU.d.ts +0 -184
- package/lib/module/skia/types/WebGPU.js +0 -99
- package/lib/module/skia/types/WebGPU.js.map +0 -1
- package/lib/module/specs/WebGPUViewNativeComponent.d.ts +0 -8
- package/lib/module/specs/WebGPUViewNativeComponent.js +0 -4
- package/lib/module/specs/WebGPUViewNativeComponent.js.map +0 -1
- package/lib/module/specs/WebGPUViewNativeComponent.web.d.ts +0 -8
- package/lib/module/specs/WebGPUViewNativeComponent.web.js +0 -96
- package/lib/module/specs/WebGPUViewNativeComponent.web.js.map +0 -1
- package/lib/module/specs/utils.d.ts +0 -1
- package/lib/module/specs/utils.js +0 -5
- package/lib/module/specs/utils.js.map +0 -1
- package/lib/module/views/WebGPUCanvas.d.ts +0 -33
- package/lib/module/views/WebGPUCanvas.js +0 -70
- package/lib/module/views/WebGPUCanvas.js.map +0 -1
- package/lib/module/views/WebGPUCanvas.web.d.ts +0 -23
- package/lib/module/views/WebGPUCanvas.web.js +0 -12
- package/lib/module/views/WebGPUCanvas.web.js.map +0 -1
- package/lib/typescript/lib/commonjs/skia/types/WebGPU.d.ts +0 -2
- package/lib/typescript/lib/commonjs/specs/WebGPUViewNativeComponent.d.ts +0 -4
- package/lib/typescript/lib/commonjs/specs/WebGPUViewNativeComponent.web.d.ts +0 -3
- package/lib/typescript/lib/commonjs/specs/utils.d.ts +0 -2
- package/lib/typescript/lib/commonjs/views/WebGPUCanvas.d.ts +0 -6
- package/lib/typescript/lib/commonjs/views/WebGPUCanvas.web.d.ts +0 -6
- package/lib/typescript/lib/module/skia/types/WebGPU.d.ts +0 -31
- package/lib/typescript/lib/module/specs/WebGPUViewNativeComponent.d.ts +0 -2
- package/lib/typescript/lib/module/specs/WebGPUViewNativeComponent.web.d.ts +0 -2
- package/lib/typescript/lib/module/specs/utils.d.ts +0 -1
- package/lib/typescript/lib/module/views/WebGPUCanvas.d.ts +0 -7
- package/lib/typescript/lib/module/views/WebGPUCanvas.web.d.ts +0 -8
- package/lib/typescript/src/skia/types/WebGPU.d.ts +0 -184
- package/lib/typescript/src/specs/WebGPUViewNativeComponent.d.ts +0 -8
- package/lib/typescript/src/specs/WebGPUViewNativeComponent.web.d.ts +0 -8
- package/lib/typescript/src/specs/utils.d.ts +0 -1
- package/lib/typescript/src/views/WebGPUCanvas.d.ts +0 -33
- package/lib/typescript/src/views/WebGPUCanvas.web.d.ts +0 -23
- package/src/skia/types/WebGPU.ts +0 -226
- package/src/specs/WebGPUViewNativeComponent.ts +0 -11
- package/src/specs/WebGPUViewNativeComponent.web.ts +0 -110
- package/src/specs/utils.ts +0 -4
- package/src/views/WebGPUCanvas.tsx +0 -125
- package/src/views/WebGPUCanvas.web.tsx +0 -36
- /package/cpp/{jsi2 → jsi}/Promise.cpp +0 -0
- /package/cpp/{jsi2 → jsi}/Promise.h +0 -0
|
@@ -5,8 +5,8 @@ export class JsiSkImageFactory extends Host {
|
|
|
5
5
|
MakeImageFromEncoded(encoded: any): JsiSkImage | null;
|
|
6
6
|
MakeImageFromNativeTextureUnstable(): jest.Mock<any, any, any>;
|
|
7
7
|
MakeImage(info: any, data: any, bytesPerRow: any): JsiSkImage | null;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
MakeImageFromNativeTexture(_pointer: any): jest.Mock<any, any, any>;
|
|
9
|
+
MakeNativeTextureFromImage(_image: any): jest.Mock<any, any, any>;
|
|
10
10
|
}
|
|
11
11
|
import { Host } from "./Host";
|
|
12
12
|
import { JsiSkImage } from "./JsiSkImage";
|
|
@@ -36,8 +36,7 @@ export function JsiSkApi(CanvasKit: any): {
|
|
|
36
36
|
Video: (url?: any) => Promise<any>;
|
|
37
37
|
Context: (_surface: any, _width: any, _height: any) => jest.Mock<any, any, any>;
|
|
38
38
|
Recorder: () => jest.Mock<any, any, any>;
|
|
39
|
-
|
|
40
|
-
hasDevice: () => boolean;
|
|
39
|
+
getNativeDevice: () => jest.Mock<any, any, any>;
|
|
41
40
|
};
|
|
42
41
|
import { JsiSkPoint } from "./JsiSkPoint";
|
|
43
42
|
import { JsiSkRRect } from "./JsiSkRRect";
|
|
@@ -1 +1,16 @@
|
|
|
1
1
|
export declare let HAS_REANIMATED_3: boolean;
|
|
2
|
+
/**
|
|
3
|
+
* True when the worklets-based Reanimated integration is available
|
|
4
|
+
* (Reanimated 4 with react-native-worklets providing
|
|
5
|
+
* registerCustomSerializable). Skia objects use the JSI NativeState pattern
|
|
6
|
+
* and can only be transferred to worklet runtimes through a custom
|
|
7
|
+
* serializer, so on native the Reanimated integration requires Reanimated 4 —
|
|
8
|
+
* Reanimated 3 is not supported.
|
|
9
|
+
*/
|
|
10
|
+
export declare let HAS_REANIMATED_4: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Major version of the installed react-native-reanimated package, or null if
|
|
13
|
+
* it is not installed. Used to give actionable diagnostics when the
|
|
14
|
+
* integration cannot be enabled.
|
|
15
|
+
*/
|
|
16
|
+
export declare let REANIMATED_VERSION_MAJOR: number | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const registerSkiaWorkletSerialization: () => void;
|
|
@@ -80,22 +80,31 @@ export interface ImageFactory {
|
|
|
80
80
|
MakeImage(info: ImageInfo, data: SkData, bytesPerRow: number): SkImage | null;
|
|
81
81
|
/**
|
|
82
82
|
* Creates an SkImage from a WebGPU texture.
|
|
83
|
-
* This allows using textures rendered by WebGPU in Skia drawings.
|
|
83
|
+
* This allows using textures rendered by WebGPU in Skia drawings. The
|
|
84
|
+
* texture crosses the package boundary as a raw pointer: pass
|
|
85
|
+
* `texture.nativePointer` from a react-native-webgpu GPUTexture created on
|
|
86
|
+
* the shared device (importDevice(Skia.getNativeDevice())). The native side
|
|
87
|
+
* takes its own reference, so the handle stays valid even if the JS
|
|
88
|
+
* GPUTexture is garbage collected — but do not call texture.destroy()
|
|
89
|
+
* while the image is in use: destroy() releases the underlying GPU
|
|
90
|
+
* resource regardless of reference counts.
|
|
84
91
|
*
|
|
85
92
|
* Note: This method is only available when the Graphite backend is enabled.
|
|
86
93
|
*
|
|
87
|
-
* @param
|
|
94
|
+
* @param pointer - The WGPUTexture pointer (texture.nativePointer)
|
|
88
95
|
* @returns An SkImage wrapping the texture, or throws if the texture is invalid
|
|
89
96
|
*/
|
|
90
|
-
|
|
97
|
+
MakeImageFromNativeTexture(pointer: bigint): SkImage;
|
|
91
98
|
/**
|
|
92
99
|
* Creates a WebGPU texture from an SkImage.
|
|
93
|
-
* This allows using Skia images in WebGPU rendering pipelines.
|
|
100
|
+
* This allows using Skia images in WebGPU rendering pipelines. The
|
|
101
|
+
* returned pointer carries one reference and must be adopted exactly once
|
|
102
|
+
* with react-native-webgpu's adoptTexture(), which owns it from then on.
|
|
94
103
|
*
|
|
95
104
|
* Note: This method is only available when the Graphite backend is enabled.
|
|
96
105
|
*
|
|
97
106
|
* @param image - An SkImage to convert to a texture
|
|
98
|
-
* @returns A
|
|
107
|
+
* @returns A WGPUTexture pointer for adoptTexture(), or throws on failure
|
|
99
108
|
*/
|
|
100
|
-
|
|
109
|
+
MakeNativeTextureFromImage(image: SkImage): bigint;
|
|
101
110
|
}
|
|
@@ -86,20 +86,10 @@ export interface Skia {
|
|
|
86
86
|
NativeBuffer: NativeBufferFactory;
|
|
87
87
|
Recorder(): JsiRecorder;
|
|
88
88
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
89
|
+
* Raw WGPUDevice pointer of Skia's Graphite device, as a BigInt. Pass it to
|
|
90
|
+
* react-native-webgpu's importDevice() to get a GPUDevice sharing Skia's
|
|
91
|
+
* device (zero-copy interop). Only available on Graphite builds; throws
|
|
92
|
+
* otherwise.
|
|
92
93
|
*/
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Returns the shared WebGPU device used by Skia's Graphite backend.
|
|
96
|
-
* This allows direct access to the GPU device for WebGPU operations.
|
|
97
|
-
*
|
|
98
|
-
* Note: This method is only available when the Graphite backend is enabled.
|
|
99
|
-
* Use hasDevice() to check availability before calling this method.
|
|
100
|
-
*
|
|
101
|
-
* @returns The GPUDevice used by Skia
|
|
102
|
-
* @throws Error if Graphite backend is not enabled
|
|
103
|
-
*/
|
|
104
|
-
getDevice(): GPUDevice;
|
|
94
|
+
getNativeDevice(): bigint;
|
|
105
95
|
}
|
|
@@ -11,6 +11,6 @@ export declare class JsiSkImageFactory extends Host implements ImageFactory {
|
|
|
11
11
|
MakeImageFromEncoded(encoded: SkData): JsiSkImage | null;
|
|
12
12
|
MakeImageFromNativeTextureUnstable(): SkImage;
|
|
13
13
|
MakeImage(info: ImageInfo, data: SkData, bytesPerRow: number): JsiSkImage | null;
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
MakeImageFromNativeTexture(_pointer: bigint): SkImage;
|
|
15
|
+
MakeNativeTextureFromImage(_image: SkImage): bigint;
|
|
16
16
|
}
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"setup-skia-web": "scripts/setup-canvaskit.js"
|
|
9
9
|
},
|
|
10
10
|
"title": "React Native Skia",
|
|
11
|
-
"version": "2.
|
|
11
|
+
"version": "2.10.1",
|
|
12
12
|
"description": "High-performance React Native Graphics using Skia",
|
|
13
13
|
"main": "lib/module/index.js",
|
|
14
14
|
"react-native": "src/index.ts",
|
|
@@ -79,7 +79,8 @@
|
|
|
79
79
|
"peerDependencies": {
|
|
80
80
|
"react": ">=19.0",
|
|
81
81
|
"react-native": ">=0.78",
|
|
82
|
-
"react-native-reanimated": ">=
|
|
82
|
+
"react-native-reanimated": ">=4.0.0",
|
|
83
|
+
"react-native-worklets": ">=0.7.0"
|
|
83
84
|
},
|
|
84
85
|
"peerDependenciesMeta": {
|
|
85
86
|
"react-native": {
|
|
@@ -87,6 +88,9 @@
|
|
|
87
88
|
},
|
|
88
89
|
"react-native-reanimated": {
|
|
89
90
|
"optional": true
|
|
91
|
+
},
|
|
92
|
+
"react-native-worklets": {
|
|
93
|
+
"optional": true
|
|
90
94
|
}
|
|
91
95
|
},
|
|
92
96
|
"devDependencies": {
|
|
@@ -127,7 +131,7 @@
|
|
|
127
131
|
"rimraf": "3.0.2",
|
|
128
132
|
"semantic-release": "^24.1.0",
|
|
129
133
|
"semantic-release-yarn": "^3.0.2",
|
|
130
|
-
"tar": "^7.5.
|
|
134
|
+
"tar": "^7.5.21",
|
|
131
135
|
"ts-jest": "29.4.3",
|
|
132
136
|
"tsx": "^4.21.0",
|
|
133
137
|
"typescript": "^5.2.2",
|
|
@@ -159,8 +163,7 @@
|
|
|
159
163
|
},
|
|
160
164
|
"ios": {
|
|
161
165
|
"componentProvider": {
|
|
162
|
-
"SkiaPictureView": "SkiaPictureView"
|
|
163
|
-
"SkiaWebGPUView": "SkiaWebGPUView"
|
|
166
|
+
"SkiaPictureView": "SkiaPictureView"
|
|
164
167
|
}
|
|
165
168
|
}
|
|
166
169
|
},
|
|
@@ -75,8 +75,42 @@ framework_names = ['libskia', 'libsvg', 'libskshaper', 'libskparagraph',
|
|
|
75
75
|
'libskunicode_core', 'libskunicode_libgrapheme',
|
|
76
76
|
'libskottie', 'libsksg']
|
|
77
77
|
|
|
78
|
-
# Add Dawn library for Graphite builds (contains dawn::native symbols)
|
|
79
|
-
|
|
78
|
+
# Add Dawn library for Graphite builds (contains dawn::native symbols).
|
|
79
|
+
# libwebgpu_dawn is the same artifact react-native-webgpu vendors. When
|
|
80
|
+
# react-native-webgpu is installed, it provides Dawn for the whole app and
|
|
81
|
+
# vendoring the framework here as well would fail CocoaPods'
|
|
82
|
+
# duplicate-framework-name check, so Skia only vendors it when alone. The
|
|
83
|
+
# skia pod's dawn::native references resolve from webgpu's copy at app link.
|
|
84
|
+
webgpu_pkg_dir = resolve_node_package.call('react-native-webgpu', __dir__)
|
|
85
|
+
has_webgpu_pkg = !webgpu_pkg_dir.nil?
|
|
86
|
+
if use_graphite && has_webgpu_pkg
|
|
87
|
+
Pod::UI.puts 'react-native-skia: react-native-webgpu detected, Dawn is provided by its libwebgpu_dawn'
|
|
88
|
+
|
|
89
|
+
# Both packages must link the exact same Dawn artifact. Compare the release
|
|
90
|
+
# tag this Graphite build was installed with (libs/.dawn-version) against
|
|
91
|
+
# the tag react-native-webgpu declares in its package.json `dawn` field.
|
|
92
|
+
dawn_marker = File.join(__dir__, 'libs', '.dawn-version')
|
|
93
|
+
if File.exist?(dawn_marker)
|
|
94
|
+
skia_dawn = File.read(dawn_marker).strip
|
|
95
|
+
webgpu_pkg = JSON.parse(File.read(File.join(webgpu_pkg_dir, 'package.json')))
|
|
96
|
+
webgpu_dawn_field = webgpu_pkg['dawn'].to_s
|
|
97
|
+
if webgpu_dawn_field.empty?
|
|
98
|
+
raise "react-native-skia: the installed react-native-webgpu " \
|
|
99
|
+
"(#{webgpu_pkg['version']}) does not declare a `dawn` field in its " \
|
|
100
|
+
"package.json, so it predates shared-Dawn support and cannot be " \
|
|
101
|
+
"paired with this Graphite build (which links #{skia_dawn}). " \
|
|
102
|
+
"Upgrade react-native-webgpu."
|
|
103
|
+
end
|
|
104
|
+
webgpu_dawn = "dawn-#{webgpu_dawn_field.tr('/', '-')}"
|
|
105
|
+
unless skia_dawn == webgpu_dawn
|
|
106
|
+
raise "react-native-skia: Dawn version mismatch. This Graphite build " \
|
|
107
|
+
"links #{skia_dawn} but react-native-webgpu links #{webgpu_dawn}. " \
|
|
108
|
+
"Align the two packages so the app contains exactly one Dawn."
|
|
109
|
+
end
|
|
110
|
+
Pod::UI.puts "react-native-skia: Dawn versions match (#{skia_dawn})"
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
framework_names += ['libwebgpu_dawn'] if use_graphite && !has_webgpu_pkg
|
|
80
114
|
|
|
81
115
|
# Verify that the prebuilt binaries are available (copied in above from the npm
|
|
82
116
|
# packages, or downloaded by install-skia-graphite for in-repo Graphite builds).
|
|
@@ -154,9 +188,8 @@ Pod::Spec.new do |s|
|
|
|
154
188
|
'cpp/rnskia/RNMetalLayerColorSpace.h',
|
|
155
189
|
'cpp/rnskia/RNDawnWindowContext.h',
|
|
156
190
|
'cpp/rnskia/RNDawnWindowContext.cpp',
|
|
157
|
-
'cpp/rnskia/
|
|
158
|
-
'cpp/
|
|
159
|
-
'cpp/jsi2/**/*.{h,cpp}'
|
|
191
|
+
'cpp/rnskia/RNDawnInterop.cpp',
|
|
192
|
+
'cpp/rnskia/RNImageProvider.h'
|
|
160
193
|
]
|
|
161
194
|
s.exclude_files = graphite_exclusions unless use_graphite
|
|
162
195
|
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
export let HAS_REANIMATED_3 = false;
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* True when the worklets-based Reanimated integration is available
|
|
5
|
+
* (Reanimated 4 with react-native-worklets providing
|
|
6
|
+
* registerCustomSerializable). Skia objects use the JSI NativeState pattern
|
|
7
|
+
* and can only be transferred to worklet runtimes through a custom
|
|
8
|
+
* serializer, so on native the Reanimated integration requires Reanimated 4 —
|
|
9
|
+
* Reanimated 3 is not supported.
|
|
10
|
+
*/
|
|
11
|
+
export let HAS_REANIMATED_4 = false;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Major version of the installed react-native-reanimated package, or null if
|
|
15
|
+
* it is not installed. Used to give actionable diagnostics when the
|
|
16
|
+
* integration cannot be enabled.
|
|
17
|
+
*/
|
|
18
|
+
export let REANIMATED_VERSION_MAJOR: number | null = null;
|
|
19
|
+
|
|
3
20
|
try {
|
|
4
21
|
// This logic is convoluted but necessary
|
|
5
22
|
// In most systems, `require("react-native-reanimated")` throws an error, all is well.
|
|
@@ -14,6 +31,19 @@ try {
|
|
|
14
31
|
) {
|
|
15
32
|
HAS_REANIMATED_3 = true;
|
|
16
33
|
}
|
|
34
|
+
const majorVersion = parseInt(reanimatedVersion.split(".")[0], 10);
|
|
35
|
+
if (!isNaN(majorVersion)) {
|
|
36
|
+
REANIMATED_VERSION_MAJOR = majorVersion;
|
|
37
|
+
}
|
|
38
|
+
if (majorVersion >= 4) {
|
|
39
|
+
try {
|
|
40
|
+
const worklets = require("react-native-worklets");
|
|
41
|
+
HAS_REANIMATED_4 =
|
|
42
|
+
typeof worklets.registerCustomSerializable === "function";
|
|
43
|
+
} catch (e) {
|
|
44
|
+
// react-native-worklets not installed
|
|
45
|
+
}
|
|
46
|
+
}
|
|
17
47
|
} catch (e) {
|
|
18
48
|
// do nothing
|
|
19
49
|
}
|
package/src/mock/index.ts
CHANGED
|
@@ -23,7 +23,6 @@ export const Mock = (CanvasKit: CanvasKit) => {
|
|
|
23
23
|
...require("../dom/types"),
|
|
24
24
|
...require("../dom/nodes"),
|
|
25
25
|
Canvas: require("react-native").View,
|
|
26
|
-
WebGPUCanvas: require("react-native").View,
|
|
27
26
|
getPreferredHighBitDepthCanvasFormat: () => "rgba16float",
|
|
28
27
|
SkiaPictureView: require("react-native").View,
|
|
29
28
|
JsiSkImage: JsiSkImage,
|
package/src/skia/NativeSetup.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Platform } from "../Platform";
|
|
2
2
|
import NativeSkiaModule from "../specs/NativeSkiaModule";
|
|
3
3
|
|
|
4
|
+
import { registerSkiaWorkletSerialization } from "./SkiaWorkletSerialization";
|
|
5
|
+
|
|
4
6
|
if (Platform.OS !== "web" && global.SkiaApi == null) {
|
|
5
7
|
// Initialize RN Skia
|
|
6
8
|
const SkiaModule = NativeSkiaModule;
|
|
@@ -16,4 +18,7 @@ if (Platform.OS !== "web" && global.SkiaApi == null) {
|
|
|
16
18
|
`Native Skia Module failed to correctly install JSI Bindings! Result: ${result}`
|
|
17
19
|
);
|
|
18
20
|
}
|
|
21
|
+
// Skia objects use the JSI NativeState pattern and need a custom
|
|
22
|
+
// serializer to be transferable to worklet runtimes (Reanimated).
|
|
23
|
+
registerSkiaWorkletSerialization();
|
|
19
24
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Skia and WebGPU API objects are implemented with the JSI NativeState
|
|
5
|
+
* pattern: plain JS objects with a shared prototype and native state
|
|
6
|
+
* attached. Worklets cannot serialize such objects by default (the prototype
|
|
7
|
+
* would be lost when moving them to another runtime), so we register a
|
|
8
|
+
* Custom Serializable that:
|
|
9
|
+
*
|
|
10
|
+
* - determine: detects native objects via the `__box` method installed on
|
|
11
|
+
* every Skia and WebGPU prototype (plain objects never reach the
|
|
12
|
+
* custom-serializable path, so this cannot misfire on user data).
|
|
13
|
+
* - pack: boxes the object into a HostObject wrapper that carries the native
|
|
14
|
+
* state and the class brand. HostObjects are transferred by reference.
|
|
15
|
+
* - unpack: unboxes on the target runtime, re-installing the class prototype
|
|
16
|
+
* there and re-attaching the same native state.
|
|
17
|
+
*
|
|
18
|
+
* See cpp/jsi/BoxedNativeObject.h for the native side.
|
|
19
|
+
*
|
|
20
|
+
* `react-native-worklets` (Reanimated 4) is required for this to work —
|
|
21
|
+
* without it, Skia and WebGPU objects cannot be captured in worklets or
|
|
22
|
+
* stored in shared values.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
interface BoxedNativeObject {
|
|
26
|
+
unbox: () => object;
|
|
27
|
+
__boxedNativeObject: true;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const determine = (value: object): value is object => {
|
|
31
|
+
"worklet";
|
|
32
|
+
return typeof (value as any).__box === "function";
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const pack = (value: object): BoxedNativeObject => {
|
|
36
|
+
"worklet";
|
|
37
|
+
return (value as any).__box();
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const unpack = (packed: BoxedNativeObject): object => {
|
|
41
|
+
"worklet";
|
|
42
|
+
return packed.unbox();
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export const registerSkiaWorkletSerialization = () => {
|
|
46
|
+
try {
|
|
47
|
+
const worklets = require("react-native-worklets");
|
|
48
|
+
if (typeof worklets.registerCustomSerializable === "function") {
|
|
49
|
+
worklets.registerCustomSerializable({
|
|
50
|
+
name: "ReactNativeSkia",
|
|
51
|
+
determine,
|
|
52
|
+
pack,
|
|
53
|
+
unpack,
|
|
54
|
+
});
|
|
55
|
+
} else {
|
|
56
|
+
console.error(
|
|
57
|
+
"React Native Skia requires react-native-worklets >= 0.7.0 " +
|
|
58
|
+
"(registerCustomSerializable) to use Skia objects inside worklets. " +
|
|
59
|
+
"Please upgrade react-native-worklets and react-native-reanimated."
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
} catch (e) {
|
|
63
|
+
// react-native-worklets is not installed. This is fine for apps that do
|
|
64
|
+
// not use Reanimated: Skia objects simply cannot be used inside worklets
|
|
65
|
+
// or shared values in this configuration.
|
|
66
|
+
}
|
|
67
|
+
};
|
|
@@ -97,23 +97,32 @@ export interface ImageFactory {
|
|
|
97
97
|
|
|
98
98
|
/**
|
|
99
99
|
* Creates an SkImage from a WebGPU texture.
|
|
100
|
-
* This allows using textures rendered by WebGPU in Skia drawings.
|
|
100
|
+
* This allows using textures rendered by WebGPU in Skia drawings. The
|
|
101
|
+
* texture crosses the package boundary as a raw pointer: pass
|
|
102
|
+
* `texture.nativePointer` from a react-native-webgpu GPUTexture created on
|
|
103
|
+
* the shared device (importDevice(Skia.getNativeDevice())). The native side
|
|
104
|
+
* takes its own reference, so the handle stays valid even if the JS
|
|
105
|
+
* GPUTexture is garbage collected — but do not call texture.destroy()
|
|
106
|
+
* while the image is in use: destroy() releases the underlying GPU
|
|
107
|
+
* resource regardless of reference counts.
|
|
101
108
|
*
|
|
102
109
|
* Note: This method is only available when the Graphite backend is enabled.
|
|
103
110
|
*
|
|
104
|
-
* @param
|
|
111
|
+
* @param pointer - The WGPUTexture pointer (texture.nativePointer)
|
|
105
112
|
* @returns An SkImage wrapping the texture, or throws if the texture is invalid
|
|
106
113
|
*/
|
|
107
|
-
|
|
114
|
+
MakeImageFromNativeTexture(pointer: bigint): SkImage;
|
|
108
115
|
|
|
109
116
|
/**
|
|
110
117
|
* Creates a WebGPU texture from an SkImage.
|
|
111
|
-
* This allows using Skia images in WebGPU rendering pipelines.
|
|
118
|
+
* This allows using Skia images in WebGPU rendering pipelines. The
|
|
119
|
+
* returned pointer carries one reference and must be adopted exactly once
|
|
120
|
+
* with react-native-webgpu's adoptTexture(), which owns it from then on.
|
|
112
121
|
*
|
|
113
122
|
* Note: This method is only available when the Graphite backend is enabled.
|
|
114
123
|
*
|
|
115
124
|
* @param image - An SkImage to convert to a texture
|
|
116
|
-
* @returns A
|
|
125
|
+
* @returns A WGPUTexture pointer for adoptTexture(), or throws on failure
|
|
117
126
|
*/
|
|
118
|
-
|
|
127
|
+
MakeNativeTextureFromImage(image: SkImage): bigint;
|
|
119
128
|
}
|
package/src/skia/types/Skia.ts
CHANGED
|
@@ -110,20 +110,10 @@ export interface Skia {
|
|
|
110
110
|
NativeBuffer: NativeBufferFactory;
|
|
111
111
|
Recorder(): JsiRecorder;
|
|
112
112
|
/**
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
113
|
+
* Raw WGPUDevice pointer of Skia's Graphite device, as a BigInt. Pass it to
|
|
114
|
+
* react-native-webgpu's importDevice() to get a GPUDevice sharing Skia's
|
|
115
|
+
* device (zero-copy interop). Only available on Graphite builds; throws
|
|
116
|
+
* otherwise.
|
|
116
117
|
*/
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Returns the shared WebGPU device used by Skia's Graphite backend.
|
|
120
|
-
* This allows direct access to the GPU device for WebGPU operations.
|
|
121
|
-
*
|
|
122
|
-
* Note: This method is only available when the Graphite backend is enabled.
|
|
123
|
-
* Use hasDevice() to check availability before calling this method.
|
|
124
|
-
*
|
|
125
|
-
* @returns The GPUDevice used by Skia
|
|
126
|
-
* @throws Error if Graphite backend is not enabled
|
|
127
|
-
*/
|
|
128
|
-
getDevice(): GPUDevice;
|
|
118
|
+
getNativeDevice(): bigint;
|
|
129
119
|
}
|
package/src/skia/types/index.ts
CHANGED
|
@@ -102,11 +102,11 @@ export class JsiSkImageFactory extends Host implements ImageFactory {
|
|
|
102
102
|
return new JsiSkImage(this.CanvasKit, image);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
MakeImageFromNativeTexture(_pointer: bigint): SkImage {
|
|
106
106
|
return throwNotImplementedOnRNWeb<SkImage>();
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
|
|
110
|
-
return throwNotImplementedOnRNWeb<
|
|
109
|
+
MakeNativeTextureFromImage(_image: SkImage): bigint {
|
|
110
|
+
return throwNotImplementedOnRNWeb<bigint>();
|
|
111
111
|
}
|
|
112
112
|
}
|
package/src/skia/web/JsiSkia.ts
CHANGED
|
@@ -143,10 +143,7 @@ export const JsiSkApi = (CanvasKit: CanvasKit): Skia => ({
|
|
|
143
143
|
Recorder: () => {
|
|
144
144
|
return throwNotImplementedOnRNWeb<JsiRecorder>();
|
|
145
145
|
},
|
|
146
|
-
|
|
147
|
-
return throwNotImplementedOnRNWeb<
|
|
148
|
-
},
|
|
149
|
-
hasDevice: () => {
|
|
150
|
-
return false;
|
|
146
|
+
getNativeDevice: () => {
|
|
147
|
+
return throwNotImplementedOnRNWeb<bigint>();
|
|
151
148
|
},
|
|
152
149
|
});
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import Rea from "../external/reanimated/ReanimatedProxy";
|
|
2
2
|
import type { Skia, SkPicture } from "../skia/types";
|
|
3
|
-
import {
|
|
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 (
|
|
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
|
};
|
package/src/views/index.ts
CHANGED