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.
- package/android/cpp/cpp-adapter.cpp +1 -1
- package/android/src/main/java/com/webgpu/WebGPUAHBView.java +88 -0
- package/android/src/main/java/com/webgpu/WebGPUAPI.java +20 -0
- package/android/src/main/java/com/webgpu/WebGPUBaseView.java +61 -0
- package/android/src/main/java/com/webgpu/WebGPUSurfaceView.java +41 -0
- package/android/src/main/java/com/webgpu/WebGPUTextureView.java +45 -0
- package/android/src/main/java/com/webgpu/WebGPUView.java +36 -20
- package/android/src/main/java/com/webgpu/WebGPUViewManager.java +8 -1
- package/android/src/oldarch/com/webgpu/WebGPUViewManagerSpec.java +1 -0
- package/cpp/rnwgpu/SurfaceRegistry.h +12 -8
- package/cpp/rnwgpu/api/descriptors/Unions.h +30 -0
- package/lib/commonjs/Canvas.js +5 -1
- package/lib/commonjs/Canvas.js.map +1 -1
- package/lib/commonjs/WebGPUViewNativeComponent.js.map +1 -1
- package/lib/module/Canvas.js +5 -1
- package/lib/module/Canvas.js.map +1 -1
- package/lib/module/WebGPUViewNativeComponent.js.map +1 -1
- package/lib/typescript/lib/module/Canvas.d.ts.map +1 -1
- package/lib/typescript/src/Canvas.d.ts +4 -1
- package/lib/typescript/src/Canvas.d.ts.map +1 -1
- package/lib/typescript/src/WebGPUViewNativeComponent.d.ts +1 -0
- package/lib/typescript/src/WebGPUViewNativeComponent.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/Canvas.tsx +54 -47
- package/src/WebGPUViewNativeComponent.ts +1 -0
|
@@ -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.
|
|
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
|
|
14
|
-
|
|
15
|
-
private
|
|
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
|
-
|
|
18
|
+
WebGPUView(Context context) {
|
|
19
19
|
super(context);
|
|
20
|
-
getHolder().addCallback(this);
|
|
21
20
|
}
|
|
22
21
|
|
|
23
|
-
public void setContextId(
|
|
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(
|
|
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(
|
|
60
|
+
onSurfaceCreate(surface, mContextId, width, height);
|
|
44
61
|
}
|
|
45
62
|
|
|
46
63
|
@Override
|
|
47
|
-
public void surfaceChanged(
|
|
64
|
+
public void surfaceChanged(Surface surface) {
|
|
48
65
|
float density = getResources().getDisplayMetrics().density;
|
|
49
|
-
float
|
|
50
|
-
float
|
|
51
|
-
onSurfaceChanged(
|
|
66
|
+
float width = getWidth() / density;
|
|
67
|
+
float height = getHeight() / density;
|
|
68
|
+
onSurfaceChanged(surface, mContextId, width, height);
|
|
52
69
|
}
|
|
53
70
|
|
|
54
71
|
@Override
|
|
55
|
-
|
|
56
|
-
super.onDetachedFromWindow();
|
|
72
|
+
public void surfaceDestroyed() {
|
|
57
73
|
onSurfaceDestroy(mContextId);
|
|
58
74
|
}
|
|
59
75
|
|
|
60
76
|
@Override
|
|
61
|
-
public void
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
}
|
package/lib/commonjs/Canvas.js
CHANGED
|
@@ -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":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAWA,IAAAE,0BAAA,GAAAC,sBAAA,CAAAH,OAAA;AAA2D,SAAAG,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,SAAA,WAAAA,QAAA,GAAAC,MAAA,CAAAC,MAAA,GAAAD,MAAA,CAAAC,MAAA,CAAAC,IAAA,eAAAC,CAAA,aAAAP,CAAA,MAAAA,CAAA,GAAAQ,SAAA,CAAAC,MAAA,EAAAT,CAAA,UAAAU,CAAA,GAAAF,SAAA,CAAAR,CAAA,YAAAW,CAAA,IAAAD,CAAA,OAAAE,cAAA,CAAAC,IAAA,CAAAH,CAAA,EAAAC,CAAA,MAAAJ,CAAA,CAAAI,CAAA,IAAAD,CAAA,CAAAC,CAAA,aAAAJ,CAAA,KAAAJ,QAAA,CAAAW,KAAA,OAAAN,SAAA;AAE3D,IAAIO,eAAe,GAAG,CAAC;AACvB,SAASC,iBAAiBA,CAAA,EAAG;EAC3B,OAAOD,eAAe,EAAE;AAC1B;
|
|
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;
|
|
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":[]}
|
package/lib/module/Canvas.js
CHANGED
|
@@ -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
|
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","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":";AACA,SAASA,IAAI,QAAQ,cAAc;AACnC,SACEC,UAAU,EACVC,SAAS,EACTC,mBAAmB,EACnBC,MAAM,EACNC,QAAQ,EACRC,eAAe,EACfC,WAAW,QACN,OAAO;AAGd,OAAOC,gBAAgB,MAAM,6BAA6B;AAE1D,IAAIC,eAAe,GAAG,CAAC;AACvB,SAASC,iBAAiBA,CAAA,EAAG;EAC3B,OAAOD,eAAe,EAAE;AAC1B;
|
|
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;
|
|
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,
|
|
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 &
|
|
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,
|
|
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;
|
|
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.
|
|
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": "
|
|
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<
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
);
|
|
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
|
+
});
|