react-native-wgpu 0.5.13 → 0.5.15
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/README.md +4 -398
- package/lib/commonjs/index.js +7 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +4 -4
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/{src → webgpu/src}/Canvas.d.ts +9 -0
- package/lib/typescript/webgpu/src/Canvas.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/NativeWebGPUModule.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/Offscreen.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/WebGPUViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/constants.d.ts +6 -0
- package/lib/typescript/webgpu/src/constants.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/external/ModuleProxy.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/external/index.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/external/reanimated/ReanimatedProxy.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/external/reanimated/index.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/external/reanimated/registerWebGPUForReanimated.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/hooks.d.ts.map +1 -0
- package/lib/typescript/{src → webgpu/src}/index.d.ts +5 -2
- package/lib/typescript/webgpu/src/index.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/install.d.ts +34 -0
- package/lib/typescript/webgpu/src/install.d.ts.map +1 -0
- package/lib/typescript/webgpu/src/main/index.d.ts.map +1 -0
- package/lib/typescript/{src → webgpu/src}/types.d.ts +34 -2
- package/lib/typescript/webgpu/src/types.d.ts.map +1 -0
- package/lib/typescript/{eslint.config.d.mts.map → webgpu-shim/eslint.config.d.mts.map} +1 -1
- package/lib/typescript/{lib → webgpu-shim/lib}/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/webgpu-shim/lib/module/index.d.ts +2 -0
- package/lib/typescript/{lib → webgpu-shim/lib}/module/index.d.ts.map +1 -1
- package/lib/typescript/webgpu-shim/src/index.d.ts +2 -0
- package/lib/typescript/webgpu-shim/src/index.d.ts.map +1 -0
- package/package.json +12 -81
- package/src/index.ts +9 -0
- package/LICENSE +0 -20
- package/android/CMakeLists.txt +0 -110
- package/android/build.gradle +0 -138
- package/android/cpp/AndroidPlatformContext.h +0 -328
- package/android/cpp/cpp-adapter.cpp +0 -71
- package/android/src/main/AndroidManifest.xml +0 -3
- package/android/src/main/java/com/webgpu/WebGPUAHBView.java +0 -298
- package/android/src/main/java/com/webgpu/WebGPUAPI.java +0 -20
- package/android/src/main/java/com/webgpu/WebGPUBaseView.java +0 -61
- package/android/src/main/java/com/webgpu/WebGPUModule.java +0 -50
- package/android/src/main/java/com/webgpu/WebGPUSurfaceView.java +0 -41
- package/android/src/main/java/com/webgpu/WebGPUSurfaceViewWithSC.java +0 -79
- package/android/src/main/java/com/webgpu/WebGPUTextureView.java +0 -46
- package/android/src/main/java/com/webgpu/WebGPUView.java +0 -108
- package/android/src/main/java/com/webgpu/WebGPUViewManager.java +0 -38
- package/android/src/main/java/com/webgpu/WebGPUViewPackage.java +0 -50
- package/android/src/newarch/com/webgpu/WebGPUViewManagerSpec.java +0 -24
- package/apple/ApplePlatformContext.h +0 -44
- package/apple/ApplePlatformContext.mm +0 -302
- package/apple/AppleVideoPlayer.h +0 -31
- package/apple/AppleVideoPlayer.mm +0 -314
- package/apple/MetalView.h +0 -13
- package/apple/MetalView.mm +0 -50
- package/apple/RNWGUIKit.h +0 -16
- package/apple/WebGPUModule.h +0 -13
- package/apple/WebGPUModule.mm +0 -89
- package/apple/WebGPUView.h +0 -12
- package/apple/WebGPUView.mm +0 -66
- package/cpp/WGPULogger.h +0 -100
- package/cpp/dawn_logging.cpp +0 -119
- package/cpp/jsi/EnumMapper.h +0 -45
- package/cpp/jsi/JSIConverter.h +0 -473
- package/cpp/jsi/NativeObject.h +0 -607
- package/cpp/jsi/Promise.cpp +0 -44
- package/cpp/jsi/Promise.h +0 -35
- package/cpp/jsi/RuntimeAwareCache.cpp +0 -7
- package/cpp/jsi/RuntimeAwareCache.h +0 -100
- package/cpp/jsi/RuntimeLifecycleMonitor.cpp +0 -72
- package/cpp/jsi/RuntimeLifecycleMonitor.h +0 -32
- package/cpp/rnwgpu/ArrayBuffer.h +0 -117
- package/cpp/rnwgpu/PlatformContext.h +0 -127
- package/cpp/rnwgpu/RNWebGPUManager.cpp +0 -237
- package/cpp/rnwgpu/RNWebGPUManager.h +0 -46
- package/cpp/rnwgpu/SurfaceRegistry.h +0 -230
- package/cpp/rnwgpu/api/Canvas.h +0 -57
- package/cpp/rnwgpu/api/Convertors.h +0 -783
- package/cpp/rnwgpu/api/External.h +0 -12
- package/cpp/rnwgpu/api/GPU.cpp +0 -154
- package/cpp/rnwgpu/api/GPU.h +0 -58
- package/cpp/rnwgpu/api/GPUAdapter.cpp +0 -267
- package/cpp/rnwgpu/api/GPUAdapter.h +0 -59
- 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 -97
- package/cpp/rnwgpu/api/GPUBuffer.h +0 -87
- package/cpp/rnwgpu/api/GPUCanvasContext.cpp +0 -67
- package/cpp/rnwgpu/api/GPUCanvasContext.h +0 -66
- 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 -545
- package/cpp/rnwgpu/api/GPUDevice.h +0 -265
- 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 -335
- package/cpp/rnwgpu/api/GPUExternalTexture.h +0 -90
- package/cpp/rnwgpu/api/GPUFeatures.h +0 -206
- 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 -169
- package/cpp/rnwgpu/api/GPUQueue.h +0 -81
- 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 -50
- package/cpp/rnwgpu/api/GPUShaderModule.h +0 -66
- package/cpp/rnwgpu/api/GPUSharedTextureMemory.cpp +0 -80
- package/cpp/rnwgpu/api/GPUSharedTextureMemory.h +0 -71
- 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 -71
- package/cpp/rnwgpu/api/GPUValidationError.h +0 -32
- package/cpp/rnwgpu/api/ImageBitmap.h +0 -48
- package/cpp/rnwgpu/api/RNWebGPU.h +0 -241
- package/cpp/rnwgpu/api/RnFeatures.h +0 -53
- package/cpp/rnwgpu/api/VideoFrame.h +0 -76
- package/cpp/rnwgpu/api/VideoPlayer.h +0 -69
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupDescriptor.h +0 -65
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupEntry.h +0 -81
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutDescriptor.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUBindGroupLayoutEntry.h +0 -98
- package/cpp/rnwgpu/api/descriptors/GPUBlendComponent.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPUBlendState.h +0 -53
- package/cpp/rnwgpu/api/descriptors/GPUBufferBinding.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUBufferBindingLayout.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUBufferDescriptor.h +0 -60
- 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 -67
- package/cpp/rnwgpu/api/descriptors/GPUColorTargetState.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPUColorWrite.h +0 -29
- package/cpp/rnwgpu/api/descriptors/GPUCommandBufferDescriptor.h +0 -46
- package/cpp/rnwgpu/api/descriptors/GPUCommandEncoderDescriptor.h +0 -46
- package/cpp/rnwgpu/api/descriptors/GPUComputePassDescriptor.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUComputePassTimestampWrites.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPUComputePipelineDescriptor.h +0 -68
- package/cpp/rnwgpu/api/descriptors/GPUDawnTogglesDescriptor.h +0 -57
- package/cpp/rnwgpu/api/descriptors/GPUDepthStencilState.h +0 -104
- package/cpp/rnwgpu/api/descriptors/GPUDeviceDescriptor.h +0 -115
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureBindingLayout.h +0 -39
- package/cpp/rnwgpu/api/descriptors/GPUExternalTextureDescriptor.h +0 -82
- package/cpp/rnwgpu/api/descriptors/GPUFragmentState.h +0 -74
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyBuffer.h +0 -63
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyExternalImage.h +0 -63
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTexture.h +0 -66
- package/cpp/rnwgpu/api/descriptors/GPUImageCopyTextureTagged.h +0 -82
- package/cpp/rnwgpu/api/descriptors/GPUImageDataLayout.h +0 -55
- package/cpp/rnwgpu/api/descriptors/GPUMapMode.h +0 -22
- package/cpp/rnwgpu/api/descriptors/GPUMultisampleState.h +0 -55
- package/cpp/rnwgpu/api/descriptors/GPUPipelineLayoutDescriptor.h +0 -58
- package/cpp/rnwgpu/api/descriptors/GPUPrimitiveState.h +0 -70
- package/cpp/rnwgpu/api/descriptors/GPUProgrammableStage.h +0 -62
- package/cpp/rnwgpu/api/descriptors/GPUQuerySetDescriptor.h +0 -56
- package/cpp/rnwgpu/api/descriptors/GPUQueueDescriptor.h +0 -44
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleDescriptor.h +0 -46
- package/cpp/rnwgpu/api/descriptors/GPURenderBundleEncoderDescriptor.h +0 -81
- package/cpp/rnwgpu/api/descriptors/GPURenderPassColorAttachment.h +0 -82
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDepthStencilAttachment.h +0 -102
- package/cpp/rnwgpu/api/descriptors/GPURenderPassDescriptor.h +0 -93
- package/cpp/rnwgpu/api/descriptors/GPURenderPassTimestampWrites.h +0 -59
- package/cpp/rnwgpu/api/descriptors/GPURenderPipelineDescriptor.h +0 -104
- package/cpp/rnwgpu/api/descriptors/GPURequestAdapterOptions.h +0 -52
- package/cpp/rnwgpu/api/descriptors/GPUSamplerBindingLayout.h +0 -46
- package/cpp/rnwgpu/api/descriptors/GPUSamplerDescriptor.h +0 -111
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleCompilationHint.h +0 -61
- package/cpp/rnwgpu/api/descriptors/GPUShaderModuleDescriptor.h +0 -63
- package/cpp/rnwgpu/api/descriptors/GPUShaderStage.h +0 -25
- package/cpp/rnwgpu/api/descriptors/GPUSharedTextureMemoryDescriptor.h +0 -62
- package/cpp/rnwgpu/api/descriptors/GPUStencilFaceState.h +0 -65
- package/cpp/rnwgpu/api/descriptors/GPUStorageTextureBindingLayout.h +0 -60
- package/cpp/rnwgpu/api/descriptors/GPUTextureBindingLayout.h +0 -60
- package/cpp/rnwgpu/api/descriptors/GPUTextureDescriptor.h +0 -92
- package/cpp/rnwgpu/api/descriptors/GPUTextureUsage.h +0 -29
- package/cpp/rnwgpu/api/descriptors/GPUTextureViewDescriptor.h +0 -92
- package/cpp/rnwgpu/api/descriptors/GPUUncapturedErrorEventInit.h +0 -65
- package/cpp/rnwgpu/api/descriptors/GPUVertexAttribute.h +0 -54
- package/cpp/rnwgpu/api/descriptors/GPUVertexBufferLayout.h +0 -63
- package/cpp/rnwgpu/api/descriptors/GPUVertexState.h +0 -74
- package/cpp/rnwgpu/api/descriptors/Unions.h +0 -1979
- package/cpp/rnwgpu/async/AsyncDispatcher.h +0 -28
- package/cpp/rnwgpu/async/AsyncRunner.cpp +0 -215
- package/cpp/rnwgpu/async/AsyncRunner.h +0 -53
- package/cpp/rnwgpu/async/AsyncTaskHandle.cpp +0 -181
- package/cpp/rnwgpu/async/AsyncTaskHandle.h +0 -55
- package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.cpp +0 -23
- package/cpp/rnwgpu/async/JSIMicrotaskDispatcher.h +0 -22
- package/cpp/webgpu/webgpu.h +0 -4979
- package/cpp/webgpu/webgpu_cpp.h +0 -10059
- package/cpp/webgpu/webgpu_cpp_chained_struct.h +0 -57
- package/cpp/webgpu/webgpu_cpp_print.h +0 -2844
- package/cpp/webgpu/webgpu_enum_class_bitmasks.h +0 -161
- package/lib/commonjs/Canvas.js +0 -55
- package/lib/commonjs/Canvas.js.map +0 -1
- package/lib/commonjs/NativeWebGPUModule.js +0 -10
- package/lib/commonjs/NativeWebGPUModule.js.map +0 -1
- package/lib/commonjs/Offscreen.js +0 -103
- package/lib/commonjs/Offscreen.js.map +0 -1
- package/lib/commonjs/WebGPUViewNativeComponent.js +0 -10
- package/lib/commonjs/WebGPUViewNativeComponent.js.map +0 -1
- package/lib/commonjs/WebGPUViewNativeComponent.web.js +0 -103
- package/lib/commonjs/WebGPUViewNativeComponent.web.js.map +0 -1
- package/lib/commonjs/WebPolyfillGPUModule.js +0 -40
- package/lib/commonjs/WebPolyfillGPUModule.js.map +0 -1
- package/lib/commonjs/external/ModuleProxy.js +0 -36
- package/lib/commonjs/external/ModuleProxy.js.map +0 -1
- package/lib/commonjs/external/index.js +0 -17
- package/lib/commonjs/external/index.js.map +0 -1
- package/lib/commonjs/external/reanimated/ReanimatedProxy.js +0 -18
- package/lib/commonjs/external/reanimated/ReanimatedProxy.js.map +0 -1
- package/lib/commonjs/external/reanimated/index.js +0 -21
- package/lib/commonjs/external/reanimated/index.js.map +0 -1
- package/lib/commonjs/external/reanimated/registerWebGPUForReanimated.js +0 -49
- package/lib/commonjs/external/reanimated/registerWebGPUForReanimated.js.map +0 -1
- package/lib/commonjs/hooks.js +0 -83
- package/lib/commonjs/hooks.js.map +0 -1
- package/lib/commonjs/main/index.js +0 -91
- package/lib/commonjs/main/index.js.map +0 -1
- package/lib/commonjs/main/index.web.js +0 -51
- package/lib/commonjs/main/index.web.js.map +0 -1
- package/lib/commonjs/types.js +0 -2
- package/lib/commonjs/types.js.map +0 -1
- package/lib/commonjs/utils.js +0 -11
- package/lib/commonjs/utils.js.map +0 -1
- package/lib/module/Canvas.js +0 -46
- package/lib/module/Canvas.js.map +0 -1
- package/lib/module/NativeWebGPUModule.js +0 -4
- package/lib/module/NativeWebGPUModule.js.map +0 -1
- package/lib/module/Offscreen.js +0 -96
- package/lib/module/Offscreen.js.map +0 -1
- package/lib/module/WebGPUViewNativeComponent.js +0 -4
- package/lib/module/WebGPUViewNativeComponent.js.map +0 -1
- package/lib/module/WebGPUViewNativeComponent.web.js +0 -96
- package/lib/module/WebGPUViewNativeComponent.web.js.map +0 -1
- package/lib/module/WebPolyfillGPUModule.js +0 -38
- package/lib/module/WebPolyfillGPUModule.js.map +0 -1
- package/lib/module/external/ModuleProxy.js +0 -28
- package/lib/module/external/ModuleProxy.js.map +0 -1
- package/lib/module/external/index.js +0 -2
- package/lib/module/external/index.js.map +0 -1
- package/lib/module/external/reanimated/ReanimatedProxy.js +0 -12
- package/lib/module/external/reanimated/ReanimatedProxy.js.map +0 -1
- package/lib/module/external/reanimated/index.js +0 -3
- package/lib/module/external/reanimated/index.js.map +0 -1
- package/lib/module/external/reanimated/registerWebGPUForReanimated.js +0 -42
- package/lib/module/external/reanimated/registerWebGPUForReanimated.js.map +0 -1
- package/lib/module/hooks.js +0 -70
- package/lib/module/hooks.js.map +0 -1
- package/lib/module/main/index.js +0 -33
- package/lib/module/main/index.js.map +0 -1
- package/lib/module/main/index.web.js +0 -8
- package/lib/module/main/index.web.js.map +0 -1
- package/lib/module/types.js +0 -2
- package/lib/module/types.js.map +0 -1
- package/lib/module/utils.js +0 -5
- package/lib/module/utils.js.map +0 -1
- package/lib/typescript/babel.config.d.ts +0 -3
- package/lib/typescript/babel.config.d.ts.map +0 -1
- package/lib/typescript/jest.config.d.ts +0 -9
- package/lib/typescript/jest.config.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/Canvas.d.ts +0 -7
- package/lib/typescript/lib/commonjs/Canvas.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/NativeWebGPUModule.d.ts +0 -5
- package/lib/typescript/lib/commonjs/NativeWebGPUModule.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/Offscreen.d.ts +0 -26
- package/lib/typescript/lib/commonjs/Offscreen.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.d.ts +0 -5
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.web.d.ts +0 -4
- package/lib/typescript/lib/commonjs/WebGPUViewNativeComponent.web.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/WebPolyfillGPUModule.d.ts +0 -2
- package/lib/typescript/lib/commonjs/WebPolyfillGPUModule.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/external/ModuleProxy.d.ts +0 -12
- package/lib/typescript/lib/commonjs/external/ModuleProxy.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/external/index.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/external/reanimated/ReanimatedProxy.d.ts +0 -6
- package/lib/typescript/lib/commonjs/external/reanimated/ReanimatedProxy.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/external/reanimated/index.d.ts +0 -4
- package/lib/typescript/lib/commonjs/external/reanimated/index.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/external/reanimated/registerWebGPUForReanimated.d.ts +0 -9
- package/lib/typescript/lib/commonjs/external/reanimated/registerWebGPUForReanimated.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/hooks.d.ts +0 -18
- package/lib/typescript/lib/commonjs/hooks.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/index.d.ts +0 -2
- package/lib/typescript/lib/commonjs/main/index.d.ts +0 -3
- package/lib/typescript/lib/commonjs/main/index.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/main/index.web.d.ts +0 -2
- package/lib/typescript/lib/commonjs/main/index.web.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/types.d.ts +0 -1
- package/lib/typescript/lib/commonjs/types.d.ts.map +0 -1
- package/lib/typescript/lib/commonjs/utils.d.ts +0 -3
- package/lib/typescript/lib/commonjs/utils.d.ts.map +0 -1
- package/lib/typescript/lib/module/Canvas.d.ts +0 -8
- package/lib/typescript/lib/module/Canvas.d.ts.map +0 -1
- package/lib/typescript/lib/module/NativeWebGPUModule.d.ts +0 -3
- package/lib/typescript/lib/module/NativeWebGPUModule.d.ts.map +0 -1
- package/lib/typescript/lib/module/Offscreen.d.ts +0 -25
- package/lib/typescript/lib/module/Offscreen.d.ts.map +0 -1
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.d.ts +0 -3
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.d.ts.map +0 -1
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.web.d.ts +0 -3
- package/lib/typescript/lib/module/WebGPUViewNativeComponent.web.d.ts.map +0 -1
- package/lib/typescript/lib/module/WebPolyfillGPUModule.d.ts +0 -2
- package/lib/typescript/lib/module/WebPolyfillGPUModule.d.ts.map +0 -1
- package/lib/typescript/lib/module/external/ModuleProxy.d.ts +0 -7
- package/lib/typescript/lib/module/external/ModuleProxy.d.ts.map +0 -1
- package/lib/typescript/lib/module/external/index.d.ts.map +0 -1
- package/lib/typescript/lib/module/external/reanimated/ReanimatedProxy.d.ts +0 -5
- package/lib/typescript/lib/module/external/reanimated/ReanimatedProxy.d.ts.map +0 -1
- package/lib/typescript/lib/module/external/reanimated/index.d.ts.map +0 -1
- package/lib/typescript/lib/module/external/reanimated/registerWebGPUForReanimated.d.ts +0 -2
- package/lib/typescript/lib/module/external/reanimated/registerWebGPUForReanimated.d.ts.map +0 -1
- package/lib/typescript/lib/module/hooks.d.ts +0 -18
- package/lib/typescript/lib/module/hooks.d.ts.map +0 -1
- package/lib/typescript/lib/module/index.d.ts +0 -2
- package/lib/typescript/lib/module/main/index.d.ts.map +0 -1
- package/lib/typescript/lib/module/main/index.web.d.ts +0 -5
- package/lib/typescript/lib/module/main/index.web.d.ts.map +0 -1
- package/lib/typescript/lib/module/types.d.ts +0 -1
- package/lib/typescript/lib/module/types.d.ts.map +0 -1
- package/lib/typescript/lib/module/utils.d.ts +0 -2
- package/lib/typescript/lib/module/utils.d.ts.map +0 -1
- package/lib/typescript/src/Canvas.d.ts.map +0 -1
- package/lib/typescript/src/NativeWebGPUModule.d.ts.map +0 -1
- package/lib/typescript/src/Offscreen.d.ts.map +0 -1
- package/lib/typescript/src/WebGPUViewNativeComponent.d.ts.map +0 -1
- package/lib/typescript/src/WebGPUViewNativeComponent.web.d.ts +0 -9
- package/lib/typescript/src/WebGPUViewNativeComponent.web.d.ts.map +0 -1
- package/lib/typescript/src/WebPolyfillGPUModule.d.ts +0 -2
- package/lib/typescript/src/WebPolyfillGPUModule.d.ts.map +0 -1
- package/lib/typescript/src/external/ModuleProxy.d.ts.map +0 -1
- package/lib/typescript/src/external/index.d.ts +0 -2
- package/lib/typescript/src/external/index.d.ts.map +0 -1
- package/lib/typescript/src/external/reanimated/ReanimatedProxy.d.ts.map +0 -1
- package/lib/typescript/src/external/reanimated/index.d.ts +0 -3
- package/lib/typescript/src/external/reanimated/index.d.ts.map +0 -1
- package/lib/typescript/src/external/reanimated/registerWebGPUForReanimated.d.ts.map +0 -1
- package/lib/typescript/src/hooks.d.ts.map +0 -1
- package/lib/typescript/src/index.d.ts.map +0 -1
- package/lib/typescript/src/main/index.d.ts +0 -6
- package/lib/typescript/src/main/index.d.ts.map +0 -1
- package/lib/typescript/src/main/index.web.d.ts +0 -6
- package/lib/typescript/src/main/index.web.d.ts.map +0 -1
- package/lib/typescript/src/types.d.ts.map +0 -1
- package/lib/typescript/src/utils.d.ts +0 -2
- package/lib/typescript/src/utils.d.ts.map +0 -1
- package/libs/android/arm64-v8a/libwebgpu_dawn.so +0 -0
- package/libs/android/armeabi-v7a/libwebgpu_dawn.so +0 -0
- package/libs/android/x86/libwebgpu_dawn.so +0 -0
- package/libs/android/x86_64/libwebgpu_dawn.so +0 -0
- package/libs/apple/libwebgpu_dawn.xcframework/Info.plist +0 -59
- package/libs/apple/libwebgpu_dawn.xcframework/ios-arm64/libwebgpu_dawn.a +0 -0
- package/libs/apple/libwebgpu_dawn.xcframework/ios-arm64_x86_64-simulator/libwebgpu_dawn.a +0 -0
- package/libs/apple/libwebgpu_dawn.xcframework/macos-arm64_x86_64/libwebgpu_dawn.a +0 -0
- package/react-native-wgpu.podspec +0 -47
- package/src/Canvas.tsx +0 -76
- package/src/NativeWebGPUModule.ts +0 -9
- package/src/Offscreen.ts +0 -113
- package/src/WebGPUViewNativeComponent.ts +0 -11
- package/src/WebGPUViewNativeComponent.web.ts +0 -113
- package/src/WebPolyfillGPUModule.ts +0 -53
- package/src/external/ModuleProxy.ts +0 -30
- package/src/external/index.ts +0 -1
- package/src/external/reanimated/ReanimatedProxy.ts +0 -19
- package/src/external/reanimated/index.ts +0 -2
- package/src/external/reanimated/registerWebGPUForReanimated.ts +0 -43
- package/src/hooks.tsx +0 -93
- package/src/index.tsx +0 -91
- package/src/main/index.tsx +0 -40
- package/src/main/index.web.tsx +0 -8
- package/src/types.ts +0 -102
- package/src/utils.ts +0 -4
- /package/lib/typescript/{src → webgpu/src}/NativeWebGPUModule.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/Offscreen.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/WebGPUViewNativeComponent.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/external/ModuleProxy.d.ts +0 -0
- /package/lib/typescript/{lib/module → webgpu/src}/external/index.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/external/reanimated/ReanimatedProxy.d.ts +0 -0
- /package/lib/typescript/{lib/module → webgpu/src}/external/reanimated/index.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/external/reanimated/registerWebGPUForReanimated.d.ts +0 -0
- /package/lib/typescript/{src → webgpu/src}/hooks.d.ts +0 -0
- /package/lib/typescript/{lib/module → webgpu/src}/main/index.d.ts +0 -0
- /package/lib/typescript/{eslint.config.d.mts → webgpu-shim/eslint.config.d.mts} +0 -0
- /package/lib/typescript/{lib/commonjs/external → webgpu-shim/lib/commonjs}/index.d.ts +0 -0
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
#include "ApplePlatformContext.h"
|
|
2
|
-
|
|
3
|
-
#include <TargetConditionals.h>
|
|
4
|
-
|
|
5
|
-
#import <AVFoundation/AVFoundation.h>
|
|
6
|
-
#import <CoreVideo/CoreVideo.h>
|
|
7
|
-
#import <React/RCTBlobManager.h>
|
|
8
|
-
#import <React/RCTBridge+Private.h>
|
|
9
|
-
#import <ReactCommon/RCTTurboModule.h>
|
|
10
|
-
|
|
11
|
-
#include "AppleVideoPlayer.h"
|
|
12
|
-
|
|
13
|
-
#include "RNWebGPUManager.h"
|
|
14
|
-
#include "WebGPUModule.h"
|
|
15
|
-
|
|
16
|
-
namespace rnwgpu {
|
|
17
|
-
|
|
18
|
-
void checkIfUsingSimulatorWithAPIValidation() {
|
|
19
|
-
#if TARGET_OS_SIMULATOR
|
|
20
|
-
NSDictionary *environment = [[NSProcessInfo processInfo] environment];
|
|
21
|
-
NSString *metalDeviceWrapperType = environment[@"METAL_DEVICE_WRAPPER_TYPE"];
|
|
22
|
-
|
|
23
|
-
if ([metalDeviceWrapperType isEqualToString:@"1"]) {
|
|
24
|
-
throw std::runtime_error(
|
|
25
|
-
"To use React Native WebGPU project on the iOS simulator, you need to "
|
|
26
|
-
"disable the Metal validation API. In 'Edit Scheme,' uncheck 'Metal "
|
|
27
|
-
"Validation.'");
|
|
28
|
-
}
|
|
29
|
-
#endif
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
ApplePlatformContext::ApplePlatformContext() {
|
|
33
|
-
checkIfUsingSimulatorWithAPIValidation();
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
wgpu::Surface ApplePlatformContext::makeSurface(wgpu::Instance instance,
|
|
37
|
-
void *surface, int width,
|
|
38
|
-
int height) {
|
|
39
|
-
wgpu::SurfaceSourceMetalLayer metalSurfaceDesc;
|
|
40
|
-
metalSurfaceDesc.layer = surface;
|
|
41
|
-
wgpu::SurfaceDescriptor surfaceDescriptor;
|
|
42
|
-
surfaceDescriptor.nextInChain = &metalSurfaceDesc;
|
|
43
|
-
return instance.CreateSurface(&surfaceDescriptor);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
static std::span<const uint8_t> nsDataToSpan(NSData *data) {
|
|
47
|
-
return {static_cast<const uint8_t *>(data.bytes), data.length};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
ImageData ApplePlatformContext::createImageBitmap(std::string blobId,
|
|
51
|
-
double offset, double size) {
|
|
52
|
-
RCTBlobManager *blobManager =
|
|
53
|
-
[[RCTBridge currentBridge] moduleForClass:RCTBlobManager.class];
|
|
54
|
-
NSData *blobData =
|
|
55
|
-
[blobManager resolve:[NSString stringWithUTF8String:blobId.c_str()]
|
|
56
|
-
offset:(long)offset
|
|
57
|
-
size:(long)size];
|
|
58
|
-
|
|
59
|
-
if (!blobData) {
|
|
60
|
-
throw std::runtime_error("Couldn't retrieve blob data");
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return createImageBitmapFromData(nsDataToSpan(blobData));
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
void ApplePlatformContext::createImageBitmapAsync(
|
|
67
|
-
std::string blobId, double offset, double size,
|
|
68
|
-
std::function<void(ImageData)> onSuccess,
|
|
69
|
-
std::function<void(std::string)> onError) {
|
|
70
|
-
// Resolve blob on current thread (requires RCTBridge access)
|
|
71
|
-
RCTBlobManager *blobManager =
|
|
72
|
-
[[RCTBridge currentBridge] moduleForClass:RCTBlobManager.class];
|
|
73
|
-
NSData *blobData =
|
|
74
|
-
[blobManager resolve:[NSString stringWithUTF8String:blobId.c_str()]
|
|
75
|
-
offset:(long)offset
|
|
76
|
-
size:(long)size];
|
|
77
|
-
|
|
78
|
-
if (!blobData) {
|
|
79
|
-
onError("Couldn't retrieve blob data");
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// blobData is alive during this synchronous call;
|
|
84
|
-
// createImageBitmapFromDataAsync copies the span before dispatching
|
|
85
|
-
createImageBitmapFromDataAsync(nsDataToSpan(blobData), std::move(onSuccess),
|
|
86
|
-
std::move(onError));
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
ImageData
|
|
90
|
-
ApplePlatformContext::createImageBitmapFromData(std::span<const uint8_t> data) {
|
|
91
|
-
// This avoids a copy by assuming the UIImage/NSImage constructors
|
|
92
|
-
// decode `nsData` eagerly before the memory for the wrapped `data`
|
|
93
|
-
// is freed.
|
|
94
|
-
//
|
|
95
|
-
// Since we get the `CGImageRef` from `image` and then throw
|
|
96
|
-
// it away, that's a fairly safe assumption.
|
|
97
|
-
NSData *nsData =
|
|
98
|
-
[NSData dataWithBytesNoCopy:const_cast<uint8_t *>(data.data())
|
|
99
|
-
length:data.size()
|
|
100
|
-
freeWhenDone:NO];
|
|
101
|
-
|
|
102
|
-
#if !TARGET_OS_OSX
|
|
103
|
-
UIImage *image = [UIImage imageWithData:nsData];
|
|
104
|
-
#else
|
|
105
|
-
NSImage *image = [[NSImage alloc] initWithData:nsData];
|
|
106
|
-
#endif
|
|
107
|
-
if (!image) {
|
|
108
|
-
throw std::runtime_error("Couldn't decode image");
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
#if !TARGET_OS_OSX
|
|
112
|
-
CGImageRef cgImage = image.CGImage;
|
|
113
|
-
#else
|
|
114
|
-
CGImageRef cgImage = [image CGImageForProposedRect:NULL
|
|
115
|
-
context:NULL
|
|
116
|
-
hints:NULL];
|
|
117
|
-
#endif
|
|
118
|
-
size_t width = CGImageGetWidth(cgImage);
|
|
119
|
-
size_t height = CGImageGetHeight(cgImage);
|
|
120
|
-
size_t bitsPerComponent = 8;
|
|
121
|
-
size_t bytesPerRow = width * 4;
|
|
122
|
-
|
|
123
|
-
ImageData result;
|
|
124
|
-
result.width = static_cast<int>(width);
|
|
125
|
-
result.height = static_cast<int>(height);
|
|
126
|
-
result.data.resize(height * bytesPerRow);
|
|
127
|
-
result.format = wgpu::TextureFormat::RGBA8Unorm;
|
|
128
|
-
|
|
129
|
-
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
|
130
|
-
CGContextRef context = CGBitmapContextCreate(
|
|
131
|
-
result.data.data(), width, height, bitsPerComponent, bytesPerRow,
|
|
132
|
-
colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
|
|
133
|
-
|
|
134
|
-
CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);
|
|
135
|
-
|
|
136
|
-
CGContextRelease(context);
|
|
137
|
-
CGColorSpaceRelease(colorSpace);
|
|
138
|
-
|
|
139
|
-
return result;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
void ApplePlatformContext::createImageBitmapFromDataAsync(
|
|
143
|
-
std::span<const uint8_t> data, std::function<void(ImageData)> onSuccess,
|
|
144
|
-
std::function<void(std::string)> onError) {
|
|
145
|
-
// Copy span data into shared_ptr so the dispatch_async block owns the memory
|
|
146
|
-
auto ownedData =
|
|
147
|
-
std::make_shared<std::vector<uint8_t>>(data.begin(), data.end());
|
|
148
|
-
|
|
149
|
-
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
|
|
150
|
-
@autoreleasepool {
|
|
151
|
-
try {
|
|
152
|
-
auto result = createImageBitmapFromData(*ownedData);
|
|
153
|
-
onSuccess(std::move(result));
|
|
154
|
-
} catch (const std::exception &e) {
|
|
155
|
-
onError(e.what());
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
VideoFrameHandle
|
|
162
|
-
ApplePlatformContext::loadVideoFrame(const std::string &path) {
|
|
163
|
-
NSString *nsPath = [NSString stringWithUTF8String:path.c_str()];
|
|
164
|
-
NSURL *url = [nsPath hasPrefix:@"file://"]
|
|
165
|
-
? [NSURL URLWithString:nsPath]
|
|
166
|
-
: [NSURL fileURLWithPath:nsPath];
|
|
167
|
-
AVURLAsset *asset = [AVURLAsset assetWithURL:url];
|
|
168
|
-
|
|
169
|
-
NSArray<AVAssetTrack *> *videoTracks =
|
|
170
|
-
[asset tracksWithMediaType:AVMediaTypeVideo];
|
|
171
|
-
if (videoTracks.count == 0) {
|
|
172
|
-
throw std::runtime_error("loadVideoFrame: no video track in file");
|
|
173
|
-
}
|
|
174
|
-
AVAssetTrack *videoTrack = videoTracks.firstObject;
|
|
175
|
-
|
|
176
|
-
NSError *error = nil;
|
|
177
|
-
AVAssetReader *reader = [AVAssetReader assetReaderWithAsset:asset
|
|
178
|
-
error:&error];
|
|
179
|
-
if (error || !reader) {
|
|
180
|
-
throw std::runtime_error(
|
|
181
|
-
std::string("loadVideoFrame: AVAssetReader init failed: ") +
|
|
182
|
-
[[error localizedDescription] UTF8String]);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
NSDictionary *outputSettings = @{
|
|
186
|
-
(NSString *)kCVPixelBufferPixelFormatTypeKey :
|
|
187
|
-
@(kCVPixelFormatType_32BGRA),
|
|
188
|
-
(NSString *)kCVPixelBufferIOSurfacePropertiesKey : @{},
|
|
189
|
-
(NSString *)kCVPixelBufferMetalCompatibilityKey : @YES,
|
|
190
|
-
};
|
|
191
|
-
AVAssetReaderTrackOutput *output =
|
|
192
|
-
[AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:videoTrack
|
|
193
|
-
outputSettings:outputSettings];
|
|
194
|
-
output.alwaysCopiesSampleData = NO;
|
|
195
|
-
if (![reader canAddOutput:output]) {
|
|
196
|
-
throw std::runtime_error("loadVideoFrame: cannot add output");
|
|
197
|
-
}
|
|
198
|
-
[reader addOutput:output];
|
|
199
|
-
|
|
200
|
-
if (![reader startReading]) {
|
|
201
|
-
throw std::runtime_error(
|
|
202
|
-
std::string("loadVideoFrame: startReading failed: ") +
|
|
203
|
-
[[reader.error localizedDescription] UTF8String]);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
CMSampleBufferRef sampleBuffer = [output copyNextSampleBuffer];
|
|
207
|
-
if (!sampleBuffer) {
|
|
208
|
-
throw std::runtime_error("loadVideoFrame: no sample buffer");
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
|
|
212
|
-
if (!pixelBuffer) {
|
|
213
|
-
CFRelease(sampleBuffer);
|
|
214
|
-
throw std::runtime_error("loadVideoFrame: no pixel buffer");
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
IOSurfaceRef ioSurface = CVPixelBufferGetIOSurface(pixelBuffer);
|
|
218
|
-
if (!ioSurface) {
|
|
219
|
-
CFRelease(sampleBuffer);
|
|
220
|
-
throw std::runtime_error(
|
|
221
|
-
"loadVideoFrame: pixel buffer is not IOSurface-backed");
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// Retain the IOSurface so it survives past the sample buffer's lifetime.
|
|
225
|
-
CFRetain(ioSurface);
|
|
226
|
-
|
|
227
|
-
VideoFrameHandle handle;
|
|
228
|
-
handle.handle = (void *)ioSurface;
|
|
229
|
-
handle.width = static_cast<uint32_t>(CVPixelBufferGetWidth(pixelBuffer));
|
|
230
|
-
handle.height = static_cast<uint32_t>(CVPixelBufferGetHeight(pixelBuffer));
|
|
231
|
-
handle.deleter = [ioSurface]() { CFRelease(ioSurface); };
|
|
232
|
-
|
|
233
|
-
CFRelease(sampleBuffer);
|
|
234
|
-
[reader cancelReading];
|
|
235
|
-
|
|
236
|
-
return handle;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
std::unique_ptr<IVideoPlayer>
|
|
240
|
-
ApplePlatformContext::createVideoPlayer(const std::string &path,
|
|
241
|
-
VideoPixelFormat format) {
|
|
242
|
-
return createAppleVideoPlayer(path, format);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
std::string ApplePlatformContext::writeTestVideoFile() {
|
|
246
|
-
return writeAppleTestVideoFile();
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
VideoFrameHandle ApplePlatformContext::wrapNativeBuffer(void *pointer) {
|
|
250
|
-
return wrapCVPixelBuffer(static_cast<CVPixelBufferRef>(pointer));
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
VideoFrameHandle
|
|
254
|
-
ApplePlatformContext::createTestVideoFrame(uint32_t width, uint32_t height) {
|
|
255
|
-
NSDictionary *attrs = @{
|
|
256
|
-
(NSString *)kCVPixelBufferIOSurfacePropertiesKey : @{},
|
|
257
|
-
(NSString *)kCVPixelBufferMetalCompatibilityKey : @YES,
|
|
258
|
-
};
|
|
259
|
-
CVPixelBufferRef pixelBuffer = NULL;
|
|
260
|
-
CVReturn err = CVPixelBufferCreate(
|
|
261
|
-
kCFAllocatorDefault, width, height, kCVPixelFormatType_32BGRA,
|
|
262
|
-
(__bridge CFDictionaryRef)attrs, &pixelBuffer);
|
|
263
|
-
if (err != kCVReturnSuccess || !pixelBuffer) {
|
|
264
|
-
throw std::runtime_error("createTestVideoFrame: CVPixelBufferCreate "
|
|
265
|
-
"failed");
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
|
|
269
|
-
uint8_t *base =
|
|
270
|
-
static_cast<uint8_t *>(CVPixelBufferGetBaseAddress(pixelBuffer));
|
|
271
|
-
size_t rowBytes = CVPixelBufferGetBytesPerRow(pixelBuffer);
|
|
272
|
-
for (uint32_t y = 0; y < height; ++y) {
|
|
273
|
-
uint8_t *row = base + y * rowBytes;
|
|
274
|
-
for (uint32_t x = 0; x < width; ++x) {
|
|
275
|
-
// RGB gradient + diagonal stripes, in BGRA byte order.
|
|
276
|
-
uint8_t r = static_cast<uint8_t>((x * 255) / std::max(width - 1, 1u));
|
|
277
|
-
uint8_t g = static_cast<uint8_t>((y * 255) / std::max(height - 1, 1u));
|
|
278
|
-
uint8_t b = static_cast<uint8_t>(((x + y) & 0x20) ? 220 : 30);
|
|
279
|
-
row[x * 4 + 0] = b;
|
|
280
|
-
row[x * 4 + 1] = g;
|
|
281
|
-
row[x * 4 + 2] = r;
|
|
282
|
-
row[x * 4 + 3] = 0xFF;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
|
|
286
|
-
|
|
287
|
-
IOSurfaceRef ioSurface = CVPixelBufferGetIOSurface(pixelBuffer);
|
|
288
|
-
if (!ioSurface) {
|
|
289
|
-
CFRelease(pixelBuffer);
|
|
290
|
-
throw std::runtime_error(
|
|
291
|
-
"createTestVideoFrame: pixel buffer is not IOSurface-backed");
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
VideoFrameHandle handle;
|
|
295
|
-
handle.handle = (void *)ioSurface;
|
|
296
|
-
handle.width = width;
|
|
297
|
-
handle.height = height;
|
|
298
|
-
handle.deleter = [pixelBuffer]() { CFRelease(pixelBuffer); };
|
|
299
|
-
return handle;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
} // namespace rnwgpu
|
package/apple/AppleVideoPlayer.h
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "PlatformContext.h"
|
|
4
|
-
|
|
5
|
-
#include <memory>
|
|
6
|
-
#include <string>
|
|
7
|
-
|
|
8
|
-
#ifdef __OBJC__
|
|
9
|
-
#import <CoreVideo/CoreVideo.h>
|
|
10
|
-
#endif
|
|
11
|
-
|
|
12
|
-
namespace rnwgpu {
|
|
13
|
-
|
|
14
|
-
// Factory: creates a new IVideoPlayer backed by AVPlayer +
|
|
15
|
-
// AVPlayerItemVideoOutput. `format` selects the surface layout.
|
|
16
|
-
std::unique_ptr<IVideoPlayer>
|
|
17
|
-
createAppleVideoPlayer(const std::string &path, VideoPixelFormat format);
|
|
18
|
-
|
|
19
|
-
// Generate a small procedurally-animated test video and write it to a
|
|
20
|
-
// temporary file. Returns the absolute path. Used by the SharedTextureMemory
|
|
21
|
-
// example so it doesn't need a bundled .mp4.
|
|
22
|
-
std::string writeAppleTestVideoFile();
|
|
23
|
-
|
|
24
|
-
#ifdef __OBJC__
|
|
25
|
-
// Build a VideoFrameHandle from an existing CVPixelBuffer. CFRetains the
|
|
26
|
-
// pixel buffer so the caller can release their reference immediately. Reads
|
|
27
|
-
// IOSurface, dimensions, pixel format, and YUV matrix off the buffer.
|
|
28
|
-
VideoFrameHandle wrapCVPixelBuffer(CVPixelBufferRef pixelBuffer);
|
|
29
|
-
#endif
|
|
30
|
-
|
|
31
|
-
} // namespace rnwgpu
|
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
#include "AppleVideoPlayer.h"
|
|
2
|
-
|
|
3
|
-
#import <AVFoundation/AVFoundation.h>
|
|
4
|
-
#import <CoreVideo/CoreVideo.h>
|
|
5
|
-
|
|
6
|
-
#include <stdexcept>
|
|
7
|
-
|
|
8
|
-
namespace rnwgpu {
|
|
9
|
-
|
|
10
|
-
namespace {
|
|
11
|
-
|
|
12
|
-
// 3x4 row-major matrices mapping [Y, Cb, Cr, 1] to gamma-encoded R'G'B' (NOT
|
|
13
|
-
// linear): YCbCr is derived from gamma-encoded RGB, so this conversion stays in
|
|
14
|
-
// the encoded domain. The sRGB decode in srcTransferFunctionParameters
|
|
15
|
-
// linearizes afterward (see GPUExternalTexture.cpp). Limited-range (video
|
|
16
|
-
// range) means luma is 16..235, chroma is 16..240 (8-bit).
|
|
17
|
-
// Reference: https://en.wikipedia.org/wiki/YCbCr (BT.601 / BT.709).
|
|
18
|
-
static constexpr float kBT709LimitedToRgb[12] = {
|
|
19
|
-
1.164383f, 0.000000f, 1.792741f, -0.972945f, //
|
|
20
|
-
1.164383f, -0.213249f, -0.532909f, 0.301517f, //
|
|
21
|
-
1.164383f, 2.112402f, 0.000000f, -1.133402f, //
|
|
22
|
-
};
|
|
23
|
-
static constexpr float kBT601LimitedToRgb[12] = {
|
|
24
|
-
1.164383f, 0.000000f, 1.596027f, -0.874202f, //
|
|
25
|
-
1.164383f, -0.391762f, -0.812968f, 0.531668f, //
|
|
26
|
-
1.164383f, 2.017232f, 0.000000f, -1.085631f, //
|
|
27
|
-
};
|
|
28
|
-
static constexpr float kBT2020LimitedToRgb[12] = {
|
|
29
|
-
1.164383f, 0.000000f, 1.678674f, -0.915688f, //
|
|
30
|
-
1.164383f, -0.187326f, -0.650424f, 0.347459f, //
|
|
31
|
-
1.164383f, 2.141772f, 0.000000f, -1.148145f, //
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
// Pick the right YUV→RGB matrix from the pixel buffer's color attachments.
|
|
35
|
-
// Falls back to BT.709 limited range (the right call for ≥720p H.264, which
|
|
36
|
-
// is what AVPlayer hands us for Big Buck Bunny and most streamed media).
|
|
37
|
-
static void fillYuvMatrix(CVPixelBufferRef pixelBuffer, float out[12]) {
|
|
38
|
-
CFTypeRef matrixKey = CVBufferGetAttachment(
|
|
39
|
-
pixelBuffer, kCVImageBufferYCbCrMatrixKey, nullptr);
|
|
40
|
-
const float *src = kBT709LimitedToRgb;
|
|
41
|
-
if (matrixKey) {
|
|
42
|
-
auto matrix = (CFStringRef)matrixKey;
|
|
43
|
-
if (CFEqual(matrix, kCVImageBufferYCbCrMatrix_ITU_R_601_4) ||
|
|
44
|
-
CFEqual(matrix, kCVImageBufferYCbCrMatrix_SMPTE_240M_1995)) {
|
|
45
|
-
src = kBT601LimitedToRgb;
|
|
46
|
-
} else if (CFEqual(matrix, kCVImageBufferYCbCrMatrix_ITU_R_2020)) {
|
|
47
|
-
src = kBT2020LimitedToRgb;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
for (int i = 0; i < 12; ++i) {
|
|
51
|
-
out[i] = src[i];
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Map a CVPixelBuffer's pixel format to our VideoPixelFormat enum.
|
|
56
|
-
static VideoPixelFormat pixelFormatFromCVPixelBuffer(
|
|
57
|
-
CVPixelBufferRef pixelBuffer) {
|
|
58
|
-
OSType type = CVPixelBufferGetPixelFormatType(pixelBuffer);
|
|
59
|
-
switch (type) {
|
|
60
|
-
case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange:
|
|
61
|
-
case kCVPixelFormatType_420YpCbCr8BiPlanarFullRange:
|
|
62
|
-
return VideoPixelFormat::NV12;
|
|
63
|
-
default:
|
|
64
|
-
return VideoPixelFormat::BGRA8;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
class AppleVideoPlayer : public IVideoPlayer {
|
|
69
|
-
public:
|
|
70
|
-
AppleVideoPlayer(AVPlayer *player, AVPlayerItemVideoOutput *output,
|
|
71
|
-
id loopObserver)
|
|
72
|
-
: _player(player), _output(output), _loopObserver(loopObserver) {}
|
|
73
|
-
|
|
74
|
-
~AppleVideoPlayer() override {
|
|
75
|
-
if (_loopObserver) {
|
|
76
|
-
[[NSNotificationCenter defaultCenter] removeObserver:_loopObserver];
|
|
77
|
-
_loopObserver = nil;
|
|
78
|
-
}
|
|
79
|
-
[_player pause];
|
|
80
|
-
_player = nil;
|
|
81
|
-
_output = nil;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
VideoFrameHandle copyLatestFrame() override {
|
|
85
|
-
CMTime currentTime = [_output itemTimeForHostTime:CACurrentMediaTime()];
|
|
86
|
-
if (![_output hasNewPixelBufferForItemTime:currentTime]) {
|
|
87
|
-
return {};
|
|
88
|
-
}
|
|
89
|
-
// copyPixelBufferForItemTime returns a +1 retained CVPixelBuffer; we then
|
|
90
|
-
// hand it to wrapCVPixelBuffer which adds another retain. Balance with a
|
|
91
|
-
// CFRelease here so we don't leak.
|
|
92
|
-
CVPixelBufferRef pixelBuffer =
|
|
93
|
-
[_output copyPixelBufferForItemTime:currentTime
|
|
94
|
-
itemTimeForDisplay:nullptr];
|
|
95
|
-
if (!pixelBuffer) {
|
|
96
|
-
return {};
|
|
97
|
-
}
|
|
98
|
-
try {
|
|
99
|
-
auto handle = wrapCVPixelBuffer(pixelBuffer);
|
|
100
|
-
CFRelease(pixelBuffer);
|
|
101
|
-
return handle;
|
|
102
|
-
} catch (...) {
|
|
103
|
-
CFRelease(pixelBuffer);
|
|
104
|
-
throw;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
void play() override { [_player play]; }
|
|
109
|
-
void pause() override { [_player pause]; }
|
|
110
|
-
|
|
111
|
-
private:
|
|
112
|
-
AVPlayer *_player;
|
|
113
|
-
AVPlayerItemVideoOutput *_output;
|
|
114
|
-
id _loopObserver;
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
} // namespace
|
|
118
|
-
|
|
119
|
-
VideoFrameHandle wrapCVPixelBuffer(CVPixelBufferRef pixelBuffer) {
|
|
120
|
-
if (!pixelBuffer) {
|
|
121
|
-
throw std::runtime_error("wrapCVPixelBuffer: pointer is null");
|
|
122
|
-
}
|
|
123
|
-
IOSurfaceRef ioSurface = CVPixelBufferGetIOSurface(pixelBuffer);
|
|
124
|
-
if (!ioSurface) {
|
|
125
|
-
throw std::runtime_error(
|
|
126
|
-
"wrapCVPixelBuffer: pixel buffer is not IOSurface-backed (was the "
|
|
127
|
-
"camera/video pipeline configured for Metal/IOSurface output?)");
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Retain the pixel buffer so the caller can release theirs immediately.
|
|
131
|
-
CFRetain(pixelBuffer);
|
|
132
|
-
|
|
133
|
-
VideoFrameHandle handle;
|
|
134
|
-
handle.handle = (void *)ioSurface;
|
|
135
|
-
handle.width = static_cast<uint32_t>(CVPixelBufferGetWidth(pixelBuffer));
|
|
136
|
-
handle.height = static_cast<uint32_t>(CVPixelBufferGetHeight(pixelBuffer));
|
|
137
|
-
handle.pixelFormat = pixelFormatFromCVPixelBuffer(pixelBuffer);
|
|
138
|
-
if (handle.pixelFormat == VideoPixelFormat::NV12) {
|
|
139
|
-
fillYuvMatrix(pixelBuffer, handle.yuvToRgbMatrix);
|
|
140
|
-
}
|
|
141
|
-
handle.deleter = [pixelBuffer]() { CFRelease(pixelBuffer); };
|
|
142
|
-
return handle;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
std::unique_ptr<IVideoPlayer>
|
|
146
|
-
createAppleVideoPlayer(const std::string &path, VideoPixelFormat format) {
|
|
147
|
-
NSString *nsPath = [NSString stringWithUTF8String:path.c_str()];
|
|
148
|
-
NSURL *url;
|
|
149
|
-
if ([nsPath hasPrefix:@"http://"] || [nsPath hasPrefix:@"https://"] ||
|
|
150
|
-
[nsPath hasPrefix:@"file://"]) {
|
|
151
|
-
url = [NSURL URLWithString:nsPath];
|
|
152
|
-
} else {
|
|
153
|
-
url = [NSURL fileURLWithPath:nsPath];
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
AVPlayerItem *item = [AVPlayerItem playerItemWithURL:url];
|
|
157
|
-
if (!item) {
|
|
158
|
-
throw std::runtime_error("createAppleVideoPlayer: failed to create "
|
|
159
|
-
"AVPlayerItem");
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// NV12 (kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange) lets us hand the
|
|
163
|
-
// IOSurface straight to Dawn as a multi-planar texture for
|
|
164
|
-
// importExternalTexture. BGRA is the "decode + convert" path for the
|
|
165
|
-
// single-plane SharedTextureMemory demo.
|
|
166
|
-
OSType pixelFormat = format == VideoPixelFormat::NV12
|
|
167
|
-
? kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
|
|
168
|
-
: kCVPixelFormatType_32BGRA;
|
|
169
|
-
NSDictionary *outputSettings = @{
|
|
170
|
-
(NSString *)kCVPixelBufferPixelFormatTypeKey : @(pixelFormat),
|
|
171
|
-
(NSString *)kCVPixelBufferIOSurfacePropertiesKey : @{},
|
|
172
|
-
(NSString *)kCVPixelBufferMetalCompatibilityKey : @YES,
|
|
173
|
-
};
|
|
174
|
-
AVPlayerItemVideoOutput *output = [[AVPlayerItemVideoOutput alloc]
|
|
175
|
-
initWithPixelBufferAttributes:outputSettings];
|
|
176
|
-
[item addOutput:output];
|
|
177
|
-
|
|
178
|
-
AVPlayer *player = [AVPlayer playerWithPlayerItem:item];
|
|
179
|
-
player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
|
|
180
|
-
|
|
181
|
-
// Loop on end-of-stream by seeking back to zero.
|
|
182
|
-
__weak AVPlayer *weakPlayer = player;
|
|
183
|
-
id loopObserver = [[NSNotificationCenter defaultCenter]
|
|
184
|
-
addObserverForName:AVPlayerItemDidPlayToEndTimeNotification
|
|
185
|
-
object:item
|
|
186
|
-
queue:[NSOperationQueue mainQueue]
|
|
187
|
-
usingBlock:^(NSNotification * /*note*/) {
|
|
188
|
-
[weakPlayer seekToTime:kCMTimeZero];
|
|
189
|
-
[weakPlayer play];
|
|
190
|
-
}];
|
|
191
|
-
|
|
192
|
-
return std::make_unique<AppleVideoPlayer>(player, output, loopObserver);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
std::string writeAppleTestVideoFile() {
|
|
196
|
-
NSString *tmpDir = NSTemporaryDirectory();
|
|
197
|
-
NSString *outputPath =
|
|
198
|
-
[tmpDir stringByAppendingPathComponent:@"rnwgpu-test-video.mp4"];
|
|
199
|
-
NSURL *outputURL = [NSURL fileURLWithPath:outputPath];
|
|
200
|
-
|
|
201
|
-
// If the file already exists, reuse it. This makes the example zero-cost on
|
|
202
|
-
// subsequent runs.
|
|
203
|
-
if ([[NSFileManager defaultManager] fileExistsAtPath:outputPath]) {
|
|
204
|
-
return [outputPath UTF8String];
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
NSError *error = nil;
|
|
208
|
-
AVAssetWriter *writer = [AVAssetWriter assetWriterWithURL:outputURL
|
|
209
|
-
fileType:AVFileTypeMPEG4
|
|
210
|
-
error:&error];
|
|
211
|
-
if (error || !writer) {
|
|
212
|
-
throw std::runtime_error(
|
|
213
|
-
std::string("writeTestVideoFile: AVAssetWriter init failed: ") +
|
|
214
|
-
[[error localizedDescription] UTF8String]);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
const int kWidth = 256;
|
|
218
|
-
const int kHeight = 256;
|
|
219
|
-
const int kFps = 30;
|
|
220
|
-
const int kSeconds = 3;
|
|
221
|
-
const int kTotalFrames = kFps * kSeconds;
|
|
222
|
-
|
|
223
|
-
NSDictionary *videoSettings = @{
|
|
224
|
-
AVVideoCodecKey : AVVideoCodecTypeH264,
|
|
225
|
-
AVVideoWidthKey : @(kWidth),
|
|
226
|
-
AVVideoHeightKey : @(kHeight),
|
|
227
|
-
};
|
|
228
|
-
AVAssetWriterInput *writerInput =
|
|
229
|
-
[AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo
|
|
230
|
-
outputSettings:videoSettings];
|
|
231
|
-
writerInput.expectsMediaDataInRealTime = NO;
|
|
232
|
-
|
|
233
|
-
NSDictionary *bufferAttrs = @{
|
|
234
|
-
(NSString *)kCVPixelBufferPixelFormatTypeKey :
|
|
235
|
-
@(kCVPixelFormatType_32BGRA),
|
|
236
|
-
(NSString *)kCVPixelBufferWidthKey : @(kWidth),
|
|
237
|
-
(NSString *)kCVPixelBufferHeightKey : @(kHeight),
|
|
238
|
-
(NSString *)kCVPixelBufferIOSurfacePropertiesKey : @{},
|
|
239
|
-
};
|
|
240
|
-
AVAssetWriterInputPixelBufferAdaptor *adaptor =
|
|
241
|
-
[AVAssetWriterInputPixelBufferAdaptor
|
|
242
|
-
assetWriterInputPixelBufferAdaptorWithAssetWriterInput:writerInput
|
|
243
|
-
sourcePixelBufferAttributes:bufferAttrs];
|
|
244
|
-
[writer addInput:writerInput];
|
|
245
|
-
|
|
246
|
-
if (![writer startWriting]) {
|
|
247
|
-
throw std::runtime_error(
|
|
248
|
-
std::string("writeTestVideoFile: startWriting failed: ") +
|
|
249
|
-
[[writer.error localizedDescription] UTF8String]);
|
|
250
|
-
}
|
|
251
|
-
[writer startSessionAtSourceTime:kCMTimeZero];
|
|
252
|
-
|
|
253
|
-
for (int i = 0; i < kTotalFrames; ++i) {
|
|
254
|
-
// Spin briefly if the input is not ready (the adaptor pool fills up).
|
|
255
|
-
while (!writerInput.isReadyForMoreMediaData) {
|
|
256
|
-
[NSThread sleepForTimeInterval:0.005];
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
CVPixelBufferRef pixelBuffer = NULL;
|
|
260
|
-
CVReturn err = CVPixelBufferPoolCreatePixelBuffer(
|
|
261
|
-
kCFAllocatorDefault, adaptor.pixelBufferPool, &pixelBuffer);
|
|
262
|
-
if (err != kCVReturnSuccess || !pixelBuffer) {
|
|
263
|
-
throw std::runtime_error("writeTestVideoFile: pool exhausted");
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
|
|
267
|
-
uint8_t *base =
|
|
268
|
-
static_cast<uint8_t *>(CVPixelBufferGetBaseAddress(pixelBuffer));
|
|
269
|
-
size_t rowBytes = CVPixelBufferGetBytesPerRow(pixelBuffer);
|
|
270
|
-
// Procedural pattern: scrolling diagonal stripes + per-frame color shift.
|
|
271
|
-
int phase = i * 6;
|
|
272
|
-
for (int y = 0; y < kHeight; ++y) {
|
|
273
|
-
uint8_t *row = base + y * rowBytes;
|
|
274
|
-
for (int x = 0; x < kWidth; ++x) {
|
|
275
|
-
uint8_t r = static_cast<uint8_t>((x + phase) & 0xFF);
|
|
276
|
-
uint8_t g = static_cast<uint8_t>((y + phase * 2) & 0xFF);
|
|
277
|
-
uint8_t b =
|
|
278
|
-
static_cast<uint8_t>(((x + y + phase) & 0x40) ? 220 : 30);
|
|
279
|
-
row[x * 4 + 0] = b;
|
|
280
|
-
row[x * 4 + 1] = g;
|
|
281
|
-
row[x * 4 + 2] = r;
|
|
282
|
-
row[x * 4 + 3] = 0xFF;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
|
|
286
|
-
|
|
287
|
-
CMTime pts = CMTimeMake(i, kFps);
|
|
288
|
-
if (![adaptor appendPixelBuffer:pixelBuffer withPresentationTime:pts]) {
|
|
289
|
-
CFRelease(pixelBuffer);
|
|
290
|
-
throw std::runtime_error(
|
|
291
|
-
std::string("writeTestVideoFile: appendPixelBuffer failed: ") +
|
|
292
|
-
[[writer.error localizedDescription] UTF8String]);
|
|
293
|
-
}
|
|
294
|
-
CFRelease(pixelBuffer);
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
[writerInput markAsFinished];
|
|
298
|
-
dispatch_semaphore_t sem = dispatch_semaphore_create(0);
|
|
299
|
-
[writer finishWritingWithCompletionHandler:^{
|
|
300
|
-
dispatch_semaphore_signal(sem);
|
|
301
|
-
}];
|
|
302
|
-
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
|
|
303
|
-
|
|
304
|
-
if (writer.status != AVAssetWriterStatusCompleted) {
|
|
305
|
-
throw std::runtime_error(
|
|
306
|
-
std::string("writeTestVideoFile: writer finished with status ") +
|
|
307
|
-
std::to_string(static_cast<long>(writer.status)) + ": " +
|
|
308
|
-
[[writer.error localizedDescription] UTF8String]);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
return [outputPath UTF8String];
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
} // namespace rnwgpu
|