react-native-wgpu 0.1.14 → 0.1.16

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.
@@ -68,4 +68,4 @@ extern "C" JNIEXPORT void JNICALL Java_com_webgpu_WebGPUView_onSurfaceDestroy(
68
68
  JNIEnv *env, jobject thiz, jint contextId) {
69
69
  auto &registry = rnwgpu::SurfaceRegistry::getInstance();
70
70
  registry.removeSurfaceInfo(contextId);
71
- }
71
+ }
@@ -0,0 +1,88 @@
1
+ package com.webgpu;
2
+
3
+ import android.annotation.SuppressLint;
4
+ import android.content.Context;
5
+ import android.graphics.Bitmap;
6
+ import android.graphics.Canvas;
7
+ import android.graphics.Matrix;
8
+ import android.graphics.PixelFormat;
9
+ import android.hardware.HardwareBuffer;
10
+ import android.media.Image;
11
+ import android.media.ImageReader;
12
+ import android.os.Build;
13
+ import android.view.View;
14
+
15
+ import androidx.annotation.NonNull;
16
+ import androidx.annotation.RequiresApi;
17
+
18
+ import java.util.LinkedList;
19
+ import java.util.Queue;
20
+
21
+ @SuppressLint("ViewConstructor")
22
+ @RequiresApi(api = Build.VERSION_CODES.Q)
23
+ public class WebGPUAHBView extends View {
24
+
25
+ private final Queue<ImageReader> mImageReaders = new LinkedList<>();
26
+ private Bitmap mBitmap = null;
27
+
28
+ private final Matrix matrix = new Matrix();
29
+
30
+ WebGPUAPI mApi;
31
+
32
+ public WebGPUAHBView(Context context, WebGPUAPI api) {
33
+ super(context);
34
+ mApi = api;
35
+ }
36
+
37
+ @Override
38
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
39
+ super.onLayout(changed, left, top, right, bottom);
40
+ long usage = HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE |
41
+ HardwareBuffer.USAGE_GPU_COLOR_OUTPUT;
42
+ ImageReader imageReader = ImageReader.newInstance(getWidth(), getHeight(), PixelFormat.RGBA_8888, 2, usage);
43
+ if (mImageReaders.isEmpty()) {
44
+ mApi.surfaceCreated(imageReader.getSurface());
45
+ } else {
46
+ mApi.surfaceChanged(imageReader.getSurface());
47
+ }
48
+ imageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
49
+ @Override
50
+ public void onImageAvailable(ImageReader reader) {
51
+ try (Image image = reader.acquireLatestImage()) {
52
+ if (image != null) {
53
+ HardwareBuffer hb = image.getHardwareBuffer();
54
+ if (hb != null) {
55
+ Bitmap bitmap = Bitmap.wrapHardwareBuffer(hb, null);
56
+ if (bitmap != null) {
57
+ mBitmap = bitmap;
58
+ hb.close();
59
+ invalidate();
60
+ ImageReader imageReader = mImageReaders.poll();
61
+ ImageReader ir;
62
+ while((ir = mImageReaders.poll()) != null) {
63
+ ir.close();
64
+ }
65
+ mImageReaders.add(imageReader);
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }, null);
72
+ mImageReaders.add(imageReader);
73
+ }
74
+
75
+ @Override
76
+ protected void onDraw(@NonNull Canvas canvas) {
77
+ super.onDraw(canvas);
78
+ if (mBitmap != null) {
79
+ canvas.drawBitmap(mBitmap, matrix, null);
80
+ }
81
+ }
82
+
83
+ @Override
84
+ protected void onDetachedFromWindow() {
85
+ super.onDetachedFromWindow();
86
+ mApi.surfaceDestroyed();
87
+ }
88
+ }
@@ -0,0 +1,20 @@
1
+ package com.webgpu;
2
+
3
+ import android.view.Surface;
4
+
5
+ import com.facebook.proguard.annotations.DoNotStrip;
6
+
7
+ public interface WebGPUAPI {
8
+
9
+ void surfaceCreated(
10
+ Surface surface
11
+ );
12
+
13
+ void surfaceChanged(
14
+ Surface surface
15
+ );
16
+
17
+ void surfaceDestroyed();
18
+
19
+ void surfaceOffscreen();
20
+ }
@@ -0,0 +1,61 @@
1
+ package com.webgpu;
2
+
3
+ import android.content.Context;
4
+ import android.view.Surface;
5
+ import android.view.View;
6
+ import com.facebook.proguard.annotations.DoNotStrip;
7
+
8
+ public abstract class WebGPUBaseView extends View {
9
+ protected Integer mContextId;
10
+
11
+ public WebGPUBaseView(Context context, Integer contextId) {
12
+ super(context);
13
+ mContextId = contextId;
14
+ }
15
+
16
+ protected void handleSurfaceCreate(Surface surface) {
17
+ float density = getResources().getDisplayMetrics().density;
18
+ float scaledWidth = getWidth() / density;
19
+ float scaledHeight = getHeight() / density;
20
+ onSurfaceCreate(surface, mContextId, scaledWidth, scaledHeight);
21
+ }
22
+
23
+ protected void handleSurfaceChanged(Surface surface) {
24
+ float density = getResources().getDisplayMetrics().density;
25
+ float scaledWidth = getWidth() / density;
26
+ float scaledHeight = getHeight() / density;
27
+ onSurfaceChanged(surface, mContextId, scaledWidth, scaledHeight);
28
+ }
29
+
30
+ protected void handleSurfaceDestroyed() {
31
+ onSurfaceDestroy(mContextId);
32
+ }
33
+
34
+ @Override
35
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
36
+ super.onLayout(changed, left, top, right, bottom);
37
+ }
38
+
39
+
40
+ @DoNotStrip
41
+ private native void onSurfaceCreate(
42
+ Surface surface,
43
+ int contextId,
44
+ float width,
45
+ float height
46
+ );
47
+
48
+ @DoNotStrip
49
+ private native void onSurfaceChanged(
50
+ Surface surface,
51
+ int contextId,
52
+ float width,
53
+ float height
54
+ );
55
+
56
+ @DoNotStrip
57
+ private native void onSurfaceDestroy(int contextId);
58
+
59
+ @DoNotStrip
60
+ protected native void switchToOffscreenSurface(int contextId);
61
+ }
@@ -0,0 +1,41 @@
1
+ package com.webgpu;
2
+
3
+ import android.annotation.SuppressLint;
4
+ import android.content.Context;
5
+ import android.view.SurfaceHolder;
6
+ import android.view.SurfaceView;
7
+
8
+ import androidx.annotation.NonNull;
9
+
10
+ @SuppressLint("ViewConstructor")
11
+ public class WebGPUSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
12
+
13
+ WebGPUAPI mApi;
14
+
15
+ public WebGPUSurfaceView(Context context, WebGPUAPI api) {
16
+ super(context);
17
+ mApi = api;
18
+ getHolder().addCallback(this);
19
+ }
20
+
21
+ @Override
22
+ protected void onDetachedFromWindow() {
23
+ super.onDetachedFromWindow();
24
+ mApi.surfaceDestroyed();
25
+ }
26
+
27
+ @Override
28
+ public void surfaceCreated(@NonNull SurfaceHolder holder) {
29
+ mApi.surfaceCreated(holder.getSurface());
30
+ }
31
+
32
+ @Override
33
+ public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
34
+ mApi.surfaceChanged(holder.getSurface());
35
+ }
36
+
37
+ @Override
38
+ public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
39
+ mApi.surfaceOffscreen();
40
+ }
41
+ }
@@ -0,0 +1,45 @@
1
+ package com.webgpu;
2
+
3
+ import android.annotation.SuppressLint;
4
+ import android.content.Context;
5
+ import android.graphics.SurfaceTexture;
6
+ import android.view.Surface;
7
+ import android.view.TextureView;
8
+ import androidx.annotation.NonNull;
9
+
10
+ import org.w3c.dom.Text;
11
+
12
+ @SuppressLint("ViewConstructor")
13
+ public class WebGPUTextureView extends TextureView implements TextureView.SurfaceTextureListener {
14
+
15
+ WebGPUAPI mApi;
16
+
17
+ public WebGPUTextureView(Context context, WebGPUAPI api) {
18
+ super(context);
19
+ mApi = api;
20
+ setSurfaceTextureListener(this);
21
+ }
22
+
23
+ @Override
24
+ public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surfaceTexture, int width, int height) {
25
+ Surface surface = new Surface(surfaceTexture);
26
+ mApi.surfaceCreated(surface);
27
+ }
28
+
29
+ @Override
30
+ public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surfaceTexture, int width, int height) {
31
+ Surface surface = new Surface(surfaceTexture);
32
+ mApi.surfaceChanged(surface);
33
+ }
34
+
35
+ @Override
36
+ public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surfaceTexture) {
37
+ mApi.surfaceDestroyed();
38
+ return true;
39
+ }
40
+
41
+ @Override
42
+ public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surfaceTexture) {
43
+ // No implementation needed
44
+ }
45
+ }
@@ -1,26 +1,25 @@
1
1
  package com.webgpu;
