@shopify/react-native-skia 2.10.0 → 2.10.2
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 +7 -41
- package/android/build.gradle +33 -0
- package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaPackage.java +1 -2
- package/cpp/api/JsiNativeBuffer.h +14 -20
- package/cpp/api/JsiSkAnimatedImage.h +13 -16
- package/cpp/api/JsiSkAnimatedImageFactory.h +9 -7
- package/cpp/api/JsiSkApi.h +94 -90
- package/cpp/api/JsiSkCanvas.h +108 -251
- package/cpp/api/JsiSkColorFilterFactory.h +45 -63
- package/cpp/api/JsiSkContourMeasure.h +19 -29
- package/cpp/api/JsiSkContourMeasureIter.h +6 -6
- package/cpp/api/JsiSkConverters.h +410 -0
- package/cpp/api/JsiSkDataFactory.h +9 -15
- package/cpp/api/JsiSkFont.h +99 -180
- package/cpp/api/JsiSkFontMgr.h +19 -21
- package/cpp/api/JsiSkFontMgrFactory.h +4 -5
- package/cpp/api/JsiSkImage.h +66 -66
- package/cpp/api/JsiSkImageFactory.h +66 -63
- package/cpp/api/JsiSkImageFilterFactory.h +354 -608
- package/cpp/api/JsiSkImageInfo.h +10 -13
- package/cpp/api/JsiSkMaskFilterFactory.h +8 -11
- package/cpp/api/JsiSkMatrix.h +36 -73
- package/cpp/api/JsiSkNativeObjects.h +64 -96
- package/cpp/api/JsiSkPaint.h +73 -131
- package/cpp/api/JsiSkParagraph.h +36 -53
- package/cpp/api/JsiSkParagraphBuilder.h +36 -64
- package/cpp/api/JsiSkParagraphBuilderFactory.h +11 -16
- package/cpp/api/JsiSkPath.h +216 -349
- package/cpp/api/JsiSkPathBuilder.h +133 -269
- package/cpp/api/JsiSkPathBuilderFactory.h +11 -11
- package/cpp/api/JsiSkPathEffectFactory.h +52 -72
- package/cpp/api/JsiSkPathFactory.h +129 -195
- package/cpp/api/JsiSkPicture.h +12 -18
- package/cpp/api/JsiSkPictureRecorder.h +14 -15
- package/cpp/api/JsiSkPoint.h +4 -4
- package/cpp/api/JsiSkRRect.h +7 -8
- package/cpp/api/JsiSkRSXform.h +10 -23
- package/cpp/api/JsiSkRect.h +23 -31
- package/cpp/api/JsiSkRuntimeEffect.h +67 -83
- package/cpp/api/JsiSkRuntimeEffectFactory.h +6 -10
- package/cpp/api/JsiSkRuntimeShaderBuilder.h +5 -14
- package/cpp/api/JsiSkSVG.h +4 -4
- package/cpp/api/JsiSkShaderFactory.h +153 -225
- package/cpp/api/JsiSkSkottie.h +104 -126
- package/cpp/api/JsiSkSurface.h +11 -14
- package/cpp/api/JsiSkSurfaceFactory.h +6 -7
- package/cpp/api/JsiSkTextBlobFactory.h +31 -54
- package/cpp/api/JsiSkTypeface.h +8 -12
- package/cpp/api/JsiSkTypefaceFactory.h +9 -7
- package/cpp/api/JsiSkTypefaceFontProvider.h +22 -23
- package/cpp/api/JsiSkTypefaceFontProviderFactory.h +5 -6
- package/cpp/api/JsiSkVertices.h +6 -8
- package/cpp/api/JsiSkiaContext.h +10 -11
- package/cpp/api/JsiVideo.h +31 -71
- package/cpp/jsi/EnumMapper.h +2 -2
- package/cpp/jsi/JSIConverter.h +2 -33
- package/cpp/jsi/NativeObject.h +24 -19
- package/cpp/jsi/Promise.cpp +2 -2
- package/cpp/jsi/Promise.h +2 -2
- package/cpp/rnskia/RNDawnContext.h +18 -2
- package/cpp/rnskia/RNDawnInterop.cpp +19 -0
- package/cpp/rnskia/RNDawnUtils.h +18 -1
- package/cpp/rnskia/RNSkManager.cpp +5 -162
- package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkaroundsAutogen.h +2 -0
- package/lib/commonjs/mock/index.js +0 -1
- package/lib/commonjs/mock/index.js.map +1 -1
- 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/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/mock/index.js +0 -1
- package/lib/module/mock/index.js.map +1 -1
- 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/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/mock/index.d.ts +0 -1
- 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/mock/index.d.ts +0 -2
- package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -2
- 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/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 +3 -4
- package/react-native-skia.podspec +38 -4
- package/src/mock/index.ts +0 -1
- 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/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/rnwgpu/ArrayBuffer.h +0 -116
- package/cpp/rnwgpu/Canvas.h +0 -52
- 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 -239
- 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 -613
- 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 -213
- 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
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
package com.shopify.reactnative.skia;
|
|
2
|
-
|
|
3
|
-
import com.facebook.react.module.annotations.ReactModule;
|
|
4
|
-
import com.facebook.react.uimanager.ThemedReactContext;
|
|
5
|
-
import com.facebook.react.uimanager.annotations.ReactProp;
|
|
6
|
-
import com.facebook.react.views.view.ReactViewGroup;
|
|
7
|
-
import com.facebook.react.views.view.ReactViewManager;
|
|
8
|
-
import com.facebook.react.viewmanagers.SkiaWebGPUViewManagerDelegate;
|
|
9
|
-
import com.facebook.react.viewmanagers.SkiaWebGPUViewManagerInterface;
|
|
10
|
-
|
|
11
|
-
import androidx.annotation.NonNull;
|
|
12
|
-
import androidx.annotation.Nullable;
|
|
13
|
-
|
|
14
|
-
@ReactModule(name = WebGPUViewManager.NAME)
|
|
15
|
-
public class WebGPUViewManager extends ReactViewManager implements SkiaWebGPUViewManagerInterface<WebGPUView> {
|
|
16
|
-
|
|
17
|
-
public static final String NAME = "SkiaWebGPUView";
|
|
18
|
-
|
|
19
|
-
protected SkiaWebGPUViewManagerDelegate mDelegate;
|
|
20
|
-
|
|
21
|
-
public WebGPUViewManager() {
|
|
22
|
-
mDelegate = new SkiaWebGPUViewManagerDelegate(this);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
protected SkiaWebGPUViewManagerDelegate getDelegate() {
|
|
26
|
-
return mDelegate;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
@NonNull
|
|
30
|
-
@Override
|
|
31
|
-
public String getName() {
|
|
32
|
-
return NAME;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
@NonNull
|
|
36
|
-
@Override
|
|
37
|
-
public WebGPUView createViewInstance(@NonNull ThemedReactContext context) {
|
|
38
|
-
return new WebGPUView(context);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@Override
|
|
42
|
-
@ReactProp(name = "transparent")
|
|
43
|
-
public void setTransparent(WebGPUView view, boolean value) {
|
|
44
|
-
view.setTransparent(value);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
@Override
|
|
48
|
-
@ReactProp(name = "contextId")
|
|
49
|
-
public void setContextId(WebGPUView view, int value) {
|
|
50
|
-
view.setContextId(value);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
@Override
|
|
54
|
-
public void onDropViewInstance(@NonNull ReactViewGroup view) {
|
|
55
|
-
super.onDropViewInstance(view);
|
|
56
|
-
((WebGPUView) view).destroy();
|
|
57
|
-
}
|
|
58
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#ifdef SK_GRAPHITE
|
|
2
|
-
|
|
3
|
-
#import <CoreVideo/CoreVideo.h>
|
|
4
|
-
|
|
5
|
-
#include "rnwgpu/api/AppleNativeBuffer.h"
|
|
6
|
-
|
|
7
|
-
namespace rnwgpu {
|
|
8
|
-
|
|
9
|
-
void *GetIOSurfaceFromNativeBuffer(void *cvPixelBuffer, uint32_t *outWidth,
|
|
10
|
-
uint32_t *outHeight) {
|
|
11
|
-
auto pixelBuffer = reinterpret_cast<CVPixelBufferRef>(cvPixelBuffer);
|
|
12
|
-
if (pixelBuffer == nullptr) {
|
|
13
|
-
if (outWidth != nullptr) {
|
|
14
|
-
*outWidth = 0;
|
|
15
|
-
}
|
|
16
|
-
if (outHeight != nullptr) {
|
|
17
|
-
*outHeight = 0;
|
|
18
|
-
}
|
|
19
|
-
return nullptr;
|
|
20
|
-
}
|
|
21
|
-
if (outWidth != nullptr) {
|
|
22
|
-
*outWidth = static_cast<uint32_t>(CVPixelBufferGetWidth(pixelBuffer));
|
|
23
|
-
}
|
|
24
|
-
if (outHeight != nullptr) {
|
|
25
|
-
*outHeight = static_cast<uint32_t>(CVPixelBufferGetHeight(pixelBuffer));
|
|
26
|
-
}
|
|
27
|
-
// The IOSurface is owned by the CVPixelBuffer; we don't retain it here.
|
|
28
|
-
return CVPixelBufferGetIOSurface(pixelBuffer);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
} // namespace rnwgpu
|
|
32
|
-
|
|
33
|
-
#endif // SK_GRAPHITE
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#ifdef SK_GRAPHITE
|
|
4
|
-
|
|
5
|
-
#include "rnwgpu/PlatformContext.h"
|
|
6
|
-
|
|
7
|
-
namespace rnwgpu {
|
|
8
|
-
|
|
9
|
-
class SkiaPlatformContext : public PlatformContext {
|
|
10
|
-
public:
|
|
11
|
-
SkiaPlatformContext() = default;
|
|
12
|
-
~SkiaPlatformContext() = default;
|
|
13
|
-
|
|
14
|
-
wgpu::Surface makeSurface(wgpu::Instance instance, void *surface, int width,
|
|
15
|
-
int height) override;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
} // namespace rnwgpu
|
|
19
|
-
|
|
20
|
-
#endif // SK_GRAPHITE
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#ifdef SK_GRAPHITE
|
|
2
|
-
|
|
3
|
-
#include "SkiaPlatformContext.h"
|
|
4
|
-
|
|
5
|
-
#include <TargetConditionals.h>
|
|
6
|
-
|
|
7
|
-
namespace rnwgpu {
|
|
8
|
-
|
|
9
|
-
wgpu::Surface SkiaPlatformContext::makeSurface(wgpu::Instance instance,
|
|
10
|
-
void *surface, int width,
|
|
11
|
-
int height) {
|
|
12
|
-
wgpu::SurfaceSourceMetalLayer metalSurfaceDesc;
|
|
13
|
-
metalSurfaceDesc.layer = surface;
|
|
14
|
-
wgpu::SurfaceDescriptor surfaceDescriptor;
|
|
15
|
-
surfaceDescriptor.nextInChain = &metalSurfaceDesc;
|
|
16
|
-
return instance.CreateSurface(&surfaceDescriptor);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
} // namespace rnwgpu
|
|
20
|
-
|
|
21
|
-
#endif // SK_GRAPHITE
|
package/apple/SkiaWebGPUView.mm
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
2
|
-
|
|
3
|
-
#import "SkiaWebGPUView.h"
|
|
4
|
-
|
|
5
|
-
#import <react/renderer/components/rnskia/ComponentDescriptors.h>
|
|
6
|
-
#import <react/renderer/components/rnskia/EventEmitters.h>
|
|
7
|
-
#import <react/renderer/components/rnskia/Props.h>
|
|
8
|
-
#import <react/renderer/components/rnskia/RCTComponentViewHelpers.h>
|
|
9
|
-
|
|
10
|
-
#import "RCTFabricComponentsPlugins.h"
|
|
11
|
-
#import "WebGPUMetalView.h"
|
|
12
|
-
|
|
13
|
-
using namespace facebook::react;
|
|
14
|
-
|
|
15
|
-
@implementation SkiaWebGPUView
|
|
16
|
-
|
|
17
|
-
- (instancetype)initWithFrame:(CGRect)frame {
|
|
18
|
-
if (self = [super initWithFrame:frame]) {
|
|
19
|
-
static const auto defaultProps =
|
|
20
|
-
std::make_shared<const SkiaWebGPUViewProps>();
|
|
21
|
-
_props = defaultProps;
|
|
22
|
-
}
|
|
23
|
-
return self;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
+ (ComponentDescriptorProvider)componentDescriptorProvider {
|
|
27
|
-
return concreteComponentDescriptorProvider<
|
|
28
|
-
SkiaWebGPUViewComponentDescriptor>();
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
- (void)prepareForRecycle {
|
|
32
|
-
[super prepareForRecycle];
|
|
33
|
-
/*
|
|
34
|
-
It's important to destroy the Metal Layer before releasing a view
|
|
35
|
-
to the recycled pool to prevent displaying outdated content from
|
|
36
|
-
the last usage in the new context.
|
|
37
|
-
*/
|
|
38
|
-
self.contentView = nil;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
- (WebGPUMetalView *)getContentView {
|
|
42
|
-
if (!self.contentView) {
|
|
43
|
-
self.contentView = [WebGPUMetalView new];
|
|
44
|
-
}
|
|
45
|
-
return (WebGPUMetalView *)self.contentView;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
- (void)updateProps:(const Props::Shared &)props
|
|
49
|
-
oldProps:(const Props::Shared &)oldProps {
|
|
50
|
-
const auto &oldViewProps =
|
|
51
|
-
*std::static_pointer_cast<const SkiaWebGPUViewProps>(_props);
|
|
52
|
-
const auto &newViewProps =
|
|
53
|
-
*std::static_pointer_cast<const SkiaWebGPUViewProps>(props);
|
|
54
|
-
|
|
55
|
-
if (newViewProps.contextId != oldViewProps.contextId) {
|
|
56
|
-
/*
|
|
57
|
-
The context is set only once during mounting the component
|
|
58
|
-
and never changes because it isn't available for users to modify.
|
|
59
|
-
*/
|
|
60
|
-
WebGPUMetalView *metalView = [WebGPUMetalView new];
|
|
61
|
-
self.contentView = metalView;
|
|
62
|
-
[metalView setContextId:@(newViewProps.contextId)];
|
|
63
|
-
[metalView configure];
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
[super updateProps:props oldProps:oldProps];
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
- (void)updateLayoutMetrics:(const LayoutMetrics &)layoutMetrics
|
|
70
|
-
oldLayoutMetrics:(const LayoutMetrics &)oldLayoutMetrics {
|
|
71
|
-
[super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:oldLayoutMetrics];
|
|
72
|
-
[(WebGPUMetalView *)self.contentView update];
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
@end
|
|
76
|
-
|
|
77
|
-
Class<RCTComponentViewProtocol> SkiaWebGPUViewCls(void) {
|
|
78
|
-
return SkiaWebGPUView.class;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
#endif // RCT_NEW_ARCH_ENABLED
|
package/apple/WebGPUMetalView.mm
DELETED
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
#import "WebGPUMetalView.h"
|
|
2
|
-
|
|
3
|
-
#ifdef SK_GRAPHITE
|
|
4
|
-
|
|
5
|
-
#import "webgpu/webgpu_cpp.h"
|
|
6
|
-
#import <QuartzCore/CAMetalLayer.h>
|
|
7
|
-
|
|
8
|
-
#import <ReactCommon/CallInvoker.h>
|
|
9
|
-
|
|
10
|
-
#import "rnskia/RNDawnContext.h"
|
|
11
|
-
#import "rnwgpu/SurfaceRegistry.h"
|
|
12
|
-
#import "rnwgpu/async/RuntimeContext.h"
|
|
13
|
-
|
|
14
|
-
namespace {
|
|
15
|
-
// Applies a surface attach latched by the platform UI thread (see
|
|
16
|
-
// SurfaceInfo::applyPendingAttach) from the JS thread. Surface attaches are
|
|
17
|
-
// normally adopted at the next frame boundary by whichever thread renders;
|
|
18
|
-
// this flush covers contexts that are not actively rendering (static
|
|
19
|
-
// content), so the last offscreen frame still makes it on screen. Mirrors
|
|
20
|
-
// react-native-webgpu's RNWebGPUManager::flushPendingSurfaceTransition.
|
|
21
|
-
void flushPendingSurfaceTransition(std::shared_ptr<rnwgpu::SurfaceInfo> info) {
|
|
22
|
-
if (info == nullptr) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
auto invoker = rnwgpu::async::RuntimeContext::mainCallInvoker();
|
|
26
|
-
if (invoker == nullptr) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
invoker->invokeAsync([info = std::move(info)] { info->applyPendingAttach(); });
|
|
30
|
-
}
|
|
31
|
-
} // namespace
|
|
32
|
-
|
|
33
|
-
@implementation WebGPUMetalView {
|
|
34
|
-
BOOL _isConfigured;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
#if !TARGET_OS_OSX
|
|
38
|
-
+ (Class)layerClass {
|
|
39
|
-
return [CAMetalLayer class];
|
|
40
|
-
}
|
|
41
|
-
#else // !TARGET_OS_OSX
|
|
42
|
-
- (instancetype)init {
|
|
43
|
-
self = [super init];
|
|
44
|
-
if (self) {
|
|
45
|
-
self.wantsLayer = true;
|
|
46
|
-
self.layer = [CAMetalLayer layer];
|
|
47
|
-
}
|
|
48
|
-
return self;
|
|
49
|
-
}
|
|
50
|
-
#endif // !TARGET_OS_OSX
|
|
51
|
-
|
|
52
|
-
- (void)configure {
|
|
53
|
-
auto size = self.frame.size;
|
|
54
|
-
// Retain the layer for as long as SurfaceInfo holds the pointer: the
|
|
55
|
-
// latched attach (and the flush lambda that adopts it) can outlive this
|
|
56
|
-
// view, e.g. across a dev reload where the registry is cleared before
|
|
57
|
-
// dealloc runs. Balanced by the releaser below.
|
|
58
|
-
void *nativeSurface = (void *)CFBridgingRetain(self.layer);
|
|
59
|
-
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
60
|
-
auto &dawnContext = RNSkia::DawnContext::getInstance();
|
|
61
|
-
auto gpu = dawnContext.getWGPUInstance();
|
|
62
|
-
|
|
63
|
-
// Create the surface using Dawn's API directly
|
|
64
|
-
wgpu::SurfaceSourceMetalLayer metalSurfaceDesc;
|
|
65
|
-
metalSurfaceDesc.layer = nativeSurface;
|
|
66
|
-
wgpu::SurfaceDescriptor surfaceDescriptor;
|
|
67
|
-
surfaceDescriptor.nextInChain = &metalSurfaceDesc;
|
|
68
|
-
auto surface = gpu.CreateSurface(&surfaceDescriptor);
|
|
69
|
-
|
|
70
|
-
// Find-or-create + attach runs atomically under the registry lock so a
|
|
71
|
-
// concurrent destroyContext cannot orphan this surface.
|
|
72
|
-
auto info = registry.attachSurface(
|
|
73
|
-
[_contextId intValue], gpu, size.width, size.height, nativeSurface,
|
|
74
|
-
surface, [](void *layer) {
|
|
75
|
-
// The releaser can run on the rendering thread; CALayer teardown
|
|
76
|
-
// belongs on the main thread.
|
|
77
|
-
dispatch_async(dispatch_get_main_queue(), ^{
|
|
78
|
-
CFBridgingRelease(layer);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
// The attach is adopted at the next frame boundary by the rendering thread;
|
|
82
|
-
// schedule a flush so contexts that are not currently rendering still pick
|
|
83
|
-
// it up (and present their last offscreen frame).
|
|
84
|
-
flushPendingSurfaceTransition(info);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
- (void)update {
|
|
88
|
-
auto size = self.frame.size;
|
|
89
|
-
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
90
|
-
auto surfaceInfo = registry.getSurfaceInfo([_contextId intValue]);
|
|
91
|
-
if (surfaceInfo) {
|
|
92
|
-
surfaceInfo->resize(size.width, size.height);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
- (void)dealloc {
|
|
97
|
-
// The view dies with its Canvas (contextIds are never reused), so view
|
|
98
|
-
// teardown retires the registry entry. The JS-side cleanup
|
|
99
|
-
// (RNWebGPU.destroyContext) only handles entries that never had a native
|
|
100
|
-
// surface; see RNWebGPU::destroyContext for the ownership split.
|
|
101
|
-
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
102
|
-
if (auto info = registry.getSurfaceInfo([_contextId intValue])) {
|
|
103
|
-
info->detachSurface();
|
|
104
|
-
}
|
|
105
|
-
registry.removeSurfaceInfo([_contextId intValue]);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
@end
|
|
109
|
-
|
|
110
|
-
#else // SK_GRAPHITE
|
|
111
|
-
|
|
112
|
-
// Stub implementation when GRAPHITE is not enabled
|
|
113
|
-
@implementation WebGPUMetalView
|
|
114
|
-
|
|
115
|
-
#if !TARGET_OS_OSX
|
|
116
|
-
+ (Class)layerClass {
|
|
117
|
-
return [CAMetalLayer class];
|
|
118
|
-
}
|
|
119
|
-
#else // !TARGET_OS_OSX
|
|
120
|
-
- (instancetype)init {
|
|
121
|
-
self = [super init];
|
|
122
|
-
return self;
|
|
123
|
-
}
|
|
124
|
-
#endif // !TARGET_OS_OSX
|
|
125
|
-
|
|
126
|
-
- (void)configure {
|
|
127
|
-
// No-op when GRAPHITE is not enabled
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
- (void)update {
|
|
131
|
-
// No-op when GRAPHITE is not enabled
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
@end
|
|
135
|
-
|
|
136
|
-
#endif // SK_GRAPHITE
|
package/cpp/rnwgpu/ArrayBuffer.h
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#include <jsi/jsi.h>
|
|
3
|
-
|
|
4
|
-
#include <cmath>
|
|
5
|
-
#include <cstdint>
|
|
6
|
-
#include <memory>
|
|
7
|
-
|
|
8
|
-
#include "jsi/JSIConverter.h"
|
|
9
|
-
|
|
10
|
-
namespace rnwgpu {
|
|
11
|
-
|
|
12
|
-
namespace jsi = facebook::jsi;
|
|
13
|
-
|
|
14
|
-
struct ArrayBuffer : jsi::MutableBuffer {
|
|
15
|
-
ArrayBuffer(void *data, size_t size, size_t bytesPerElement)
|
|
16
|
-
: _data(data), _size(size), _bytesPerElement(bytesPerElement) {}
|
|
17
|
-
|
|
18
|
-
~ArrayBuffer() override {}
|
|
19
|
-
|
|
20
|
-
size_t size() const override { return _size; }
|
|
21
|
-
|
|
22
|
-
uint8_t *data() override { return static_cast<uint8_t *>(_data); }
|
|
23
|
-
|
|
24
|
-
void *_data;
|
|
25
|
-
size_t _size;
|
|
26
|
-
size_t _bytesPerElement;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
static std::shared_ptr<ArrayBuffer>
|
|
30
|
-
createArrayBufferFromJSI(jsi::Runtime &runtime,
|
|
31
|
-
const jsi::ArrayBuffer &arrayBuffer,
|
|
32
|
-
size_t bytesPerElement) {
|
|
33
|
-
auto size = arrayBuffer.size(runtime);
|
|
34
|
-
return std::make_shared<ArrayBuffer>(arrayBuffer.data(runtime), size,
|
|
35
|
-
bytesPerElement);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
template <> struct JSIConverter<std::shared_ptr<ArrayBuffer>> {
|
|
39
|
-
static std::shared_ptr<ArrayBuffer>
|
|
40
|
-
fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBound) {
|
|
41
|
-
if (arg.isObject()) {
|
|
42
|
-
auto obj = arg.getObject(runtime);
|
|
43
|
-
if (obj.isArrayBuffer(runtime)) {
|
|
44
|
-
return createArrayBufferFromJSI(runtime, obj.getArrayBuffer(runtime),
|
|
45
|
-
1);
|
|
46
|
-
}
|
|
47
|
-
if (obj.hasProperty(runtime, "buffer")) {
|
|
48
|
-
auto bufferProp = obj.getProperty(runtime, "buffer");
|
|
49
|
-
if (bufferProp.isObject() &&
|
|
50
|
-
bufferProp.getObject(runtime).isArrayBuffer(runtime)) {
|
|
51
|
-
auto buff = bufferProp.getObject(runtime);
|
|
52
|
-
auto arrayBuffer = buff.getArrayBuffer(runtime);
|
|
53
|
-
const size_t bufferSize = arrayBuffer.size(runtime);
|
|
54
|
-
|
|
55
|
-
// byteOffset / byteLength are user-readable JS properties, not values
|
|
56
|
-
// the engine guarantees (unlike Dawn's node binding, which reads them
|
|
57
|
-
// off the engine's typed-array view). Read them as doubles so we can
|
|
58
|
-
// reject negative, non-integral, NaN/Inf, or oversized values before
|
|
59
|
-
// they wrap around when cast to size_t.
|
|
60
|
-
const double byteOffsetValue =
|
|
61
|
-
obj.getProperty(runtime, "byteOffset").asNumber();
|
|
62
|
-
const double byteLengthValue =
|
|
63
|
-
obj.getProperty(runtime, "byteLength").asNumber();
|
|
64
|
-
|
|
65
|
-
auto isValidByteIndex = [](double value) {
|
|
66
|
-
return std::isfinite(value) && value >= 0.0 &&
|
|
67
|
-
value <= static_cast<double>(SIZE_MAX) &&
|
|
68
|
-
std::floor(value) == value;
|
|
69
|
-
};
|
|
70
|
-
if (!isValidByteIndex(byteOffsetValue) ||
|
|
71
|
-
!isValidByteIndex(byteLengthValue)) {
|
|
72
|
-
throw std::runtime_error(
|
|
73
|
-
"ArrayBuffer::fromJSI: invalid byteOffset/byteLength");
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const size_t byteOffset = static_cast<size_t>(byteOffsetValue);
|
|
77
|
-
const size_t byteLength = static_cast<size_t>(byteLengthValue);
|
|
78
|
-
|
|
79
|
-
// Overflow-safe bounds check: byteOffset + byteLength <= bufferSize.
|
|
80
|
-
if (byteOffset > bufferSize || byteLength > bufferSize - byteOffset) {
|
|
81
|
-
throw std::runtime_error(
|
|
82
|
-
"ArrayBuffer::fromJSI: view bounds [byteOffset, byteOffset + "
|
|
83
|
-
"byteLength) exceed the backing ArrayBuffer size");
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// BYTES_PER_ELEMENT is absent on a DataView; default to 1. A spoofed
|
|
87
|
-
// object could report 0 (or a negative/NaN value), so clamp to a
|
|
88
|
-
// minimum of 1 to avoid a later division by zero in writeBuffer.
|
|
89
|
-
size_t bytesPerElements = 1;
|
|
90
|
-
if (obj.hasProperty(runtime, "BYTES_PER_ELEMENT")) {
|
|
91
|
-
auto bpe = obj.getProperty(runtime, "BYTES_PER_ELEMENT");
|
|
92
|
-
if (bpe.isNumber()) {
|
|
93
|
-
const double value = bpe.asNumber();
|
|
94
|
-
if (std::isfinite(value) && value >= 1.0) {
|
|
95
|
-
bytesPerElements = static_cast<size_t>(value);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return std::make_shared<ArrayBuffer>(arrayBuffer.data(runtime) +
|
|
101
|
-
byteOffset,
|
|
102
|
-
byteLength, bytesPerElements);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
throw std::runtime_error("ArrayBuffer::fromJSI: argument is not an object "
|
|
107
|
-
"with an ArrayBuffer 'buffer' property");
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
static jsi::Value toJSI(jsi::Runtime &runtime,
|
|
111
|
-
std::shared_ptr<ArrayBuffer> arg) {
|
|
112
|
-
return jsi::ArrayBuffer(runtime, arg);
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
} // namespace rnwgpu
|
package/cpp/rnwgpu/Canvas.h
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <memory>
|
|
4
|
-
|
|
5
|
-
#include "jsi/NativeObject.h"
|
|
6
|
-
|
|
7
|
-
namespace rnwgpu {
|
|
8
|
-
|
|
9
|
-
namespace jsi = facebook::jsi;
|
|
10
|
-
|
|
11
|
-
class Canvas : public NativeObject<Canvas> {
|
|
12
|
-
public:
|
|
13
|
-
// Note: not "Canvas" — that brand belongs to RNSkia::JsiSkCanvas, and
|
|
14
|
-
// boxing brands must be unique process-wide (see BoxedNativeObjectRegistry).
|
|
15
|
-
static constexpr const char *CLASS_NAME = "WebGPUCanvas";
|
|
16
|
-
|
|
17
|
-
Canvas(void *nativeSurface, int width, int height)
|
|
18
|
-
: NativeObject(CLASS_NAME), _nativeSurface(nativeSurface), _width(width),
|
|
19
|
-
_height(height), _clientWidth(width), _clientHeight(height) {}
|
|
20
|
-
|
|
21
|
-
void *getNativeSurface() { return _nativeSurface; }
|
|
22
|
-
|
|
23
|
-
int getWidth() { return _width; }
|
|
24
|
-
int getHeight() { return _height; }
|
|
25
|
-
|
|
26
|
-
void setWidth(int width) { _width = width; }
|
|
27
|
-
void setHeight(int height) { _height = height; }
|
|
28
|
-
|
|
29
|
-
int getClientWidth() { return _clientWidth; }
|
|
30
|
-
int getClientHeight() { return _clientHeight; }
|
|
31
|
-
|
|
32
|
-
void setClientWidth(int width) { _clientWidth = width; }
|
|
33
|
-
void setClientHeight(int height) { _clientHeight = height; }
|
|
34
|
-
|
|
35
|
-
static void definePrototype(jsi::Runtime &runtime, jsi::Object &prototype) {
|
|
36
|
-
installGetterSetter(runtime, prototype, "width", &Canvas::getWidth,
|
|
37
|
-
&Canvas::setWidth);
|
|
38
|
-
installGetterSetter(runtime, prototype, "height", &Canvas::getHeight,
|
|
39
|
-
&Canvas::setHeight);
|
|
40
|
-
installGetter(runtime, prototype, "clientWidth", &Canvas::getClientWidth);
|
|
41
|
-
installGetter(runtime, prototype, "clientHeight", &Canvas::getClientHeight);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
private:
|
|
45
|
-
void *_nativeSurface;
|
|
46
|
-
int _width;
|
|
47
|
-
int _height;
|
|
48
|
-
int _clientWidth;
|
|
49
|
-
int _clientHeight;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
} // namespace rnwgpu
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <memory>
|
|
4
|
-
|
|
5
|
-
#include "webgpu/webgpu_cpp.h"
|
|
6
|
-
|
|
7
|
-
namespace rnwgpu {
|
|
8
|
-
|
|
9
|
-
class PlatformContext {
|
|
10
|
-
public:
|
|
11
|
-
PlatformContext() = default;
|
|
12
|
-
virtual ~PlatformContext() = default;
|
|
13
|
-
|
|
14
|
-
virtual wgpu::Surface makeSurface(wgpu::Instance instance, void *surface,
|
|
15
|
-
int width, int height) = 0;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
} // namespace rnwgpu
|