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