react-native-wgpu 0.1.8 → 0.1.10

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.
Files changed (70) hide show
  1. package/android/cpp/cpp-adapter.cpp +23 -36
  2. package/android/src/main/java/com/webgpu/WebGPUModule.java +0 -37
  3. package/android/src/main/java/com/webgpu/WebGPUView.java +10 -2
  4. package/android/src/main/java/com/webgpu/WebGPUViewPackage.java +1 -1
  5. package/cpp/rnwgpu/RNWebGPUManager.cpp +1 -0
  6. package/cpp/rnwgpu/RNWebGPUManager.h +3 -2
  7. package/cpp/rnwgpu/SurfaceRegistry.h +196 -14
  8. package/cpp/rnwgpu/api/Canvas.h +15 -15
  9. package/cpp/rnwgpu/api/GPUCanvasContext.cpp +15 -25
  10. package/cpp/rnwgpu/api/GPUCanvasContext.h +12 -9
  11. package/cpp/rnwgpu/api/GPUDevice.cpp +3 -2
  12. package/cpp/rnwgpu/api/RNWebGPU.h +25 -10
  13. package/ios/MetalView.mm +13 -0
  14. package/ios/SurfaceUtils.h +2 -0
  15. package/ios/SurfaceUtils.mm +16 -5
  16. package/ios/WebGPUModule.mm +8 -25
  17. package/ios/WebGPUView.mm +9 -6
  18. package/lib/commonjs/Canvas.js +79 -18
  19. package/lib/commonjs/Canvas.js.map +1 -1
  20. package/lib/commonjs/Offscreen.js +3 -0
  21. package/lib/commonjs/Offscreen.js.map +1 -1
  22. package/lib/commonjs/hooks.js +56 -0
  23. package/lib/commonjs/hooks.js.map +1 -0
  24. package/lib/commonjs/index.js +12 -4
  25. package/lib/commonjs/index.js.map +1 -1
  26. package/lib/module/Canvas.js +80 -19
  27. package/lib/module/Canvas.js.map +1 -1
  28. package/lib/module/Offscreen.js +3 -0
  29. package/lib/module/Offscreen.js.map +1 -1
  30. package/lib/module/hooks.js +47 -0
  31. package/lib/module/hooks.js.map +1 -0
  32. package/lib/module/index.js +6 -1
  33. package/lib/module/index.js.map +1 -1
  34. package/lib/typescript/lib/commonjs/Offscreen.d.ts +1 -0
  35. package/lib/typescript/lib/commonjs/Offscreen.d.ts.map +1 -1
  36. package/lib/typescript/lib/commonjs/hooks.d.ts +12 -0
  37. package/lib/typescript/lib/commonjs/hooks.d.ts.map +1 -0
  38. package/lib/typescript/lib/commonjs/index.d.ts +1 -0
  39. package/lib/typescript/lib/commonjs/index.d.ts.map +1 -1
  40. package/lib/typescript/lib/module/Canvas.d.ts.map +1 -1
  41. package/lib/typescript/lib/module/Offscreen.d.ts +1 -0
  42. package/lib/typescript/lib/module/Offscreen.d.ts.map +1 -1
  43. package/lib/typescript/lib/module/hooks.d.ts +10 -0
  44. package/lib/typescript/lib/module/hooks.d.ts.map +1 -0
  45. package/lib/typescript/lib/module/index.d.ts +2 -1
  46. package/lib/typescript/lib/module/index.d.ts.map +1 -1
  47. package/lib/typescript/src/Canvas.d.ts +4 -2
  48. package/lib/typescript/src/Canvas.d.ts.map +1 -1
  49. package/lib/typescript/src/Offscreen.d.ts +16 -1
  50. package/lib/typescript/src/Offscreen.d.ts.map +1 -1
  51. package/lib/typescript/src/hooks.d.ts +13 -0
  52. package/lib/typescript/src/hooks.d.ts.map +1 -0
  53. package/lib/typescript/src/index.d.ts +2 -1
  54. package/lib/typescript/src/index.d.ts.map +1 -1
  55. package/package.json +1 -1
  56. package/src/Canvas.tsx +99 -35
  57. package/src/Offscreen.ts +6 -2
  58. package/src/hooks.ts +53 -0
  59. package/src/index.tsx +9 -1
  60. package/lib/commonjs/utils.js +0 -39
  61. package/lib/commonjs/utils.js.map +0 -1
  62. package/lib/module/utils.js +0 -31
  63. package/lib/module/utils.js.map +0 -1
  64. package/lib/typescript/lib/commonjs/utils.d.ts +0 -5
  65. package/lib/typescript/lib/commonjs/utils.d.ts.map +0 -1
  66. package/lib/typescript/lib/module/utils.d.ts +0 -3
  67. package/lib/typescript/lib/module/utils.d.ts.map +0 -1
  68. package/lib/typescript/src/utils.d.ts +0 -7
  69. package/lib/typescript/src/utils.d.ts.map +0 -1
  70. package/src/utils.ts +0 -42