2
2
 
3
- import androidx.annotation.NonNull;
4
-
5
3
  import android.content.Context;
4
+ import android.os.Build;
6
5
  import android.view.Surface;
7
- import android.view.SurfaceHolder;
8
- import android.view.SurfaceView;
6
+ import android.view.View;
9
7
 
10
8
  import com.facebook.proguard.annotations.DoNotStrip;
11
9
  import com.facebook.react.uimanager.ThemedReactContext;
10
+ import com.facebook.react.views.view.ReactViewGroup;
12
11
 
13
- public class WebGPUView extends SurfaceView implements SurfaceHolder.Callback {
14
-
15
- private Integer mContextId;
12
+ public class WebGPUView extends ReactViewGroup implements WebGPUAPI {
13
+ private int mContextId;
14
+ private boolean mTransparent;
16
15
  private WebGPUModule mModule;
16
+ private View mView;
17
17
 
18
- public WebGPUView(Context context) {
18
+ WebGPUView(Context context) {
19
19
  super(context);
20
- getHolder().addCallback(this);
21
20
  }
22
21
 
23
- public void setContextId(Integer contextId) {
22
+ public void setContextId(int contextId) {
24
23
  if (mModule == null) {
25
24
  Context context = getContext();
26
25
  if (context instanceof ThemedReactContext) {
@@ -30,35 +29,52 @@ public class WebGPUView extends SurfaceView implements SurfaceHolder.Callback {
30
29
  mContextId = contextId;
31
30
  }
32
31
 
32
+ public void setTransparent(boolean transparent) {
33
+ Context ctx = getContext();
34
+ if (mTransparent != transparent) {
35
+ removeAllViews();
36
+ }
37
+ mTransparent = transparent;
38
+ // if (mTransparent && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
39
+ // mView = new WebGPUAHBView(ctx, this);
40
+ // } else
41
+ if (transparent) {
42
+ mView = new WebGPUTextureView(ctx, this);
43
+ } else {
44
+ mView = new WebGPUSurfaceView(ctx, this);
45
+ }
46
+ addView(mView);
47
+ }
48
+
33
49
  @Override
34
50
  protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
35
51
  super.onLayout(changed, left, top, right, bottom);
52
+ mView.layout(0, 0, this.getMeasuredWidth(), this.getMeasuredHeight());
36
53
  }
37
54
 
38
55
  @Override
39
- public void surfaceCreated(@NonNull SurfaceHolder holder) {
56
+ public void surfaceCreated(Surface surface) {
40
57
  float density = getResources().getDisplayMetrics().density;
41
58
  float width = getWidth() / density;
42
59
  float height = getHeight() / density;
43
- onSurfaceCreate(holder.getSurface(), mContextId, width, height);
60
+ onSurfaceCreate(surface, mContextId, width, height);
44
61
  }
45
62
 
46
63
  @Override
47
- public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
64
+ public void surfaceChanged(Surface surface) {
48
65
  float density = getResources().getDisplayMetrics().density;
49
- float scaledWidth = width / density;
50
- float scaledHeight = height / density;
51
- onSurfaceChanged(holder.getSurface(), mContextId, scaledWidth, scaledHeight);
66
+ float width = getWidth() / density;
67
+ float height = getHeight() / density;
68
+ onSurfaceChanged(surface, mContextId, width, height);
52
69
  }
53
70
 
54
71
  @Override
55
- protected void onDetachedFromWindow() {
56
- super.onDetachedFromWindow();
72
+ public void surfaceDestroyed() {
57
73
  onSurfaceDestroy(mContextId);
58
74
  }
59
75
 
60
76
  @Override
61
- public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
77
+ public void surfaceOffscreen() {
62
78
  switchToOffscreenSurface(mContextId);
63
79
  }
64
80
 
@@ -78,10 +94,10 @@ public class WebGPUView extends SurfaceView implements SurfaceHolder.Callback {
78
94
  float height
79
95
  );
80
96
 
81
-
82
97
  @DoNotStrip
83
98
  private native void onSurfaceDestroy(int contextId);
84
99
 
85
100
  @DoNotStrip
86
101
  private native void switchToOffscreenSurface(int contextId);
102
+
87
103
  }
@@ -17,11 +17,18 @@ public class WebGPUViewManager extends WebGPUViewManagerSpec<WebGPUView> {
17
17
  return NAME;
18
18
  }
19
19
 
20
+ @NonNull
20
21
  @Override
21
- public WebGPUView createViewInstance(ThemedReactContext context) {
22
+ public WebGPUView createViewInstance(@NonNull ThemedReactContext context) {
22
23
  return new WebGPUView(context);
23
24
  }
24
25
 
26
+ @Override
27
+ @ReactProp(name = "androidTransparency")
28
+ public void setAndroidTransparency(WebGPUView view, boolean value) {
29
+ view.setTransparent(value);
30
+ }
31
+
25
32
  @Override
26
33
  @ReactProp(name = "contextId")
27
34
  public void setContextId(WebGPUView view, int value) {
@@ -8,4 +8,5 @@ import com.facebook.react.uimanager.SimpleViewManager;
8
8
 
9
9
  public abstract class WebGPUViewManagerSpec<T extends View> extends SimpleViewManager<T> {
10
10
  public abstract void setContextId(T view, int contextId);
11
+ public abstract void setAndroidTransparency(T view, boolean transparency);
11
12
  }
@@ -50,14 +50,18 @@ public:
50
50
 
51
51
  void *switchToOffscreen() {
52
52
  std::unique_lock<std::shared_mutex> lock(_mutex);
53
- wgpu::TextureDescriptor textureDesc;
54
- textureDesc.usage = wgpu::TextureUsage::RenderAttachment |
55
- wgpu::TextureUsage::CopySrc |
56
- wgpu::TextureUsage::TextureBinding;
57
- textureDesc.format = config.format;
58
- textureDesc.size.width = config.width;
59
- textureDesc.size.height = config.height;
60
- texture = config.device.CreateTexture(&textureDesc);
53
+ // We only do this if the onscreen surface is configured.
54
+ auto isConfigured = config.device != nullptr;
55
+ if (isConfigured) {
56
+ wgpu::TextureDescriptor textureDesc;
57
+ textureDesc.usage = wgpu::TextureUsage::RenderAttachment |
58
+ wgpu::TextureUsage::CopySrc |
59
+ wgpu::TextureUsage::TextureBinding;
60
+ textureDesc.format = config.format;
61
+ textureDesc.size.width = config.width;
62
+ textureDesc.size.height = config.height;
63
+ texture = config.device.CreateTexture(&textureDesc);
64
+ }
61
65
  surface = nullptr;
62
66
  return nativeSurface;
63
67
  }
@@ -67,6 +67,14 @@ static void convertJSUnionToEnum(const std::string &inUnion,
67
67
  *outEnum = wgpu::BlendFactor::Constant;
68
68
  } else if (inUnion == "one-minus-constant") {
69
69
  *outEnum = wgpu::BlendFactor::OneMinusConstant;
70
+ } else if (inUnion == "src1") {
71
+ *outEnum = wgpu::BlendFactor::Src1;
72
+ } else if (inUnion == "one-minus-src1") {
73
+ *outEnum = wgpu::BlendFactor::OneMinusSrc1;
74
+ } else if (inUnion == "src1-alpha") {
75
+ *outEnum = wgpu::BlendFactor::Src1Alpha;
76
+ } else if (inUnion == "one-minus-src1-alpha") {
77
+ *outEnum = wgpu::BlendFactor::OneMinusSrc1Alpha;
70
78
  } else {
71
79
  throw invalidUnion(inUnion);
72
80
  }
@@ -114,6 +122,18 @@ static void convertEnumToJSUnion(wgpu::BlendFactor inEnum,
114
122
  case wgpu::BlendFactor::OneMinusConstant:
115
123
  *outUnion = "one-minus-constant";
116
124
  break;
125
+ case wgpu::BlendFactor::Src1:
126
+ *outUnion = "src1";
127
+ break;
128
+ case wgpu::BlendFactor::OneMinusSrc1:
129
+ *outUnion = "one-minus-src1";
130
+ break;
131
+ case wgpu::BlendFactor::Src1Alpha:
132
+ *outUnion = "src1-alpha";
133
+ break;
134
+ case wgpu::BlendFactor::OneMinusSrc1Alpha:
135
+ *outUnion = "one-minus-src1-alpha";
136
+ break;
117
137
  default:
118
138
  throw invalidEnum(inEnum);
119
139
  }
@@ -412,6 +432,10 @@ static void convertJSUnionToEnum(const std::string &inUnion,
412
432
  *outEnum = wgpu::FeatureName::BGRA8UnormStorage;
413
433
  } else if (inUnion == "float32-filterable") {
414
434
  *outEnum = wgpu::FeatureName::Float32Filterable;
435
+ } else if (inUnion == "clip-distances") {
436
+ *outEnum = wgpu::FeatureName::ClipDistances;
437
+ } else if (inUnion == "dual-source-blending") {
438
+ *outEnum = wgpu::FeatureName::DualSourceBlending;
415
439
  } else {
416
440
  throw invalidUnion(inUnion);
417
441
  }
@@ -453,6 +477,12 @@ static void convertEnumToJSUnion(wgpu::FeatureName inEnum,
453
477
  case wgpu::FeatureName::Float32Filterable:
454
478
  *outUnion = "float32-filterable";
455
479
  break;
480
+ case wgpu::FeatureName::ClipDistances:
481
+ *outUnion = "clip-distances";
482
+ break;
483
+ case wgpu::FeatureName::DualSourceBlending:
484
+ *outUnion = "dual-source-blending";
485
+ break;
456
486
  default:
457
487
  throw invalidEnum(inEnum);
458
488
  }
@@ -55,6 +55,7 @@ const useSizePaper = _ref => {
55
55
  };
56
56
  const Canvas = exports.Canvas = /*#__PURE__*/(0, _react.forwardRef)(({
57
57
  onLayout: _onLayout,
58
+ androidTransparency,
58
59
  ...props
59
60
  }, ref) => {
60
61
  const viewRef = (0, _react.useRef)(null);
@@ -72,6 +73,7 @@ const Canvas = exports.Canvas = /*#__PURE__*/(0, _react.forwardRef)(({
72
73
  }
73
74
  }, [size]);
74
75
  (0, _react.useImperativeHandle)(ref, () => ({
76
+ getContextId: () => contextId,
75
77
  getNativeSurface: () => {
76
78
  if (size === null) {
77
79
  throw new Error("[WebGPU] Canvas size is not available yet");
@@ -96,13 +98,15 @@ const Canvas = exports.Canvas = /*#__PURE__*/(0, _react.forwardRef)(({
96
98
  }
97
99
  }));
98
100
  return /*#__PURE__*/React.createElement(_reactNative.View, _extends({
101
+ collapsable: false,
99
102
  ref: viewRef,
100
103
  onLayout: onLayout
101
104
  }, props), /*#__PURE__*/React.createElement(_WebGPUViewNativeComponent.default, {
102
105
  style: {
103
106
  flex: 1
104
107
  },
105
- contextId: contextId
108
+ contextId: contextId,
109
+ androidTransparency: !!androidTransparency
106
110
  }));
107
111
  });
108
112
  //# sourceMappingURL=Canvas.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_react","_WebGPUViewNativeComponent","_interopRequireDefault","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","CONTEXT_COUNTER","generateContextId","useSizeFabric","ref","size","setSize","useState","useLayoutEffect","current","Error","measureInWindow","_x","_y","width","height","onLayout","undefined","useSizePaper","_ref","useCallback","nativeEvent","layout","Canvas","exports","forwardRef","_onLayout","props","viewRef","useRef","FABRIC","RNWebGPU","fabric","useSize","contextId","_","cb","useEffect","useImperativeHandle","getNativeSurface","whenReady","callback","getContext","contextName","MakeWebGPUCanvasContext","React","createElement","View","style","flex"],"sourceRoot":"../../src","sources":["Canvas.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_react","_WebGPUViewNativeComponent","_interopRequireDefault","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","CONTEXT_COUNTER","generateContextId","useSizeFabric","ref","size","setSize","useState","useLayoutEffect","current","Error","measureInWindow","_x","_y","width","height","onLayout","undefined","useSizePaper","_ref","useCallback","nativeEvent","layout","Canvas","exports","forwardRef","_onLayout","androidTransparency","props","viewRef","useRef","FABRIC","RNWebGPU","fabric","useSize","contextId","_","cb","useEffect","useImperativeHandle","getContextId","getNativeSurface","whenReady","callback","getContext","contextName","MakeWebGPUCanvasContext","React","createElement","View","collapsable","style","flex"],"sourceRoot":"../../src","sources":["Canvas.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../src","sources":["WebGPUViewNativeComponent.ts"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAQ7F;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GACe,IAAAG,+BAAsB,EAAc,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../src","sources":["WebGPUViewNativeComponent.ts"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAS7F;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GACe,IAAAG,+BAAsB,EAAc,YAAY,CAAC","ignoreList":[]}
@@ -48,6 +48,7 @@ const useSizePaper = _ref => {
48
48
  };
49
49
  export const Canvas = /*#__PURE__*/forwardRef(({
50
50
  onLayout: _onLayout,
51
+ androidTransparency,
51
52
  ...props
52
53
  }, ref) => {
53
54
  const viewRef = useRef(null);
@@ -65,6 +66,7 @@ export const Canvas = /*#__PURE__*/forwardRef(({
65
66
  }
66
67
  }, [size]);
67
68
  useImperativeHandle(ref, () => ({
69
+ getContextId: () => contextId,
68
70
  getNativeSurface: () => {
69
71
  if (size === null) {
70
72
  throw new Error("[WebGPU] Canvas size is not available yet");
@@ -89,13 +91,15 @@ export const Canvas = /*#__PURE__*/forwardRef(({
89
91
  }
90
92
  }));
91
93
  return /*#__PURE__*/React.createElement(View, _extends({
94
+ collapsable: false,
92
95
  ref: viewRef,
93
96
  onLayout: onLayout
94
97
  }, props), /*#__PURE__*/React.createElement(WebGPUNativeView, {
95
98
  style: {
96
99
  flex: 1
97
100
  },
98
- contextId: contextId
101
+ contextId: contextId,
102
+ androidTransparency: !!androidTransparency
99
103
  }));
100
104
  });
101
105
  //# sourceMappingURL=Canvas.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["View","forwardRef","useEffect","useImperativeHandle","useRef","useState","useLayoutEffect","useCallback","WebGPUNativeView","CONTEXT_COUNTER","generateContextId","useSizeFabric","ref","size","setSize","current","Error","measureInWindow","_x","_y","width","height","onLayout","undefined","useSizePaper","_ref","nativeEvent","layout","Canvas","_onLayout","props","viewRef","FABRIC","RNWebGPU","fabric","useSize","contextId","_","cb","getNativeSurface","whenReady","callback","getContext","contextName","MakeWebGPUCanvasContext","React","createElement","_extends","style","flex"],"sourceRoot":"../../src","sources":["Canvas.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["View","forwardRef","useEffect","useImperativeHandle","useRef","useState","useLayoutEffect","useCallback","WebGPUNativeView","CONTEXT_COUNTER","generateContextId","useSizeFabric","ref","size","setSize","current","Error","measureInWindow","_x","_y","width","height","onLayout","undefined","useSizePaper","_ref","nativeEvent","layout","Canvas","_onLayout","androidTransparency","props","viewRef","FABRIC","RNWebGPU","fabric","useSize","contextId","_","cb","getContextId","getNativeSurface","whenReady","callback","getContext","contextName","MakeWebGPUCanvasContext","React","createElement","_extends","collapsable","style","flex"],"sourceRoot":"../../src","sources":["Canvas.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["codegenNativeComponent"],"sourceRoot":"../../src","sources":["WebGPUViewNativeComponent.ts"],"mappings":"AAAA,OAAOA,sBAAsB,MAAM,yDAAyD;AAQ5F;AACA,eAAeA,sBAAsB,CAAc,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["codegenNativeComponent"],"sourceRoot":"../../src","sources":["WebGPUViewNativeComponent.ts"],"mappings":"AAAA,OAAOA,sBAAsB,MAAM,yDAAyD;AAS5F;AACA,eAAeA,sBAAsB,CAAc,YAAY,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../module/Canvas.js"],"names":[],"mappings":"AAgDA,mGAmDG"}
1
+ {"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../module/Canvas.js"],"names":[],"mappings":"AAgDA,mGAuDG"}
@@ -21,10 +21,13 @@ export type RNCanvasContext = GPUCanvasContext & {
21
21
  present: () => void;
22
22
  };
23
23
  export interface CanvasRef {
24
+ getContextId: () => number;
24
25
  getContext(contextName: "webgpu"): RNCanvasContext | null;
25
26
  getNativeSurface: () => NativeCanvas;
26
27
  whenReady: (callback: () => void) => void;
27
28
  }
28
- export declare const Canvas: import("react").ForwardRefExoticComponent<ViewProps & import("react").RefAttributes<CanvasRef>>;
29
+ export declare const Canvas: import("react").ForwardRefExoticComponent<ViewProps & {
30
+ androidTransparency?: boolean;
31
+ } & import("react").RefAttributes<CanvasRef>>;
29
32
  export {};
30
33
  //# sourceMappingURL=Canvas.d.ts.map
@@ -1 +1 @@
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"}
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,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,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;0BAEmB,OAAO;6CAmD3C,CAAC"}
@@ -2,6 +2,7 @@ import type { ViewProps } from "react-native";
2
2
  import type { Int32 } from "react-native/Libraries/Types/CodegenTypes";
3
3
  interface NativeProps extends ViewProps {
4
4
  contextId?: Int32;
5
+ androidTransparency?: boolean;
5
6
  }
6
7
  declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType<NativeProps>;
7
8
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"WebGPUViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/WebGPUViewNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAC;AAEvE,UAAU,WAAY,SAAQ,SAAS;IACrC,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB;;AAGD,wBAAiE"}
1
+ {"version":3,"file":"WebGPUViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/WebGPUViewNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAC;AAEvE,UAAU,WAAY,SAAQ,SAAS;IACrC,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;;AAGD,wBAAiE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-wgpu",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "description": "React Native WebGPU",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -65,7 +65,7 @@
65
65
  "@types/ws": "^8.5.10",
66
66
  "@typescript-eslint/eslint-plugin": "^8.4.0",
67
67
  "@typescript-eslint/parser": "^8.4.0",
68
- "@webgpu/types": "^0.1.44",
68
+ "@webgpu/types": "0.1.49",
69
69
  "clang-format": "^1.8.0",
70
70
  "del-cli": "^5.1.0",
71
71
  "eslint": "8",
package/src/Canvas.tsx CHANGED
@@ -49,6 +49,7 @@ export type RNCanvasContext = GPUCanvasContext & {
49
49
  };
50
50
 
51
51
  export interface CanvasRef {
52
+ getContextId: () => number;
52
53
  getContext(contextName: "webgpu"): RNCanvasContext | null;
53
54
  getNativeSurface: () => NativeCanvas;
54
55
  whenReady: (callback: () => void) => void;
@@ -89,51 +90,57 @@ const useSizePaper = (_ref: RefObject<View>) => {
89
90
  return { size, onLayout };
90
91
  };
91
92
 
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();
93
+ export const Canvas = forwardRef<
94
+ CanvasRef,
95
+ ViewProps & { androidTransparency?: boolean }
96
+ >(({ onLayout: _onLayout, androidTransparency, ...props }, ref) => {
97
+ const viewRef = useRef(null);
98
+ const FABRIC = RNWebGPU.fabric;
99
+ const useSize = FABRIC ? useSizeFabric : useSizePaper;
100
+ const [contextId, _] = useState(() => generateContextId());
101
+ const cb = useRef<() => void>();
102
+ const { size, onLayout } = useSize(viewRef);
103
+ useEffect(() => {
104
+ if (size && cb.current) {
105
+ cb.current();
106
+ }
107
+ }, [size]);
108
+ useImperativeHandle(ref, () => ({
109
+ getContextId: () => contextId,
110
+ getNativeSurface: () => {
111
+ if (size === null) {
112
+ throw new Error("[WebGPU] Canvas size is not available yet");
103
113
  }
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
- );
114
+ return RNWebGPU.getNativeSurface(contextId);
115
+ },
116
+ whenReady(callback: () => void) {
117
+ if (size === null) {
118
+ cb.current = callback;
119
+ } else {
120
+ callback();
121
+ }
122
+ },
123
+ getContext(contextName: "webgpu"): RNCanvasContext | null {
124
+ if (contextName !== "webgpu") {
125
+ throw new Error(`[WebGPU] Unsupported context: ${contextName}`);
126
+ }
127
+ if (size === null) {
128
+ throw new Error("[WebGPU] Canvas size is not available yet");
129
+ }
130
+ return RNWebGPU.MakeWebGPUCanvasContext(
131
+ contextId,
132
+ size.width,
133
+ size.height,
134
+ );
135
+ },
136
+ }));
137
+ return (
138
+ <View collapsable={false} ref={viewRef} onLayout={onLayout} {...props}>
139
+ <WebGPUNativeView
140
+ style={{ flex: 1 }}
141
+ contextId={contextId}
142
+ androidTransparency={!!androidTransparency}
143
+ />
144
+ </View>
145
+ );
146
+ });
@@ -4,6 +4,7 @@ import type { Int32 } from "react-native/Libraries/Types/CodegenTypes";
4
4
 
5
5
  interface NativeProps extends ViewProps {
6
6
  contextId?: Int32;
7
+ androidTransparency?: boolean;
7
8
  }
8
9
 
9
10
  // eslint-disable-next-line import/no-default-export