react-native-wgpu 0.1.18 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/webgpu/WebGPUAHBView.java +41 -33
- package/android/src/main/java/com/webgpu/{SurfaceView2.java → WebGPUSurfaceViewWithSC.java} +3 -3
- package/android/src/main/java/com/webgpu/WebGPUView.java +15 -42
- package/android/src/main/java/com/webgpu/WebGPUViewManager.java +3 -3
- package/android/src/oldarch/com/webgpu/WebGPUViewManagerSpec.java +1 -1
- package/lib/commonjs/Canvas.js +2 -5
- package/lib/commonjs/Canvas.js.map +1 -1
- package/lib/module/Canvas.js +2 -5
- package/lib/module/Canvas.js.map +1 -1
- package/lib/typescript/lib/module/Canvas.d.ts.map +1 -1
- package/lib/typescript/src/Canvas.d.ts +1 -2
- package/lib/typescript/src/Canvas.d.ts.map +1 -1
- package/lib/typescript/src/WebGPUViewNativeComponent.d.ts +2 -2
- package/lib/typescript/src/WebGPUViewNativeComponent.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Canvas.tsx +51 -65
- package/src/WebGPUViewNativeComponent.ts +2 -2
|
@@ -15,14 +15,12 @@ import android.view.View;
|
|
|
15
15
|
import androidx.annotation.NonNull;
|
|
16
16
|
import androidx.annotation.RequiresApi;
|
|
17
17
|
|
|
18
|
-
import java.util.LinkedList;
|
|
19
|
-
import java.util.Queue;
|
|
20
|
-
|
|
21
18
|
@SuppressLint("ViewConstructor")
|
|
22
19
|
@RequiresApi(api = Build.VERSION_CODES.Q)
|
|
23
|
-
public class WebGPUAHBView extends View {
|
|
20
|
+
public class WebGPUAHBView extends View implements ImageReader.OnImageAvailableListener {
|
|
21
|
+
|
|
22
|
+
private ImageReader mReader;
|
|
24
23
|
|
|
25
|
-
private final Queue<ImageReader> mImageReaders = new LinkedList<>();
|
|
26
24
|
private Bitmap mBitmap = null;
|
|
27
25
|
|
|
28
26
|
private final Matrix matrix = new Matrix();
|
|
@@ -34,48 +32,58 @@ public class WebGPUAHBView extends View {
|
|
|
34
32
|
mApi = api;
|
|
35
33
|
}
|
|
36
34
|
|
|
35
|
+
private ImageReader createReader() {
|
|
36
|
+
ImageReader reader = ImageReader.newInstance(getWidth(), getHeight(), PixelFormat.RGBA_8888, 2, HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE |
|
|
37
|
+
HardwareBuffer.USAGE_GPU_COLOR_OUTPUT);
|
|
38
|
+
reader.setOnImageAvailableListener(this, null);
|
|
39
|
+
return reader;
|
|
40
|
+
}
|
|
41
|
+
|
|
37
42
|
@Override
|
|
38
43
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
|
39
44
|
super.onLayout(changed, left, top, right, bottom);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if (mImageReaders.isEmpty()) {
|
|
44
|
-
mApi.surfaceCreated(imageReader.getSurface());
|
|
45
|
+
if (mReader == null) {
|
|
46
|
+
mReader = createReader();
|
|
47
|
+
mApi.surfaceCreated(mReader.getSurface());
|
|
45
48
|
} else {
|
|
46
|
-
mApi.surfaceChanged(
|
|
49
|
+
mApi.surfaceChanged(mReader.getSurface());
|
|
47
50
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
ImageReader ir;
|
|
62
|
-
while((ir = mImageReaders.poll()) != null) {
|
|
63
|
-
ir.close();
|
|
64
|
-
}
|
|
65
|
-
mImageReaders.add(imageReader);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@Override
|
|
54
|
+
public void onImageAvailable(ImageReader reader) {
|
|
55
|
+
try (Image image = reader.acquireLatestImage()) {
|
|
56
|
+
if (image != null) {
|
|
57
|
+
HardwareBuffer hb = image.getHardwareBuffer();
|
|
58
|
+
if (hb != null) {
|
|
59
|
+
Bitmap bitmap = Bitmap.wrapHardwareBuffer(hb, null);
|
|
60
|
+
if (bitmap != null) {
|
|
61
|
+
mBitmap = bitmap;
|
|
62
|
+
hb.close();
|
|
63
|
+
invalidate();
|
|
68
64
|
}
|
|
69
65
|
}
|
|
70
66
|
}
|
|
71
|
-
}
|
|
72
|
-
mImageReaders.add(imageReader);
|
|
67
|
+
}
|
|
73
68
|
}
|
|
74
69
|
|
|
75
70
|
@Override
|
|
76
71
|
protected void onDraw(@NonNull Canvas canvas) {
|
|
77
72
|
super.onDraw(canvas);
|
|
78
73
|
if (mBitmap != null) {
|
|
74
|
+
float viewWidth = getWidth();
|
|
75
|
+
float viewHeight = getHeight();
|
|
76
|
+
float bitmapWidth = mBitmap.getWidth();
|
|
77
|
+
float bitmapHeight = mBitmap.getHeight();
|
|
78
|
+
|
|
79
|
+
// Calculate the scale factors
|
|
80
|
+
float scaleX = viewWidth / bitmapWidth;
|
|
81
|
+
float scaleY = viewHeight / bitmapHeight;
|
|
82
|
+
|
|
83
|
+
// Reset the matrix and apply scaling
|
|
84
|
+
matrix.reset();
|
|
85
|
+
matrix.setScale(scaleX, scaleY);
|
|
86
|
+
|
|
79
87
|
canvas.drawBitmap(mBitmap, matrix, null);
|
|
80
88
|
}
|
|
81
89
|
}
|
|
@@ -15,13 +15,13 @@ import androidx.annotation.RequiresApi;
|
|
|
15
15
|
|
|
16
16
|
@SuppressLint("ViewConstructor")
|
|
17
17
|
@RequiresApi(api = Build.VERSION_CODES.Q)
|
|
18
|
-
public class
|
|
18
|
+
public class WebGPUSurfaceViewWithSC extends SurfaceView implements SurfaceHolder.Callback {
|
|
19
19
|
|
|
20
20
|
WebGPUAPI mApi;
|
|
21
21
|
SurfaceControl mSurfaceControl;
|
|
22
22
|
Surface mSurface;
|
|
23
23
|
|
|
24
|
-
public
|
|
24
|
+
public WebGPUSurfaceViewWithSC(Context context, WebGPUAPI api) {
|
|
25
25
|
super(context);
|
|
26
26
|
mApi = api;
|
|
27
27
|
getHolder().addCallback(this);
|
|
@@ -48,7 +48,7 @@ public class SurfaceView2 extends SurfaceView implements SurfaceHolder.Callback
|
|
|
48
48
|
} else {
|
|
49
49
|
SurfaceControl.Builder scb = new SurfaceControl.Builder();
|
|
50
50
|
scb.setName("WebGPUView");
|
|
51
|
-
scb.setOpaque(
|
|
51
|
+
scb.setOpaque(true);
|
|
52
52
|
scb.setBufferSize(getWidth(), getHeight());
|
|
53
53
|
scb.setParent(getSurfaceControl());
|
|
54
54
|
scb.setFormat(PixelFormat.RGBA_8888);
|
|
@@ -5,37 +5,17 @@ import android.os.Build;
|
|
|
5
5
|
import android.view.Surface;
|
|
6
6
|
import android.view.View;
|
|
7
7
|
|
|
8
|
-
import androidx.annotation.NonNull;
|
|
9
|
-
import androidx.annotation.Nullable;
|
|
10
|
-
import androidx.annotation.StringDef;
|
|
11
|
-
|
|
12
8
|
import com.facebook.proguard.annotations.DoNotStrip;
|
|
13
9
|
import com.facebook.react.uimanager.ThemedReactContext;
|
|
14
10
|
import com.facebook.react.views.view.ReactViewGroup;
|
|
15
11
|
|
|
16
|
-
import java.lang.annotation.Retention;
|
|
17
|
-
import java.lang.annotation.RetentionPolicy;
|
|
18
|
-
|
|
19
12
|
public class WebGPUView extends ReactViewGroup implements WebGPUAPI {
|
|
20
13
|
|
|
21
|
-
public static final String SURFACE_VIEW = "SurfaceView";
|
|
22
|
-
public static final String TEXTURE_VIEW = "TextureView";
|
|
23
|
-
public static final String HARDWARE_BUFFER = "HardwareBuffer";
|
|
24
|
-
public static final String SURFACE_VIEW2 = "SurfaceView2";
|
|
25
|
-
|
|
26
|
-
@Retention(RetentionPolicy.SOURCE)
|
|
27
|
-
@StringDef({
|
|
28
|
-
SURFACE_VIEW,
|
|
29
|
-
TEXTURE_VIEW,
|
|
30
|
-
HARDWARE_BUFFER,
|
|
31
|
-
SURFACE_VIEW2
|
|
32
|
-
})
|
|
33
|
-
public @interface ViewType {}
|
|
34
14
|
|
|
35
15
|
private int mContextId;
|
|
36
|
-
private
|
|
16
|
+
private boolean mTransparent = false;
|
|
37
17
|
private WebGPUModule mModule;
|
|
38
|
-
private View mView;
|
|
18
|
+
private View mView = null;
|
|
39
19
|
|
|
40
20
|
WebGPUView(Context context) {
|
|
41
21
|
super(context);
|
|
@@ -51,28 +31,21 @@ public class WebGPUView extends ReactViewGroup implements WebGPUAPI {
|
|
|
51
31
|
mContextId = contextId;
|
|
52
32
|
}
|
|
53
33
|
|
|
54
|
-
public void
|
|
34
|
+
public void setTransparent(boolean value) {
|
|
55
35
|
Context ctx = getContext();
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
case SURFACE_VIEW2 -> {
|
|
69
|
-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
70
|
-
mView = new SurfaceView2(ctx, this);
|
|
71
|
-
} else {
|
|
72
|
-
throw new RuntimeException("HardwareBuffer Canvas implementation is only available on API Level 29 and above");
|
|
73
|
-
}
|
|
36
|
+
if (value != mTransparent || mView == null) {
|
|
37
|
+
if (mView != null) {
|
|
38
|
+
removeView(mView);
|
|
39
|
+
}
|
|
40
|
+
mTransparent = value;
|
|
41
|
+
if (mTransparent) {
|
|
42
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
43
|
+
mView = new WebGPUAHBView(ctx, this);
|
|
44
|
+
} else {
|
|
45
|
+
mView = new WebGPUTextureView(ctx, this);
|
|
74
46
|
}
|
|
75
|
-
|
|
47
|
+
} else {
|
|
48
|
+
mView = new WebGPUSurfaceView(ctx, this);
|
|
76
49
|
}
|
|
77
50
|
addView(mView);
|
|
78
51
|
}
|
|
@@ -25,9 +25,9 @@ public class WebGPUViewManager extends WebGPUViewManagerSpec<WebGPUView> {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
@Override
|
|
28
|
-
@ReactProp(name = "
|
|
29
|
-
public void
|
|
30
|
-
view.
|
|
28
|
+
@ReactProp(name = "transparent")
|
|
29
|
+
public void setTransparent(WebGPUView view, boolean value) {
|
|
30
|
+
view.setTransparent(value);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
@Override
|
|
@@ -8,5 +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
|
|
11
|
+
public abstract void setTransparent(T view, boolean transparency);
|
|
12
12
|
}
|
package/lib/commonjs/Canvas.js
CHANGED
|
@@ -55,8 +55,7 @@ const useSizePaper = _ref => {
|
|
|
55
55
|
};
|
|
56
56
|
const Canvas = exports.Canvas = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
57
57
|
onLayout: _onLayout,
|
|
58
|
-
|
|
59
|
-
androidExperimental,
|
|
58
|
+
transparent,
|
|
60
59
|
...props
|
|
61
60
|
}, ref) => {
|
|
62
61
|
const viewRef = (0, _react.useRef)(null);
|
|
@@ -107,9 +106,7 @@ const Canvas = exports.Canvas = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
|
107
106
|
flex: 1
|
|
108
107
|
},
|
|
109
108
|
contextId: contextId,
|
|
110
|
-
|
|
111
|
-
// eslint-disable-next-line no-nested-ternary
|
|
112
|
-
androidExperimental ? androidTransparency ? "HardwareBuffer" : "SurfaceView2" : androidTransparency ? "TextureView" : "SurfaceView"
|
|
109
|
+
transparent: !!transparent
|
|
113
110
|
}));
|
|
114
111
|
});
|
|
115
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","
|
|
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","transparent","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":[]}
|
package/lib/module/Canvas.js
CHANGED
|
@@ -48,8 +48,7 @@ const useSizePaper = _ref => {
|
|
|
48
48
|
};
|
|
49
49
|
export const Canvas = /*#__PURE__*/forwardRef(({
|
|
50
50
|
onLayout: _onLayout,
|
|
51
|
-
|
|
52
|
-
androidExperimental,
|
|
51
|
+
transparent,
|
|
53
52
|
...props
|
|
54
53
|
}, ref) => {
|
|
55
54
|
const viewRef = useRef(null);
|
|
@@ -100,9 +99,7 @@ export const Canvas = /*#__PURE__*/forwardRef(({
|
|
|
100
99
|
flex: 1
|
|
101
100
|
},
|
|
102
101
|
contextId: contextId,
|
|
103
|
-
|
|
104
|
-
// eslint-disable-next-line no-nested-ternary
|
|
105
|
-
androidExperimental ? androidTransparency ? "HardwareBuffer" : "SurfaceView2" : androidTransparency ? "TextureView" : "SurfaceView"
|
|
102
|
+
transparent: !!transparent
|
|
106
103
|
}));
|
|
107
104
|
});
|
|
108
105
|
//# sourceMappingURL=Canvas.js.map
|
package/lib/module/Canvas.js.map
CHANGED
|
@@ -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","
|
|
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","transparent","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,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../module/Canvas.js"],"names":[],"mappings":"AAgDA,
|
|
1
|
+
{"version":3,"file":"Canvas.d.ts","sourceRoot":"","sources":["../../../module/Canvas.js"],"names":[],"mappings":"AAgDA,mGAuDG"}
|
|
@@ -27,8 +27,7 @@ export interface CanvasRef {
|
|
|
27
27
|
whenReady: (callback: () => void) => void;
|
|
28
28
|
}
|
|
29
29
|
export declare const Canvas: import("react").ForwardRefExoticComponent<ViewProps & {
|
|
30
|
-
|
|
31
|
-
androidExperimental?: boolean;
|
|
30
|
+
transparent?: boolean;
|
|
32
31
|
} & import("react").RefAttributes<CanvasRef>>;
|
|
33
32
|
export {};
|
|
34
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,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;
|
|
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;kBAEW,OAAO;6CAmDnC,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ViewProps } from "react-native";
|
|
2
2
|
import type { Int32 } from "react-native/Libraries/Types/CodegenTypes";
|
|
3
3
|
interface NativeProps extends ViewProps {
|
|
4
|
-
contextId
|
|
5
|
-
|
|
4
|
+
contextId: Int32;
|
|
5
|
+
transparent: boolean;
|
|
6
6
|
}
|
|
7
7
|
declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType<NativeProps>;
|
|
8
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,
|
|
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,EAAE,KAAK,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;;AAGD,wBAAiE"}
|
package/package.json
CHANGED
package/src/Canvas.tsx
CHANGED
|
@@ -92,69 +92,55 @@ const useSizePaper = (_ref: RefObject<View>) => {
|
|
|
92
92
|
|
|
93
93
|
export const Canvas = forwardRef<
|
|
94
94
|
CanvasRef,
|
|
95
|
-
ViewProps & {
|
|
96
|
-
>(
|
|
97
|
-
(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
) =>
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
95
|
+
ViewProps & { transparent?: boolean }
|
|
96
|
+
>(({ onLayout: _onLayout, transparent, ...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");
|
|
110
113
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
style={{ flex: 1 }}
|
|
145
|
-
contextId={contextId}
|
|
146
|
-
androidView={
|
|
147
|
-
// eslint-disable-next-line no-nested-ternary
|
|
148
|
-
androidExperimental
|
|
149
|
-
? androidTransparency
|
|
150
|
-
? "HardwareBuffer"
|
|
151
|
-
: "SurfaceView2"
|
|
152
|
-
: androidTransparency
|
|
153
|
-
? "TextureView"
|
|
154
|
-
: "SurfaceView"
|
|
155
|
-
}
|
|
156
|
-
/>
|
|
157
|
-
</View>
|
|
158
|
-
);
|
|
159
|
-
},
|
|
160
|
-
);
|
|
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
|
+
transparent={!!transparent}
|
|
143
|
+
/>
|
|
144
|
+
</View>
|
|
145
|
+
);
|
|
146
|
+
});
|
|
@@ -3,8 +3,8 @@ import type { ViewProps } from "react-native";
|
|
|
3
3
|
import type { Int32 } from "react-native/Libraries/Types/CodegenTypes";
|
|
4
4
|
|
|
5
5
|
interface NativeProps extends ViewProps {
|
|
6
|
-
contextId
|
|
7
|
-
|
|
6
|
+
contextId: Int32;
|
|
7
|
+
transparent: boolean;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
// eslint-disable-next-line import/no-default-export
|