@@ -1 +1 @@
1
- {"version":3,"names":["GPUOffscreenCanvas","oncontextlost","oncontextrestored","constructor","width","height","context","GPUOffscreenCanvasContext","convertToBlob","_options","Error","getContext","contextId","transferToImageBitmap","addEventListener","_type","_listener","removeEventListener","dispatchEvent","_event","getImageData","device","getDevice","texture","getTexture","commandEncoder","createCommandEncoder","bytesPerRow","buffer","createBuffer","size","usage","GPUBufferUsage","COPY_DST","MAP_READ","copyTextureToBuffer","queue","submit","finish","mapAsync","GPUMapMode","READ","then","arrayBuffer","getMappedRange","uint8Array","Uint8Array","data","Array","from","unmap","format","navigator","gpu","getPreferredCanvasFormat","__brand","canvas","textureFormat","configure","config","createTexture","GPUTextureUsage","RENDER_ATTACHMENT","COPY_SRC","TEXTURE_BINDING","undefined","unconfigure","destroy","getCurrentTexture"],"sourceRoot":"../../src","sources":["Offscreen.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["GPUOffscreenCanvas","oncontextlost","oncontextrestored","constructor","width","height","context","GPUOffscreenCanvasContext","convertToBlob","_options","Error","getContext","contextId","transferToImageBitmap","addEventListener","_type","_listener","removeEventListener","dispatchEvent","_event","getImageData","device","getDevice","texture","getTexture","commandEncoder","createCommandEncoder","bytesPerRow","buffer","createBuffer","size","usage","GPUBufferUsage","COPY_DST","MAP_READ","copyTextureToBuffer","queue","submit","finish","mapAsync","GPUMapMode","READ","then","arrayBuffer","getMappedRange","uint8Array","Uint8Array","data","Array","from","unmap","format","navigator","gpu","getPreferredCanvasFormat","__brand","canvas","textureFormat","present","configure","config","createTexture","GPUTextureUsage","RENDER_ATTACHMENT","COPY_SRC","TEXTURE_BINDING","undefined","unconfigure","destroy","getCurrentTexture"],"sourceRoot":"../../src","sources":["Offscreen.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ import { useEffect, useRef, useState } from "react";
2
+ export const useSurface = () => {
3
+ const [surface, setSurface] = useState(null);
4
+ const ref = useCanvasEffect(() => {
5
+ const sur = ref.current.getNativeSurface();
6
+ setSurface(sur);
7
+ });
8
+ return {
9
+ ref,
10
+ surface
11
+ };
12
+ };
13
+ export const useGPUContext = () => {
14
+ const [context, setContext] = useState(null);
15
+ const ref = useCanvasEffect(() => {
16
+ const ctx = ref.current.getContext("webgpu");
17
+ setContext(ctx);
18
+ });
19
+ return {
20
+ ref,
21
+ context
22
+ };
23
+ };
24
+ export const useCanvasEffect = effect => {
25
+ const unsub = useRef(null);
26
+ const ref = useRef(null);
27
+ useEffect(() => {
28
+ ref.current.whenReady(async () => {
29
+ const sub = effect();
30
+ if (sub) {
31
+ unsub.current = sub;
32
+ }
33
+ });
34
+ return () => {
35
+ if (unsub.current) {
36
+ if (unsub.current instanceof Promise) {
37
+ unsub.current.then(sub => sub && sub());
38
+ } else {
39
+ unsub.current();
40
+ }
41
+ }
42
+ };
43
+ // eslint-disable-next-line react-hooks/exhaustive-deps
44
+ }, []);
45
+ return ref;
46
+ };
47
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","useState","useSurface","surface","setSurface","ref","useCanvasEffect","sur","current","getNativeSurface","useGPUContext","context","setContext","ctx","getContext","effect","unsub","whenReady","sub","Promise","then"],"sourceRoot":"../../src","sources":["hooks.ts"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAMnD,OAAO,MAAMC,UAAU,GAAGA,CAAA,KAAM;EAC9B,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGH,QAAQ,CAAsB,IAAI,CAAC;EACjE,MAAMI,GAAG,GAAGC,eAAe,CAAC,MAAM;IAChC,MAAMC,GAAG,GAAGF,GAAG,CAACG,OAAO,CAAEC,gBAAgB,CAAC,CAAC;IAC3CL,UAAU,CAACG,GAAG,CAAC;EACjB,CAAC,CAAC;EACF,OAAO;IAAEF,GAAG;IAAEF;EAAQ,CAAC;AACzB,CAAC;AAED,OAAO,MAAMO,aAAa,GAAGA,CAAA,KAAM;EACjC,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGX,QAAQ,CAAyB,IAAI,CAAC;EACpE,MAAMI,GAAG,GAAGC,eAAe,CAAC,MAAM;IAChC,MAAMO,GAAG,GAAGR,GAAG,CAACG,OAAO,CAAEM,UAAU,CAAC,QAAQ,CAAE;IAC9CF,UAAU,CAACC,GAAG,CAAC;EACjB,CAAC,CAAC;EACF,OAAO;IAAER,GAAG;IAAEM;EAAQ,CAAC;AACzB,CAAC;AAED,OAAO,MAAML,eAAe,GAC1BS,MAIiB,IACd;EACH,MAAMC,KAAK,GAAGhB,MAAM,CAAmD,IAAI,CAAC;EAC5E,MAAMK,GAAG,GAAGL,MAAM,CAAY,IAAI,CAAC;EACnCD,SAAS,CAAC,MAAM;IACdM,GAAG,CAACG,OAAO,CAAES,SAAS,CAAC,YAAY;MACjC,MAAMC,GAAG,GAAGH,MAAM,CAAC,CAAC;MACpB,IAAIG,GAAG,EAAE;QACPF,KAAK,CAACR,OAAO,GAAGU,GAAG;MACrB;IACF,CAAC,CAAC;IACF,OAAO,MAAM;MACX,IAAIF,KAAK,CAACR,OAAO,EAAE;QACjB,IAAIQ,KAAK,CAACR,OAAO,YAAYW,OAAO,EAAE;UACpCH,KAAK,CAACR,OAAO,CAACY,IAAI,CAAEF,GAAG,IAAKA,GAAG,IAAIA,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC,MAAM;UACLF,KAAK,CAACR,OAAO,CAAC,CAAC;QACjB;MACF;IACF,CAAC;IACD;EACF,CAAC,EAAE,EAAE,CAAC;EACN,OAAOH,GAAG;AACZ,CAAC","ignoreList":[]}
@@ -3,8 +3,13 @@ import WebGPUNativeModule from "./NativeWebGPUModule";
3
3
  export * from "./Canvas";
4
4
  export * from "./Offscreen";
5
5
  export * from "./WebGPUViewNativeComponent";
6
- export * from "./utils";
6
+ export * from "./hooks";
7
7
  export { default as WebGPUModule } from "./NativeWebGPUModule";
8
+ export const warnIfNotHardwareAccelerated = adapter => {
9
+ if (adapter.info.architecture === "swiftshader") {
10
+ console.warn("GPUAdapter is not hardware accelerated. This is common on Android emulators. Rendering will be slow.");
11
+ }
12
+ };
8
13
  const GPU = {};
9
14
  GPU[Symbol.hasInstance] = function (instance) {
10
15
  return "__brand" in instance && instance.__brand === "GPU";
@@ -1 +1 @@
1
- {"version":3,"names":["WebGPUNativeModule","default","WebGPUModule","GPU","Symbol","hasInstance","instance","__brand","GPUAdapter","GPUAdapterInfo","GPUBindGroup","GPUBindGroupLayout","GPUBuffer","GPUCanvasContext","GPUCommandBuffer","GPUCommandEncoder","GPUCompilationInfo","GPUCompilationMessage","GPUComputePassEncoder","GPUComputePipeline","GPUDevice","GPUDeviceLostInfo","GPUError","GPUExternalTexture","GPUPipelineLayout","GPUQuerySet","GPUQueue","GPURenderBundle","GPURenderBundleEncoder","GPURenderPassEncoder","GPURenderPipeline","GPUSampler","GPUShaderModule","GPUTexture","GPUTextureView","global","install","navigator","gpu","RNWebGPU","userAgent","createImageBitmap","params","Promise","resolve"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["WebGPUNativeModule","default","WebGPUModule","warnIfNotHardwareAccelerated","adapter","info","architecture","console","warn","GPU","Symbol","hasInstance","instance","__brand","GPUAdapter","GPUAdapterInfo","GPUBindGroup","GPUBindGroupLayout","GPUBuffer","GPUCanvasContext","GPUCommandBuffer","GPUCommandEncoder","GPUCompilationInfo","GPUCompilationMessage","GPUComputePassEncoder","GPUComputePipeline","GPUDevice","GPUDeviceLostInfo","GPUError","GPUExternalTexture","GPUPipelineLayout","GPUQuerySet","GPUQueue","GPURenderBundle","GPURenderBundleEncoder","GPURenderPassEncoder","GPURenderPipeline","GPUSampler","GPUShaderModule","GPUTexture","GPUTextureView","global","install","navigator","gpu","RNWebGPU","userAgent","createImageBitmap","params","Promise","resolve"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -21,6 +21,7 @@ declare class GPUOffscreenCanvasContext {
21
21
  device: null;
22
22
  canvas: any;
23
23
  textureFormat: GPUTextureFormat;
24
+ present(): void;
24
25
  getDevice(): never;
25
26
  getTexture(): never;
26
27
  configure(config: any): undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Offscreen.d.ts","sourceRoot":"","sources":["../../../commonjs/Offscreen.js"],"names":[],"mappings":";AAOA;IAGE,qCAIC;IAND,oBAAqB;IACrB,wBAAyB;IAEvB,WAAkB;IAClB,YAAoB;IACpB,mCAAkD;IAEpD,mCAGC;IAID,4EAMC;IACD,8BAGC;IACD,kEAGC;IACD,qEAGC;IACD,iCAGC;IACD,oBA4BC;CACF;AAED;IAIE,yBAGC;IAND,gBAA6B;IAC7B,cAAe;IACf,aAAc;IAEZ,YAAoB;IACpB,gCAA6D;IAE/D,mBAKC;IACD,oBAKC;IACD,kCASC;IACD,yBAMC;IACD,2BAKC;CACF"}
1
+ {"version":3,"file":"Offscreen.d.ts","sourceRoot":"","sources":["../../../commonjs/Offscreen.js"],"names":[],"mappings":";AAOA;IAGE,qCAIC;IAND,oBAAqB;IACrB,wBAAyB;IAEvB,WAAkB;IAClB,YAAoB;IACpB,mCAAkD;IAEpD,mCAGC;IAID,4EAMC;IACD,8BAGC;IACD,kEAGC;IACD,qEAGC;IACD,iCAGC;IACD,oBA4BC;CACF;AAED;IAIE,yBAGC;IAND,gBAA6B;IAC7B,cAAe;IACf,aAAc;IAEZ,YAAoB;IACpB,gCAA6D;IAE/D,gBAEC;IACD,mBAKC;IACD,oBAKC;IACD,kCASC;IACD,yBAMC;IACD,2BAKC;CACF"}
@@ -0,0 +1,12 @@
1
+ export const __esModule: boolean;
2
+ export function useSurface(): {
3
+ ref: _react.MutableRefObject<null>;
4
+ surface: null;
5
+ };
6
+ export function useGPUContext(): {
7
+ ref: _react.MutableRefObject<null>;
8
+ context: null;
9
+ };
10
+ export function useCanvasEffect(effect: any): _react.MutableRefObject<null>;
11
+ import _react = require("react");
12
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../commonjs/hooks.js"],"names":[],"mappings":";AAOA;;;EAUC;AAED;;;EAUC;AAED,4EAsBC"}
@@ -1,3 +1,4 @@
1
1
  export const __esModule: boolean;
2
2
  export const WebGPUModule: any;
3
+ export function warnIfNotHardwareAccelerated(adapter: any): void;
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../commonjs/index.js"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../commonjs/index.js"],"names":[],"mappings":";;AAoEA,iEAIC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../module/Canvas.js"],"names":[],"mappings":"AAUA,mGA4BG"}
1
+ {"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../module/Canvas.js"],"names":[],"mappings":"AAgDA,mGAmDG"}
@@ -20,6 +20,7 @@ declare class GPUOffscreenCanvasContext {
20
20
  device: null;
21
21
  canvas: any;
22
22
  textureFormat: GPUTextureFormat;
23
+ present(): void;
23
24
  getDevice(): never;
24
25
  getTexture(): never;
25
26
  configure(config: any): undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Offscreen.d.ts","sourceRoot":"","sources":["../../../module/Offscreen.js"],"names":[],"mappings":"AACA;IAGE,qCAIC;IAND,oBAAqB;IACrB,wBAAyB;IAEvB,WAAkB;IAClB,YAAoB;IACpB,mCAAkD;IAEpD,mCAGC;IAID,4EAMC;IACD,8BAGC;IACD,kEAGC;IACD,qEAGC;IACD,iCAGC;IACD,oBA4BC;CACF;AACD;IAIE,yBAGC;IAND,gBAA6B;IAC7B,cAAe;IACf,aAAc;IAEZ,YAAoB;IACpB,gCAA6D;IAE/D,mBAKC;IACD,oBAKC;IACD,kCASC;IACD,yBAMC;IACD,2BAKC;CACF"}
1
+ {"version":3,"file":"Offscreen.d.ts","sourceRoot":"","sources":["../../../module/Offscreen.js"],"names":[],"mappings":"AACA;IAGE,qCAIC;IAND,oBAAqB;IACrB,wBAAyB;IAEvB,WAAkB;IAClB,YAAoB;IACpB,mCAAkD;IAEpD,mCAGC;IAID,4EAMC;IACD,8BAGC;IACD,kEAGC;IACD,qEAGC;IACD,iCAGC;IACD,oBA4BC;CACF;AACD;IAIE,yBAGC;IAND,gBAA6B;IAC7B,cAAe;IACf,aAAc;IAEZ,YAAoB;IACpB,gCAA6D;IAE/D,gBAEC;IACD,mBAKC;IACD,oBAKC;IACD,kCASC;IACD,yBAMC;IACD,2BAKC;CACF"}
@@ -0,0 +1,10 @@
1
+ export function useSurface(): {
2
+ ref: import("react").MutableRefObject<null>;
3
+ surface: null;
4
+ };
5
+ export function useGPUContext(): {
6
+ ref: import("react").MutableRefObject<null>;
7
+ context: null;
8
+ };
9
+ export function useCanvasEffect(effect: any): import("react").MutableRefObject<null>;
10
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../module/hooks.js"],"names":[],"mappings":"AACO;;;EAUN;AACM;;;EAUN;AACM,qFAsBN"}
@@ -1,6 +1,7 @@
1
1
  export * from "./Canvas";
2
2
  export * from "./Offscreen";
3
3
  export * from "./WebGPUViewNativeComponent";
4
- export * from "./utils";
4
+ export * from "./hooks";
5
5
  export { default as WebGPUModule } from "./NativeWebGPUModule";
6
+ export function warnIfNotHardwareAccelerated(adapter: any): void;
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../module/index.js"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../module/index.js"],"names":[],"mappings":";;;;;AAOO,iEAIN"}
@@ -1,9 +1,10 @@
1
1
  import type { ViewProps } from "react-native";
2
2
  declare global {
3
- var __WebGPUContextRegistry: Record<number, NativeCanvas>;
4
3
  var RNWebGPU: {
5
4
  gpu: GPU;
6
- MakeWebGPUCanvasContext: (nativeCanvas: NativeCanvas) => RNCanvasContext;
5
+ fabric: boolean;
6
+ getNativeSurface: (contextId: number) => NativeCanvas;
7
+ MakeWebGPUCanvasContext: (contextId: number, width: number, height: number) => RNCanvasContext;
7
8
  DecodeToUTF8: (buffer: NodeJS.ArrayBufferView | ArrayBuffer) => string;
8
9
  createImageBitmap: typeof createImageBitmap;
9
10
  };
@@ -22,6 +23,7 @@ export type RNCanvasContext = GPUCanvasContext & {
22
23
  export interface CanvasRef {
23
24
  getContext(contextName: "webgpu"): RNCanvasContext | null;
24
25
  getNativeSurface: () => NativeCanvas;
26
+ whenReady: (callback: () => void) => void;
25
27
  }
26
28
  export declare const Canvas: import("react").ForwardRefExoticComponent<ViewProps & import("react").RefAttributes<CanvasRef>>;
27
29
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../src/Canvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAW9C,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE1D,IAAI,QAAQ,EAAE;QACZ,GAAG,EAAE,GAAG,CAAC;QACT,uBAAuB,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,eAAe,CAAC;QACzE,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,GAAG,WAAW,KAAK,MAAM,CAAC;QACvE,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;KAC7C,CAAC;CACH;AAED,KAAK,cAAc,GAAG,MAAM,CAAC;AAE7B,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAKD,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAC/C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,WAAW,EAAE,QAAQ,GAAG,eAAe,GAAG,IAAI,CAAC;IAC1D,gBAAgB,EAAE,MAAM,YAAY,CAAC;CACtC;AAED,eAAO,MAAM,MAAM,iGA6BjB,CAAC"}
1
+ {"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../src/Canvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAqB,MAAM,cAAc,CAAC;AAoBjE,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,QAAQ,EAAE;QACZ,GAAG,EAAE,GAAG,CAAC;QACT,MAAM,EAAE,OAAO,CAAC;QAChB,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,YAAY,CAAC;QACtD,uBAAuB,EAAE,CACvB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,KACX,eAAe,CAAC;QACrB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,GAAG,WAAW,KAAK,MAAM,CAAC;QACvE,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;KAC7C,CAAC;CACH;AAED,KAAK,cAAc,GAAG,MAAM,CAAC;AAE7B,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAC/C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,WAAW,EAAE,QAAQ,GAAG,eAAe,GAAG,IAAI,CAAC;IAC1D,gBAAgB,EAAE,MAAM,YAAY,CAAC;IACrC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CAC3C;AAqCD,eAAO,MAAM,MAAM,iGA+ClB,CAAC"}
@@ -11,7 +11,7 @@ export declare class GPUOffscreenCanvas implements OffscreenCanvas {
11
11
  getContext(contextId: "webgl", options?: any): WebGLRenderingContext | null;
12
12
  getContext(contextId: "webgl2", options?: any): WebGL2RenderingContext | null;
13
13
  getContext(contextId: OffscreenRenderingContextId, options?: any): OffscreenRenderingContext | null;
14
- getContext(contextId: "webgpu"): GPUCanvasContext | null;
14
+ getContext(contextId: "webgpu"): GPUOffscreenCanvasContext | null;
15
15
  transferToImageBitmap(): ImageBitmap;
16
16
  addEventListener<K extends keyof OffscreenCanvasEventMap>(_type: K, _listener: (this: OffscreenCanvas, ev: OffscreenCanvasEventMap[K]) => any, _options?: boolean | AddEventListenerOptions): void;
17
17
  removeEventListener<K extends keyof OffscreenCanvasEventMap>(_type: K, _listener: (this: OffscreenCanvas, ev: OffscreenCanvasEventMap[K]) => any, _options?: boolean | EventListenerOptions): void;
@@ -23,4 +23,19 @@ export declare class GPUOffscreenCanvas implements OffscreenCanvas {
23
23
  format: GPUTextureFormat;
24
24
  }>;
25
25
  }
26
+ declare class GPUOffscreenCanvasContext implements GPUCanvasContext {
27
+ readonly canvas: OffscreenCanvas;
28
+ __brand: "GPUCanvasContext";
29
+ private textureFormat;
30
+ private texture;
31
+ private device;
32
+ constructor(canvas: OffscreenCanvas);
33
+ present(): void;
34
+ getDevice(): GPUDevice;
35
+ getTexture(): GPUTexture;
36
+ configure(config: GPUCanvasConfiguration): undefined;
37
+ unconfigure(): undefined;
38
+ getCurrentTexture(): GPUTexture;
39
+ }
40
+ export {};
26
41
  //# sourceMappingURL=Offscreen.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Offscreen.d.ts","sourceRoot":"","sources":["../../../src/Offscreen.ts"],"names":[],"mappings":"AACA,qBAAa,kBAAmB,YAAW,eAAe;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAQ;IACzE,iBAAiB,EAAE,CAAC,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE7E,OAAO,CAAC,OAAO,CAA4B;gBAE/B,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMzC,aAAa,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D,UAAU,CACR,SAAS,EAAE,IAAI,EACf,OAAO,CAAC,EAAE,GAAG,GACZ,iCAAiC,GAAG,IAAI;IAC3C,UAAU,CACR,SAAS,EAAE,gBAAgB,EAC3B,OAAO,CAAC,EAAE,GAAG,GACZ,2BAA2B,GAAG,IAAI;IACrC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,qBAAqB,GAAG,IAAI;IAC3E,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,sBAAsB,GAAG,IAAI;IAC7E,UAAU,CACR,SAAS,EAAE,2BAA2B,EACtC,OAAO,CAAC,EAAE,GAAG,GACZ,yBAAyB,GAAG,IAAI;IACnC,UAAU,CAAC,SAAS,EAAE,QAAQ,GAAG,gBAAgB,GAAG,IAAI;IAYxD,qBAAqB,IAAI,WAAW;IAKpC,gBAAgB,CAAC,CAAC,SAAS,MAAM,uBAAuB,EACtD,KAAK,EAAE,CAAC,EACR,SAAS,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC,KAAK,GAAG,EACzE,QAAQ,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC3C,IAAI;IAKP,mBAAmB,CAAC,CAAC,SAAS,MAAM,uBAAuB,EACzD,KAAK,EAAE,CAAC,EACR,SAAS,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC,KAAK,GAAG,EACzE,QAAQ,CAAC,EAAE,OAAO,GAAG,oBAAoB,GACxC,IAAI;IAKP,aAAa,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO;IAKrC,YAAY;;;;;;CA6Bb"}
1
+ {"version":3,"file":"Offscreen.d.ts","sourceRoot":"","sources":["../../../src/Offscreen.ts"],"names":[],"mappings":"AACA,qBAAa,kBAAmB,YAAW,eAAe;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAQ;IACzE,iBAAiB,EAAE,CAAC,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE7E,OAAO,CAAC,OAAO,CAA4B;gBAE/B,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMzC,aAAa,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D,UAAU,CACR,SAAS,EAAE,IAAI,EACf,OAAO,CAAC,EAAE,GAAG,GACZ,iCAAiC,GAAG,IAAI;IAC3C,UAAU,CACR,SAAS,EAAE,gBAAgB,EAC3B,OAAO,CAAC,EAAE,GAAG,GACZ,2BAA2B,GAAG,IAAI;IACrC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,qBAAqB,GAAG,IAAI;IAC3E,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,sBAAsB,GAAG,IAAI;IAC7E,UAAU,CACR,SAAS,EAAE,2BAA2B,EACtC,OAAO,CAAC,EAAE,GAAG,GACZ,yBAAyB,GAAG,IAAI;IACnC,UAAU,CAAC,SAAS,EAAE,QAAQ,GAAG,yBAAyB,GAAG,IAAI;IAYjE,qBAAqB,IAAI,WAAW;IAKpC,gBAAgB,CAAC,CAAC,SAAS,MAAM,uBAAuB,EACtD,KAAK,EAAE,CAAC,EACR,SAAS,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC,KAAK,GAAG,EACzE,QAAQ,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC3C,IAAI;IAKP,mBAAmB,CAAC,CAAC,SAAS,MAAM,uBAAuB,EACzD,KAAK,EAAE,CAAC,EACR,SAAS,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC,KAAK,GAAG,EACzE,QAAQ,CAAC,EAAE,OAAO,GAAG,oBAAoB,GACxC,IAAI;IAKP,aAAa,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO;IAKrC,YAAY;;;;;;CA6Bb;AAED,cAAM,yBAA0B,YAAW,gBAAgB;aAO7B,MAAM,EAAE,eAAe;IANnD,OAAO,qBAA+B;IAEtC,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,MAAM,CAA0B;gBAEZ,MAAM,EAAE,eAAe;IAInD,OAAO;IAIP,SAAS;IAOT,UAAU;IAOV,SAAS,CAAC,MAAM,EAAE,sBAAsB;IAcxC,WAAW;IAQX,iBAAiB,IAAI,UAAU;CAMhC"}
@@ -0,0 +1,13 @@
1
+ import type { RNCanvasContext, CanvasRef, NativeCanvas } from "./Canvas";
2
+ type Unsubscribe = () => void;
3
+ export declare const useSurface: () => {
4
+ ref: import("react").RefObject<CanvasRef>;
5
+ surface: NativeCanvas | null;
6
+ };
7
+ export declare const useGPUContext: () => {
8
+ ref: import("react").RefObject<CanvasRef>;
9
+ context: RNCanvasContext | null;
10
+ };
11
+ export declare const useCanvasEffect: (effect: () => void | Unsubscribe | Promise<Unsubscribe | void> | Promise<void>) => import("react").RefObject<CanvasRef>;
12
+ export {};
13
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEzE,KAAK,WAAW,GAAG,MAAM,IAAI,CAAC;AAE9B,eAAO,MAAM,UAAU;;;CAOtB,CAAC;AAEF,eAAO,MAAM,aAAa;;;CAOzB,CAAC;AAEF,eAAO,MAAM,eAAe,WAClB,MACJ,IAAI,GACJ,WAAW,GACX,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,yCAuBlB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export * from "./Canvas";
2
2
  export * from "./Offscreen";
3
3
  export * from "./WebGPUViewNativeComponent";
4
- export * from "./utils";
4
+ export * from "./hooks";
5
5
  export { default as WebGPUModule } from "./NativeWebGPUModule";
6
+ export declare const warnIfNotHardwareAccelerated: (adapter: GPUAdapter) => void;
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAGA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAGA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE/D,eAAO,MAAM,4BAA4B,YAAa,UAAU,SAM/D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-wgpu",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "React Native WebGPU",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/src/Canvas.tsx CHANGED
@@ -1,8 +1,17 @@
1
- import type { ViewProps } from "react-native";
2
- import { forwardRef, useEffect, useImperativeHandle, useState } from "react";
1
+ import type { ViewProps, LayoutChangeEvent } from "react-native";
2
+ import { View } from "react-native";
3
+ import {
4
+ forwardRef,
5
+ useEffect,
6
+ useImperativeHandle,
7
+ useRef,
8
+ useState,
9
+ useLayoutEffect,
10
+ useCallback,
11
+ } from "react";
12
+ import type { RefObject } from "react";
3
13
 
4
14
  import WebGPUNativeView from "./WebGPUViewNativeComponent";
5
- import WebGPUNativeModule from "./NativeWebGPUModule";
6
15
 
7
16
  let CONTEXT_COUNTER = 1;
8
17
  function generateContextId() {
@@ -10,12 +19,16 @@ function generateContextId() {
10
19
  }
11
20
 
12
21
  declare global {
13
- // eslint-disable-next-line no-var
14
- var __WebGPUContextRegistry: Record<number, NativeCanvas>;
15
22
  // eslint-disable-next-line no-var
16
23
  var RNWebGPU: {
17
24
  gpu: GPU;
18
- MakeWebGPUCanvasContext: (nativeCanvas: NativeCanvas) => RNCanvasContext;
25
+ fabric: boolean;
26
+ getNativeSurface: (contextId: number) => NativeCanvas;
27
+ MakeWebGPUCanvasContext: (
28
+ contextId: number,
29
+ width: number,
30
+ height: number,
31
+ ) => RNCanvasContext;
19
32
  DecodeToUTF8: (buffer: NodeJS.ArrayBufferView | ArrayBuffer) => string;
20
33
  createImageBitmap: typeof createImageBitmap;
21
34
  };
@@ -31,9 +44,6 @@ export interface NativeCanvas {
31
44
  clientHeight: number;
32
45
  }
33
46
 
34
- global.__WebGPUContextRegistry = {};
35
- const WebGPUContextRegistry = global.__WebGPUContextRegistry;
36
-
37
47
  export type RNCanvasContext = GPUCanvasContext & {
38
48
  present: () => void;
39
49
  };
@@ -41,35 +51,89 @@ export type RNCanvasContext = GPUCanvasContext & {
41
51
  export interface CanvasRef {
42
52
  getContext(contextName: "webgpu"): RNCanvasContext | null;
43
53
  getNativeSurface: () => NativeCanvas;
54
+ whenReady: (callback: () => void) => void;
44
55
  }
45
56
 
46
- export const Canvas = forwardRef<CanvasRef, ViewProps>((props, ref) => {
47
- const [contextId, _] = useState(() => generateContextId());
57
+ interface Size {
58
+ width: number;
59
+ height: number;
60
+ }
48
61
 
49
- useImperativeHandle(ref, () => ({
50
- getNativeSurface: () => {
51
- WebGPUNativeModule.createSurfaceContext(contextId);
52
- return WebGPUContextRegistry[contextId];
53
- },
54
- getContext(contextName: "webgpu"): RNCanvasContext | null {
55
- if (contextName !== "webgpu") {
56
- throw new Error(`[WebGPU] Unsupported context: ${contextName}`);
57
- }
58
- WebGPUNativeModule.createSurfaceContext(contextId);
59
- const nativeSurface = WebGPUContextRegistry[contextId];
60
- if (!nativeSurface) {
61
- return null;
62
+ const useSizeFabric = (ref: RefObject<View>) => {
63
+ const [size, setSize] = useState<null | Size>(null);
64
+ useLayoutEffect(() => {
65
+ if (!ref.current) {
66
+ throw new Error("Canvas ref is null");
67
+ }
68
+ ref.current.measureInWindow((_x, _y, width, height) => {
69
+ setSize({ width, height });
70
+ });
71
+ }, [ref]);
72
+ return { size, onLayout: undefined };
73
+ };
74
+
75
+ const useSizePaper = (_ref: RefObject<View>) => {
76
+ const [size, setSize] = useState<null | Size>(null);
77
+ const onLayout = useCallback<(event: LayoutChangeEvent) => void>(
78
+ ({
79
+ nativeEvent: {
80
+ layout: { width, height },
81
+ },
82
+ }) => {
83
+ if (size === null) {
84
+ setSize({ width, height });
62
85
  }
63
- const ctx = RNWebGPU.MakeWebGPUCanvasContext(nativeSurface);
64
- return ctx;
65
86
  },
66
- }));
67
-
68
- useEffect(() => {
69
- return () => {
70
- delete WebGPUContextRegistry[contextId];
71
- };
72
- }, [contextId]);
87
+ [size],
88
+ );
89
+ return { size, onLayout };
90
+ };
73
91
 
74
- return <WebGPUNativeView {...props} contextId={contextId} />;
75
- });
92
+ export const Canvas = forwardRef<CanvasRef, ViewProps>(
93
+ ({ onLayout: _onLayout, ...props }, ref) => {
94
+ const viewRef = useRef(null);
95
+ const FABRIC = RNWebGPU.fabric;
96
+ const useSize = FABRIC ? useSizeFabric : useSizePaper;
97
+ const [contextId, _] = useState(() => generateContextId());
98
+ const cb = useRef<() => void>();
99
+ const { size, onLayout } = useSize(viewRef);
100
+ useEffect(() => {
101
+ if (size && cb.current) {
102
+ cb.current();
103
+ }
104
+ }, [size]);
105
+ useImperativeHandle(ref, () => ({
106
+ getNativeSurface: () => {
107
+ if (size === null) {
108
+ throw new Error("[WebGPU] Canvas size is not available yet");
109
+ }
110
+ return RNWebGPU.getNativeSurface(contextId);
111
+ },
112
+ whenReady(callback: () => void) {
113
+ if (size === null) {
114
+ cb.current = callback;
115
+ } else {
116
+ callback();
117
+ }
118
+ },
119
+ getContext(contextName: "webgpu"): RNCanvasContext | null {
120
+ if (contextName !== "webgpu") {
121
+ throw new Error(`[WebGPU] Unsupported context: ${contextName}`);
122
+ }
123
+ if (size === null) {
124
+ throw new Error("[WebGPU] Canvas size is not available yet");
125
+ }
126
+ return RNWebGPU.MakeWebGPUCanvasContext(
127
+ contextId,
128
+ size.width,
129
+ size.height,
130
+ );
131
+ },
132
+ }));
133
+ return (
134
+ <View ref={viewRef} onLayout={onLayout} {...props}>
135
+ <WebGPUNativeView style={{ flex: 1 }} contextId={contextId} />
136
+ </View>
137
+ );
138
+ },
139
+ );
package/src/Offscreen.ts CHANGED
@@ -33,11 +33,11 @@ export class GPUOffscreenCanvas implements OffscreenCanvas {
33
33
  contextId: OffscreenRenderingContextId,
34
34
  options?: any,
35
35
  ): OffscreenRenderingContext | null;
36
- getContext(contextId: "webgpu"): GPUCanvasContext | null;
36
+ getContext(contextId: "webgpu"): GPUOffscreenCanvasContext | null;
37
37
  getContext(
38
38
  contextId: unknown,
39
39
  _options?: any,
40
- ): OffscreenRenderingContext | GPUCanvasContext | null {
40
+ ): OffscreenRenderingContext | GPUOffscreenCanvasContext | null {
41
41
  if (contextId === "webgpu") {
42
42
  return this.context;
43
43
  }
@@ -115,6 +115,10 @@ class GPUOffscreenCanvasContext implements GPUCanvasContext {
115
115
  this.textureFormat = navigator.gpu.getPreferredCanvasFormat();
116
116
  }
117
117
 
118
+ present() {
119
+ // Do nothing
120
+ }
121
+
118
122
  getDevice() {
119
123
  if (!this.device) {
120
124
  throw new Error("Device is not configured.");
package/src/hooks.ts ADDED
@@ -0,0 +1,53 @@
1
+ import { useEffect, useRef, useState } from "react";
2
+
3
+ import type { RNCanvasContext, CanvasRef, NativeCanvas } from "./Canvas";
4
+
5
+ type Unsubscribe = () => void;
6
+
7
+ export const useSurface = () => {
8
+ const [surface, setSurface] = useState<NativeCanvas | null>(null);
9
+ const ref = useCanvasEffect(() => {
10
+ const sur = ref.current!.getNativeSurface();
11
+ setSurface(sur);
12
+ });
13
+ return { ref, surface };
14
+ };
15
+
16
+ export const useGPUContext = () => {
17
+ const [context, setContext] = useState<RNCanvasContext | null>(null);
18
+ const ref = useCanvasEffect(() => {
19
+ const ctx = ref.current!.getContext("webgpu")!;
20
+ setContext(ctx);
21
+ });
22
+ return { ref, context };
23
+ };
24
+
25
+ export const useCanvasEffect = (
26
+ effect: () =>
27
+ | void
28
+ | Unsubscribe
29
+ | Promise<Unsubscribe | void>
30
+ | Promise<void>,
31
+ ) => {
32
+ const unsub = useRef<Unsubscribe | null | Promise<Unsubscribe | void>>(null);
33
+ const ref = useRef<CanvasRef>(null);
34
+ useEffect(() => {
35
+ ref.current!.whenReady(async () => {
36
+ const sub = effect();
37
+ if (sub) {
38
+ unsub.current = sub;
39
+ }
40
+ });
41
+ return () => {
42
+ if (unsub.current) {
43
+ if (unsub.current instanceof Promise) {
44
+ unsub.current.then((sub) => sub && sub());
45
+ } else {
46
+ unsub.current();
47
+ }
48
+ }
49
+ };
50
+ // eslint-disable-next-line react-hooks/exhaustive-deps
51
+ }, []);
52
+ return ref;
53
+ };
package/src/index.tsx CHANGED
@@ -4,9 +4,17 @@ import WebGPUNativeModule from "./NativeWebGPUModule";
4
4
  export * from "./Canvas";
5
5
  export * from "./Offscreen";
6
6
  export * from "./WebGPUViewNativeComponent";
7
- export * from "./utils";
7
+ export * from "./hooks";
8
8
  export { default as WebGPUModule } from "./NativeWebGPUModule";
9
9
 
10
+ export const warnIfNotHardwareAccelerated = (adapter: GPUAdapter) => {
11
+ if (adapter.info.architecture === "swiftshader") {
12
+ console.warn(
13
+ "GPUAdapter is not hardware accelerated. This is common on Android emulators. Rendering will be slow.",
14
+ );
15
+ }
16
+ };
17
+
10
18
  const GPU: any = {};
11
19
  GPU[Symbol.hasInstance] = function (instance: object) {
12
20
  return "__brand" in instance && instance.__brand === "GPU";