@shopify/react-native-skia 2.4.15 → 2.4.17
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 +69 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +19 -7
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +7 -0
- package/apple/RNSkApplePlatformContext.mm +4 -0
- package/cpp/api/JsiSkApi.h +31 -0
- package/cpp/api/JsiSkImageFactory.h +69 -1
- package/cpp/api/JsiSkImageFilter.h +1 -0
- package/cpp/api/JsiSkPath.h +1 -1
- package/cpp/jsi/RuntimeAwareCache.h +0 -2
- package/cpp/jsi2/EnumMapper.h +45 -0
- package/cpp/jsi2/JSIConverter.h +468 -0
- package/cpp/jsi2/NativeObject.h +598 -0
- package/cpp/jsi2/Promise.cpp +44 -0
- package/cpp/jsi2/Promise.h +35 -0
- package/cpp/rnskia/RNDawnContext.h +114 -0
- package/cpp/rnskia/RNSkManager.cpp +41 -1
- package/cpp/rnwgpu/ArrayBuffer.h +68 -0
- package/cpp/rnwgpu/api/Convertors.h +761 -0
- package/cpp/rnwgpu/api/External.h +12 -0
- package/cpp/rnwgpu/api/GPU.cpp +129 -0
- package/cpp/rnwgpu/api/GPU.h +57 -0
- package/cpp/rnwgpu/api/GPUAdapter.cpp +178 -0
- package/cpp/rnwgpu/api/GPUAdapter.h +59 -0
- package/cpp/rnwgpu/api/GPUAdapterInfo.h +57 -0
- package/cpp/rnwgpu/api/GPUBindGroup.cpp +3 -0
- package/cpp/rnwgpu/api/GPUBindGroup.h +51 -0
- package/cpp/rnwgpu/api/GPUBindGroupLayout.h +52 -0
- package/cpp/rnwgpu/api/GPUBuffer.cpp +97 -0
- package/cpp/rnwgpu/api/GPUBuffer.h +87 -0
- package/cpp/rnwgpu/api/GPUCommandBuffer.h +45 -0
- package/cpp/rnwgpu/api/GPUCommandEncoder.cpp +179 -0
- package/cpp/rnwgpu/api/GPUCommandEncoder.h +111 -0
- package/cpp/rnwgpu/api/GPUCompilationInfo.h +79 -0
- package/cpp/rnwgpu/api/GPUCompilationMessage.h +36 -0
- package/cpp/rnwgpu/api/GPUComputePassEncoder.cpp +60 -0
- package/cpp/rnwgpu/api/GPUComputePassEncoder.h +85 -0
- package/cpp/rnwgpu/api/GPUComputePipeline.cpp +12 -0
- package/cpp/rnwgpu/api/GPUComputePipeline.h +60 -0
- package/cpp/rnwgpu/api/GPUDevice.cpp +434 -0
- package/cpp/rnwgpu/api/GPUDevice.h +174 -0
- package/cpp/rnwgpu/api/GPUDeviceLostInfo.cpp +7 -0
- package/cpp/rnwgpu/api/GPUDeviceLostInfo.h +40 -0
- package/cpp/rnwgpu/api/GPUError.h +35 -0
- package/cpp/rnwgpu/api/GPUExtent3D.h +66 -0
- package/cpp/rnwgpu/api/GPUExternalTexture.h +45 -0
- package/cpp/rnwgpu/api/GPUFeatures.h +212 -0
- package/cpp/rnwgpu/api/GPUInternalError.h +31 -0
- package/cpp/rnwgpu/api/GPUOrigin2D.h +55 -0
- package/cpp/rnwgpu/api/GPUOrigin3D.h +62 -0
- package/cpp/rnwgpu/api/GPUOutOfMemoryError.h +33 -0
- package/cpp/rnwgpu/api/GPUPipelineLayout.h +45 -0
- package/cpp/rnwgpu/api/GPUQuerySet.cpp +11 -0
- package/cpp/rnwgpu/api/GPUQuerySet.h +73 -0
- package/cpp/rnwgpu/api/GPUQueue.cpp +169 -0
- package/cpp/rnwgpu/api/GPUQueue.h +84 -0
- package/cpp/rnwgpu/api/GPURenderBundle.h +44 -0
- package/cpp/rnwgpu/api/GPURenderBundleEncoder.cpp +131 -0
- package/cpp/rnwgpu/api/GPURenderBundleEncoder.h +110 -0
- package/cpp/rnwgpu/api/GPURenderPassEncoder.cpp +165 -0
- package/cpp/rnwgpu/api/GPURenderPassEncoder.h +130 -0
- package/cpp/rnwgpu/api/GPURenderPipeline.cpp +13 -0
- package/cpp/rnwgpu/api/GPURenderPipeline.h +61 -0
- package/cpp/rnwgpu/api/GPUSampler.h +44 -0
- package/cpp/rnwgpu/api/GPUShaderModule.cpp +51 -0
- package/cpp/rnwgpu/api/GPUShaderModule.h +66 -0
- package/cpp/rnwgpu/api/GPUSupportedLimits.cpp +129 -0
- package/cpp/rnwgpu/api/GPUSupportedLimits.h +131 -0
- package/cpp/rnwgpu/api/GPUTexture.cpp +47 -0
- package/cpp/rnwgpu/api/GPUTexture.h +150 -0
- package/cpp/rnwgpu/api/GPUTextureView.h +44 -0
- package/cpp/rnwgpu/api/GPUValidationError.h +32 -0
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupDescriptor.h +64 -0
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +71 -0
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutDescriptor.h +56 -0
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutEntry.h +97 -0
- package/cpp/rnwgpu/api/descriptors/GPUBlendComponent.h +57 -0
- package/cpp/rnwgpu/api/descriptors/GPUBlendState.h +52 -0
- package/cpp/rnwgpu/api/descriptors/GPUBufferBinding.h +56 -0
- package/cpp/rnwgpu/api/descriptors/GPUBufferBindingLayout.h +56 -0
- package/cpp/rnwgpu/api/descriptors/GPUBufferDescriptor.h +59 -0
- package/cpp/rnwgpu/api/descriptors/GPUBufferUsage.h +39 -0
- package/cpp/rnwgpu/api/descriptors/GPUColor.h +66 -0
- package/cpp/rnwgpu/api/descriptors/GPUColorTargetState.h +58 -0
- package/cpp/rnwgpu/api/descriptors/GPUColorWrite.h +29 -0
- package/cpp/rnwgpu/api/descriptors/GPUCommandBufferDescriptor.h +45 -0
- package/cpp/rnwgpu/api/descriptors/GPUCommandEncoderDescriptor.h +45 -0
- package/cpp/rnwgpu/api/descriptors/GPUComputePassDescriptor.h +56 -0
- package/cpp/rnwgpu/api/descriptors/GPUComputePassTimestampWrites.h +58 -0
- package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +67 -0
- package/cpp/rnwgpu/api/descriptors/GPUDepthStencilState.h +103 -0
- package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +99 -0
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureBindingLayout.h +38 -0
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +71 -0
- package/cpp/rnwgpu/api/descriptors/GPUFragmentState.h +73 -0
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyBuffer.h +62 -0
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +62 -0
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +65 -0
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +81 -0
- package/cpp/rnwgpu/api/descriptors/GPUImageDataLayout.h +54 -0
- package/cpp/rnwgpu/api/descriptors/GPUMapMode.h +22 -0
- package/cpp/rnwgpu/api/descriptors/GPUMultisampleState.h +54 -0
- package/cpp/rnwgpu/api/descriptors/GPUPipelineLayoutDescriptor.h +57 -0
- package/cpp/rnwgpu/api/descriptors/GPUPrimitiveState.h +69 -0
- package/cpp/rnwgpu/api/descriptors/GPUProgrammableStage.h +61 -0
- package/cpp/rnwgpu/api/descriptors/GPUQuerySetDescriptor.h +55 -0
- package/cpp/rnwgpu/api/descriptors/GPUQueueDescriptor.h +43 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleDescriptor.h +45 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleEncoderDescriptor.h +80 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderPassColorAttachment.h +81 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDepthStencilAttachment.h +101 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +92 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderPassTimestampWrites.h +58 -0
- package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +103 -0
- package/cpp/rnwgpu/api/descriptors/GPURequestAdapterOptions.h +51 -0
- package/cpp/rnwgpu/api/descriptors/GPUSamplerBindingLayout.h +45 -0
- package/cpp/rnwgpu/api/descriptors/GPUSamplerDescriptor.h +110 -0
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleCompilationHint.h +60 -0
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleDescriptor.h +62 -0
- package/cpp/rnwgpu/api/descriptors/GPUShaderStage.h +25 -0
- package/cpp/rnwgpu/api/descriptors/GPUStencilFaceState.h +64 -0
- package/cpp/rnwgpu/api/descriptors/GPUStorageTextureBindingLayout.h +59 -0
- package/cpp/rnwgpu/api/descriptors/GPUTextureBindingLayout.h +59 -0
- package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +91 -0
- package/cpp/rnwgpu/api/descriptors/GPUTextureUsage.h +29 -0
- package/cpp/rnwgpu/api/descriptors/GPUTextureViewDescriptor.h +91 -0
- package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +64 -0
- package/cpp/rnwgpu/api/descriptors/GPUVertexAttribute.h +53 -0
- package/cpp/rnwgpu/api/descriptors/GPUVertexBufferLayout.h +62 -0
- package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +73 -0
- package/cpp/rnwgpu/api/descriptors/Unions.h +1984 -0
- package/cpp/rnwgpu/async/AsyncDispatcher.h +28 -0
- package/cpp/rnwgpu/async/AsyncRunner.cpp +181 -0
- package/cpp/rnwgpu/async/AsyncRunner.h +56 -0
- package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +181 -0
- package/cpp/rnwgpu/async/AsyncTaskHandle.h +55 -0
- package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.cpp +23 -0
- package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.h +22 -0
- package/lib/commonjs/Platform/Platform.web.js +1 -2
- package/lib/commonjs/Platform/Platform.web.js.map +1 -1
- package/lib/commonjs/external/reanimated/buffers.js.map +1 -1
- package/lib/commonjs/external/reanimated/interpolators.d.ts +1 -4
- package/lib/commonjs/renderer/Canvas.js +4 -3
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/renderer/components/Group.js +1 -2
- package/lib/commonjs/renderer/components/Group.js.map +1 -1
- package/lib/commonjs/renderer/components/shapes/FitBox.js +1 -2
- package/lib/commonjs/renderer/components/shapes/FitBox.js.map +1 -1
- package/lib/commonjs/skia/types/ContourMeasure.js.map +1 -1
- package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +20 -0
- package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/commonjs/skia/types/RuntimeEffect/RuntimeEffect.js.map +1 -1
- package/lib/commonjs/skia/types/Skia.d.ts +17 -0
- package/lib/commonjs/skia/types/Skia.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -0
- package/lib/commonjs/skia/web/JsiSkImageFactory.js +6 -0
- package/lib/commonjs/skia/web/JsiSkImageFactory.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkParagraphStyle.js +2 -2
- package/lib/commonjs/skia/web/JsiSkParagraphStyle.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkia.js +6 -0
- package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/commands/ColorFilters.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/commands/PathEffects.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/commands/Shaders.js.map +1 -1
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.d.ts +2 -0
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js +2 -0
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js.map +1 -1
- package/lib/commonjs/views/SkiaPictureView.web.js +4 -4
- package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -1
- package/lib/commonjs/web/WithSkiaWeb.js +1 -2
- package/lib/commonjs/web/WithSkiaWeb.js.map +1 -1
- package/lib/module/external/reanimated/buffers.js.map +1 -1
- package/lib/module/external/reanimated/interpolators.d.ts +1 -4
- package/lib/module/renderer/Canvas.js +3 -1
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/skia/types/ContourMeasure.js.map +1 -1
- package/lib/module/skia/types/Image/ImageFactory.d.ts +20 -0
- package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/module/skia/types/RuntimeEffect/RuntimeEffect.js.map +1 -1
- package/lib/module/skia/types/Skia.d.ts +17 -0
- package/lib/module/skia/types/Skia.js.map +1 -1
- package/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -0
- package/lib/module/skia/web/JsiSkImageFactory.js +6 -0
- package/lib/module/skia/web/JsiSkImageFactory.js.map +1 -1
- package/lib/module/skia/web/JsiSkParagraphStyle.js +2 -2
- package/lib/module/skia/web/JsiSkParagraphStyle.js.map +1 -1
- package/lib/module/skia/web/JsiSkia.js +6 -0
- package/lib/module/skia/web/JsiSkia.js.map +1 -1
- package/lib/module/sksg/Recorder/commands/ColorFilters.js.map +1 -1
- package/lib/module/sksg/Recorder/commands/ImageFilters.js.map +1 -1
- package/lib/module/sksg/Recorder/commands/PathEffects.js.map +1 -1
- package/lib/module/sksg/Recorder/commands/Shaders.js.map +1 -1
- package/lib/module/specs/SkiaPictureViewNativeComponent.d.ts +2 -0
- package/lib/module/specs/SkiaPictureViewNativeComponent.js +4 -0
- package/lib/module/specs/SkiaPictureViewNativeComponent.js.map +1 -1
- package/lib/module/views/SkiaPictureView.web.js +3 -2
- package/lib/module/views/SkiaPictureView.web.js.map +1 -1
- package/lib/typescript/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +2 -0
- package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +2 -0
- package/lib/typescript/lib/module/renderer/Canvas.d.ts +1 -1
- package/lib/typescript/lib/module/skia/Skia.web.d.ts +2 -0
- package/lib/typescript/lib/module/skia/web/JsiSkImageFactory.d.ts +2 -0
- package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +2 -0
- package/lib/typescript/lib/module/views/SkiaPictureView.d.ts +1 -1
- package/lib/typescript/src/external/reanimated/interpolators.d.ts +1 -4
- package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +20 -0
- package/lib/typescript/src/skia/types/Skia.d.ts +17 -0
- package/lib/typescript/src/skia/web/JsiSkImageFactory.d.ts +2 -0
- package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.d.ts +2 -0
- package/package.json +20 -16
- package/react-native-skia.podspec +52 -13
- package/scripts/install-skia.mjs +99 -48
- package/src/external/reanimated/buffers.ts +1 -1
- package/src/renderer/Canvas.tsx +3 -2
- package/src/skia/types/ContourMeasure.tsx +1 -2
- package/src/skia/types/Image/ImageFactory.ts +22 -0
- package/src/skia/types/RuntimeEffect/RuntimeEffect.ts +1 -2
- package/src/skia/types/Skia.ts +17 -0
- package/src/skia/web/JsiSkImageFactory.ts +8 -0
- package/src/skia/web/JsiSkia.ts +6 -0
- package/src/sksg/Recorder/commands/ColorFilters.ts +3 -2
- package/src/sksg/Recorder/commands/ImageFilters.ts +3 -2
- package/src/sksg/Recorder/commands/PathEffects.ts +3 -2
- package/src/sksg/Recorder/commands/Shaders.ts +3 -2
- package/src/specs/SkiaPictureViewNativeComponent.ts +7 -0
- package/src/views/SkiaPictureView.web.tsx +4 -1
|
@@ -174,6 +174,120 @@ public:
|
|
|
174
174
|
return surface;
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
+
// Get the wgpu::Instance for WebGPU bindings
|
|
178
|
+
wgpu::Instance getWGPUInstance() {
|
|
179
|
+
return wgpu::Instance(instance->Get());
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Get the wgpu::Device for WebGPU bindings
|
|
183
|
+
wgpu::Device getWGPUDevice() {
|
|
184
|
+
return backendContext.fDevice;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Create an SkImage from a WebGPU texture
|
|
188
|
+
// The texture must have TextureBinding usage
|
|
189
|
+
sk_sp<SkImage> MakeImageFromTexture(wgpu::Texture texture, int width,
|
|
190
|
+
int height,
|
|
191
|
+
wgpu::TextureFormat format) {
|
|
192
|
+
if (!texture) {
|
|
193
|
+
return nullptr;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Map WebGPU format to Skia color type
|
|
197
|
+
SkColorType colorType;
|
|
198
|
+
switch (format) {
|
|
199
|
+
case wgpu::TextureFormat::RGBA8Unorm:
|
|
200
|
+
colorType = kRGBA_8888_SkColorType;
|
|
201
|
+
break;
|
|
202
|
+
case wgpu::TextureFormat::BGRA8Unorm:
|
|
203
|
+
colorType = kBGRA_8888_SkColorType;
|
|
204
|
+
break;
|
|
205
|
+
case wgpu::TextureFormat::RGBA16Float:
|
|
206
|
+
colorType = kRGBA_F16_SkColorType;
|
|
207
|
+
break;
|
|
208
|
+
case wgpu::TextureFormat::R8Unorm:
|
|
209
|
+
colorType = kGray_8_SkColorType;
|
|
210
|
+
break;
|
|
211
|
+
default:
|
|
212
|
+
// Use preferred color type for unsupported formats
|
|
213
|
+
colorType = DawnUtils::PreferedColorType;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
skgpu::graphite::BackendTexture backendTexture =
|
|
218
|
+
skgpu::graphite::BackendTextures::MakeDawn(texture.Get());
|
|
219
|
+
|
|
220
|
+
// Wrap the texture - we use a release proc that adds a reference to the
|
|
221
|
+
// texture to prevent it from being destroyed while the SkImage is alive
|
|
222
|
+
struct TextureRef {
|
|
223
|
+
wgpu::Texture texture;
|
|
224
|
+
};
|
|
225
|
+
auto textureRef = new TextureRef{texture};
|
|
226
|
+
|
|
227
|
+
return SkImages::WrapTexture(
|
|
228
|
+
getRecorder(), backendTexture, colorType, kPremul_SkAlphaType, nullptr,
|
|
229
|
+
[](void *context) {
|
|
230
|
+
auto ref = static_cast<TextureRef *>(context);
|
|
231
|
+
delete ref;
|
|
232
|
+
},
|
|
233
|
+
textureRef);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Create a WebGPU texture from an SkImage
|
|
237
|
+
// Returns a texture with CopySrc and TextureBinding usage
|
|
238
|
+
wgpu::Texture MakeTextureFromImage(sk_sp<SkImage> image) {
|
|
239
|
+
if (!image) {
|
|
240
|
+
return nullptr;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
int width = image->width();
|
|
244
|
+
int height = image->height();
|
|
245
|
+
|
|
246
|
+
// Create a texture with the appropriate format
|
|
247
|
+
wgpu::TextureDescriptor textureDesc;
|
|
248
|
+
textureDesc.label = "SkImage Texture";
|
|
249
|
+
textureDesc.size = {static_cast<uint32_t>(width),
|
|
250
|
+
static_cast<uint32_t>(height), 1};
|
|
251
|
+
textureDesc.format = DawnUtils::PreferredTextureFormat;
|
|
252
|
+
textureDesc.usage = wgpu::TextureUsage::CopyDst |
|
|
253
|
+
wgpu::TextureUsage::CopySrc |
|
|
254
|
+
wgpu::TextureUsage::TextureBinding |
|
|
255
|
+
wgpu::TextureUsage::RenderAttachment;
|
|
256
|
+
textureDesc.dimension = wgpu::TextureDimension::e2D;
|
|
257
|
+
textureDesc.mipLevelCount = 1;
|
|
258
|
+
textureDesc.sampleCount = 1;
|
|
259
|
+
|
|
260
|
+
wgpu::Texture texture = backendContext.fDevice.CreateTexture(&textureDesc);
|
|
261
|
+
if (!texture) {
|
|
262
|
+
return nullptr;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Create a surface backed by this texture
|
|
266
|
+
skgpu::graphite::BackendTexture backendTexture =
|
|
267
|
+
skgpu::graphite::BackendTextures::MakeDawn(texture.Get());
|
|
268
|
+
|
|
269
|
+
sk_sp<SkSurface> surface = SkSurfaces::WrapBackendTexture(
|
|
270
|
+
getRecorder(), backendTexture, DawnUtils::PreferedColorType,
|
|
271
|
+
nullptr, // colorspace
|
|
272
|
+
nullptr); // surfaceProps
|
|
273
|
+
|
|
274
|
+
if (!surface) {
|
|
275
|
+
return nullptr;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Draw the image onto the surface
|
|
279
|
+
SkCanvas *canvas = surface->getCanvas();
|
|
280
|
+
canvas->drawImage(image, 0, 0);
|
|
281
|
+
|
|
282
|
+
// Flush the surface to ensure the image is rendered
|
|
283
|
+
auto recording = getRecorder()->snap();
|
|
284
|
+
if (recording) {
|
|
285
|
+
submitRecording(recording.get(), skgpu::graphite::SyncToCpu::kYes);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
return texture;
|
|
289
|
+
}
|
|
290
|
+
|
|
177
291
|
// Create onscreen surface with window
|
|
178
292
|
std::unique_ptr<WindowContext> MakeWindow(void *window, int width,
|
|
179
293
|
int height) {
|
|
@@ -11,6 +11,16 @@
|
|
|
11
11
|
|
|
12
12
|
#include "RuntimeAwareCache.h"
|
|
13
13
|
|
|
14
|
+
#ifdef SK_GRAPHITE
|
|
15
|
+
#include "RNDawnContext.h"
|
|
16
|
+
#include "rnwgpu/api/GPU.h"
|
|
17
|
+
#include "rnwgpu/api/descriptors/GPUBufferUsage.h"
|
|
18
|
+
#include "rnwgpu/api/descriptors/GPUColorWrite.h"
|
|
19
|
+
#include "rnwgpu/api/descriptors/GPUMapMode.h"
|
|
20
|
+
#include "rnwgpu/api/descriptors/GPUShaderStage.h"
|
|
21
|
+
#include "rnwgpu/api/descriptors/GPUTextureUsage.h"
|
|
22
|
+
#endif
|
|
23
|
+
|
|
14
24
|
namespace RNSkia {
|
|
15
25
|
namespace jsi = facebook::jsi;
|
|
16
26
|
|
|
@@ -22,7 +32,7 @@ RNSkManager::RNSkManager(
|
|
|
22
32
|
_jsCallInvoker(jsCallInvoker),
|
|
23
33
|
_viewApi(std::make_shared<RNSkJsiViewApi>(platformContext)) {
|
|
24
34
|
|
|
25
|
-
// Register main runtime
|
|
35
|
+
// Register main runtime (used by both Skia and WebGPU bindings)
|
|
26
36
|
RNJsi::BaseRuntimeAwareCache::setMainJsRuntime(_jsRuntime);
|
|
27
37
|
|
|
28
38
|
// Install bindings
|
|
@@ -61,5 +71,35 @@ void RNSkManager::installBindings() {
|
|
|
61
71
|
_jsRuntime->global().setProperty(
|
|
62
72
|
*_jsRuntime, "SkiaViewApi",
|
|
63
73
|
jsi::Object::createFromHostObject(*_jsRuntime, _viewApi));
|
|
74
|
+
|
|
75
|
+
#ifdef SK_GRAPHITE
|
|
76
|
+
// Install WebGPU GPU constructor
|
|
77
|
+
rnwgpu::GPU::installConstructor(*_jsRuntime);
|
|
78
|
+
// Create and expose navigator.gpu using DawnContext's instance
|
|
79
|
+
auto &dawnContext = DawnContext::getInstance();
|
|
80
|
+
auto gpu = std::make_shared<rnwgpu::GPU>(*_jsRuntime, dawnContext.getWGPUInstance());
|
|
81
|
+
auto navigatorValue = _jsRuntime->global().getProperty(*_jsRuntime, "navigator");
|
|
82
|
+
if (navigatorValue.isObject()) {
|
|
83
|
+
auto navigator = navigatorValue.asObject(*_jsRuntime);
|
|
84
|
+
navigator.setProperty(*_jsRuntime, "gpu", rnwgpu::GPU::create(*_jsRuntime, gpu));
|
|
85
|
+
} else {
|
|
86
|
+
// Create navigator object if it doesn't exist
|
|
87
|
+
jsi::Object navigator(*_jsRuntime);
|
|
88
|
+
navigator.setProperty(*_jsRuntime, "gpu", rnwgpu::GPU::create(*_jsRuntime, gpu));
|
|
89
|
+
_jsRuntime->global().setProperty(*_jsRuntime, "navigator", std::move(navigator));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Install WebGPU constant objects as plain JS objects
|
|
93
|
+
_jsRuntime->global().setProperty(*_jsRuntime, "GPUBufferUsage",
|
|
94
|
+
rnwgpu::GPUBufferUsage::create(*_jsRuntime));
|
|
95
|
+
_jsRuntime->global().setProperty(*_jsRuntime, "GPUColorWrite",
|
|
96
|
+
rnwgpu::GPUColorWrite::create(*_jsRuntime));
|
|
97
|
+
_jsRuntime->global().setProperty(*_jsRuntime, "GPUMapMode",
|
|
98
|
+
rnwgpu::GPUMapMode::create(*_jsRuntime));
|
|
99
|
+
_jsRuntime->global().setProperty(*_jsRuntime, "GPUShaderStage",
|
|
100
|
+
rnwgpu::GPUShaderStage::create(*_jsRuntime));
|
|
101
|
+
_jsRuntime->global().setProperty(*_jsRuntime, "GPUTextureUsage",
|
|
102
|
+
rnwgpu::GPUTextureUsage::create(*_jsRuntime));
|
|
103
|
+
#endif
|
|
64
104
|
}
|
|
65
105
|
} // namespace RNSkia
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#include <jsi/jsi.h>
|
|
3
|
+
|
|
4
|
+
#include <memory>
|
|
5
|
+
|
|
6
|
+
#include "jsi2/JSIConverter.h"
|
|
7
|
+
|
|
8
|
+
namespace rnwgpu {
|
|
9
|
+
|
|
10
|
+
namespace jsi = facebook::jsi;
|
|
11
|
+
|
|
12
|
+
struct ArrayBuffer : jsi::MutableBuffer {
|
|
13
|
+
ArrayBuffer(void *data, size_t size, size_t bytesPerElement)
|
|
14
|
+
: _data(data), _size(size), _bytesPerElement(bytesPerElement) {}
|
|
15
|
+
|
|
16
|
+
~ArrayBuffer() override {}
|
|
17
|
+
|
|
18
|
+
size_t size() const override { return _size; }
|
|
19
|
+
|
|
20
|
+
uint8_t *data() override { return static_cast<uint8_t *>(_data); }
|
|
21
|
+
|
|
22
|
+
void *_data;
|
|
23
|
+
size_t _size;
|
|
24
|
+
size_t _bytesPerElement;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
static std::shared_ptr<ArrayBuffer>
|
|
28
|
+
createArrayBufferFromJSI(jsi::Runtime &runtime,
|
|
29
|
+
const jsi::ArrayBuffer &arrayBuffer,
|
|
30
|
+
size_t bytesPerElement) {
|
|
31
|
+
auto size = arrayBuffer.size(runtime);
|
|
32
|
+
return std::make_shared<ArrayBuffer>(arrayBuffer.data(runtime), size,
|
|
33
|
+
bytesPerElement);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
template <> struct JSIConverter<std::shared_ptr<ArrayBuffer>> {
|
|
37
|
+
static std::shared_ptr<ArrayBuffer>
|
|
38
|
+
fromJSI(jsi::Runtime &runtime, const jsi::Value &arg, bool outOfBound) {
|
|
39
|
+
if (arg.isObject()) {
|
|
40
|
+
auto obj = arg.getObject(runtime);
|
|
41
|
+
if (obj.isArrayBuffer(runtime)) {
|
|
42
|
+
return createArrayBufferFromJSI(runtime, obj.getArrayBuffer(runtime),
|
|
43
|
+
1);
|
|
44
|
+
}
|
|
45
|
+
if (obj.hasProperty(runtime, "buffer")) {
|
|
46
|
+
auto bufferProp = obj.getProperty(runtime, "buffer");
|
|
47
|
+
if (bufferProp.isObject() &&
|
|
48
|
+
bufferProp.getObject(runtime).isArrayBuffer(runtime)) {
|
|
49
|
+
auto buff = bufferProp.getObject(runtime);
|
|
50
|
+
auto bytesPerElements =
|
|
51
|
+
obj.getProperty(runtime, "BYTES_PER_ELEMENT").asNumber();
|
|
52
|
+
return createArrayBufferFromJSI(
|
|
53
|
+
runtime, buff.getArrayBuffer(runtime),
|
|
54
|
+
static_cast<size_t>(bytesPerElements));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
throw std::runtime_error("ArrayBuffer::fromJSI: argument is not an object "
|
|
59
|
+
"with an ArrayBuffer 'buffer' property");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static jsi::Value toJSI(jsi::Runtime &runtime,
|
|
63
|
+
std::shared_ptr<ArrayBuffer> arg) {
|
|
64
|
+
return jsi::ArrayBuffer(runtime, arg);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
} // namespace rnwgpu
|