react-native-wgpu 0.1.8 → 0.1.9
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 +13 -35
- package/android/src/main/java/com/webgpu/WebGPUModule.java +0 -37
- package/android/src/main/java/com/webgpu/WebGPUView.java +0 -1
- package/android/src/main/java/com/webgpu/WebGPUViewPackage.java +1 -1
- package/cpp/rnwgpu/RNWebGPUManager.h +2 -2
- package/cpp/rnwgpu/SurfaceRegistry.h +148 -13
- package/cpp/rnwgpu/api/Canvas.h +15 -15
- package/cpp/rnwgpu/api/GPUCanvasContext.cpp +81 -23
- package/cpp/rnwgpu/api/GPUCanvasContext.h +16 -7
- package/cpp/rnwgpu/api/GPUDevice.cpp +3 -2
- package/cpp/rnwgpu/api/OffscreenSurface.h +49 -0
- package/cpp/rnwgpu/api/RNWebGPU.h +21 -10
- package/ios/MetalView.mm +11 -0
- package/ios/SurfaceUtils.h +2 -0
- package/ios/SurfaceUtils.mm +16 -4
- package/ios/WebGPUModule.mm +8 -25
- package/ios/WebGPUView.mm +9 -6
- package/lib/commonjs/Canvas.js +79 -18
- package/lib/commonjs/Canvas.js.map +1 -1
- package/lib/commonjs/Offscreen.js +3 -0
- package/lib/commonjs/Offscreen.js.map +1 -1
- package/lib/commonjs/utils.js +26 -15
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/Canvas.js +80 -19
- package/lib/module/Canvas.js.map +1 -1
- package/lib/module/Offscreen.js +3 -0
- package/lib/module/Offscreen.js.map +1 -1
- package/lib/module/utils.js +25 -15
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/lib/commonjs/Offscreen.d.ts +1 -0
- package/lib/typescript/lib/commonjs/Offscreen.d.ts.map +1 -1
- package/lib/typescript/lib/commonjs/utils.d.ts +5 -1
- package/lib/typescript/lib/commonjs/utils.d.ts.map +1 -1
- package/lib/typescript/lib/module/Canvas.d.ts.map +1 -1
- package/lib/typescript/lib/module/Offscreen.d.ts +1 -0
- package/lib/typescript/lib/module/Offscreen.d.ts.map +1 -1
- package/lib/typescript/lib/module/utils.d.ts +5 -1
- package/lib/typescript/lib/module/utils.d.ts.map +1 -1
- package/lib/typescript/src/Canvas.d.ts +4 -2
- package/lib/typescript/src/Canvas.d.ts.map +1 -1
- package/lib/typescript/src/Offscreen.d.ts +16 -1
- package/lib/typescript/src/Offscreen.d.ts.map +1 -1
- package/lib/typescript/src/utils.d.ts +6 -3
- package/lib/typescript/src/utils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Canvas.tsx +99 -35
- package/src/Offscreen.ts +6 -2
- package/src/utils.ts +28 -18
package/ios/MetalView.mm
CHANGED
|
@@ -24,4 +24,15 @@
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
- (void)willMoveToSuperview:(UIView *)newSuperview {
|
|
28
|
+
[super willMoveToSuperview:newSuperview];
|
|
29
|
+
|
|
30
|
+
if (newSuperview == nil) {
|
|
31
|
+
// The view is being removed from its superview
|
|
32
|
+
// Add your cleanup code here
|
|
33
|
+
[SurfaceUtils cleanupSurface:[_contextId intValue]];
|
|
34
|
+
_isConfigured = NO;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
27
38
|
@end
|
package/ios/SurfaceUtils.h
CHANGED
package/ios/SurfaceUtils.mm
CHANGED
|
@@ -11,13 +11,25 @@
|
|
|
11
11
|
contextId:(int)contextId {
|
|
12
12
|
std::shared_ptr<rnwgpu::RNWebGPUManager> manager = [WebGPUModule getManager];
|
|
13
13
|
void *nativeSurface = (__bridge void *)layer;
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
15
|
+
registry.createSurface(contextId, nativeSurface, size.width, size.height,
|
|
16
|
+
manager->_platformContext);
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
+ (void)updateSurface:(int)contextId size:(CGSize)size {
|
|
19
|
-
std::shared_ptr<rnwgpu::RNWebGPUManager> manager = [WebGPUModule
|
|
20
|
-
|
|
20
|
+
// std::shared_ptr<rnwgpu::RNWebGPUManager> manager = [WebGPUModule
|
|
21
|
+
// getManager];
|
|
22
|
+
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
23
|
+
auto info = registry.getSurface(contextId);
|
|
24
|
+
info.width = size.width;
|
|
25
|
+
info.height = size.height;
|
|
26
|
+
registry.setSize(contextId, size.width, size.height);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
+ (void)cleanupSurface:(int)contextId {
|
|
30
|
+
auto ®istry = rnwgpu::SurfaceRegistry::getInstance();
|
|
31
|
+
// Remove the surface info from the registry
|
|
32
|
+
registry.removeSurface(contextId);
|
|
21
33
|
}
|
|
22
34
|
|
|
23
35
|
@end
|
package/ios/WebGPUModule.mm
CHANGED
|
@@ -74,31 +74,14 @@ RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) {
|
|
|
74
74
|
return @true;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(createSurfaceContext
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (webGPUContextRegistry.hasProperty(*runtime,
|
|
86
|
-
std::to_string(contextIdInt).c_str())) {
|
|
87
|
-
// Context already exists, just update width/height
|
|
88
|
-
auto prop =
|
|
89
|
-
webGPUContextRegistry
|
|
90
|
-
.getPropertyAsObject(*runtime, std::to_string(contextIdInt).c_str())
|
|
91
|
-
.asHostObject<rnwgpu::Canvas>(*runtime);
|
|
92
|
-
prop->setWidth(canvas->getWidth());
|
|
93
|
-
prop->setHeight(canvas->getHeight());
|
|
94
|
-
return @true;
|
|
95
|
-
}
|
|
96
|
-
webGPUContextRegistry.setProperty(
|
|
97
|
-
*runtime, std::to_string(contextIdInt).c_str(),
|
|
98
|
-
facebook::jsi::Object::createFromHostObject(*runtime, canvas));
|
|
99
|
-
|
|
100
|
-
return @true;
|
|
101
|
-
}
|
|
77
|
+
// RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(createSurfaceContext
|
|
78
|
+
// : (double)contextId) {
|
|
79
|
+
// int contextIdInt = contextId;
|
|
80
|
+
// RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
|
|
81
|
+
// auto runtime = (jsi::Runtime *)cxxBridge.runtime;
|
|
82
|
+
|
|
83
|
+
// return @true;
|
|
84
|
+
// }
|
|
102
85
|
|
|
103
86
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
104
87
|
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
package/ios/WebGPUView.mm
CHANGED
|
@@ -50,18 +50,21 @@ static NSMutableDictionary<NSNumber *, MetalView *> *metalViewRegistry =
|
|
|
50
50
|
[super prepareForRecycle];
|
|
51
51
|
self.contentView = nil;
|
|
52
52
|
if ([metalViewRegistry objectForKey:_contextId] != nil) {
|
|
53
|
-
|
|
53
|
+
[metalViewRegistry removeObjectForKey:_contextId];
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
- (void)updateProps:(const facebook::react::Props::Shared &)props
|
|
58
|
-
|
|
59
|
-
const auto &
|
|
60
|
-
|
|
57
|
+
- (void)updateProps:(const facebook::react::Props::Shared &)props
|
|
58
|
+
oldProps:(const facebook::react::Props::Shared &)oldProps {
|
|
59
|
+
const auto &oldViewProps =
|
|
60
|
+
*std::static_pointer_cast<const WebGPUViewProps>(_props);
|
|
61
|
+
const auto &newViewProps =
|
|
62
|
+
*std::static_pointer_cast<const WebGPUViewProps>(props);
|
|
63
|
+
|
|
61
64
|
if (newViewProps.contextId != oldViewProps.contextId) {
|
|
62
65
|
_contextId = [[NSNumber alloc] initWithInt:newViewProps.contextId];
|
|
63
66
|
}
|
|
64
|
-
|
|
67
|
+
|
|
65
68
|
[super updateProps:props oldProps:oldProps];
|
|
66
69
|
}
|
|
67
70
|
|
package/lib/commonjs/Canvas.js
CHANGED
|
@@ -4,43 +4,104 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Canvas = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
7
8
|
var _react = require("react");
|
|
8
9
|
var _WebGPUViewNativeComponent = _interopRequireDefault(require("./WebGPUViewNativeComponent"));
|
|
9
|
-
var _NativeWebGPUModule = _interopRequireDefault(require("./NativeWebGPUModule"));
|
|
10
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
11
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
12
12
|
let CONTEXT_COUNTER = 1;
|
|
13
13
|
function generateContextId() {
|
|
14
14
|
return CONTEXT_COUNTER++;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
16
|
+
const useSizeFabric = ref => {
|
|
17
|
+
const [size, setSize] = (0, _react.useState)(null);
|
|
18
|
+
(0, _react.useLayoutEffect)(() => {
|
|
19
|
+
if (!ref.current) {
|
|
20
|
+
throw new Error("Canvas ref is null");
|
|
21
|
+
}
|
|
22
|
+
ref.current.measureInWindow((_x, _y, width, height) => {
|
|
23
|
+
setSize({
|
|
24
|
+
width,
|
|
25
|
+
height
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}, [ref]);
|
|
29
|
+
return {
|
|
30
|
+
size,
|
|
31
|
+
onLayout: undefined
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
const useSizePaper = _ref => {
|
|
35
|
+
const [size, setSize] = (0, _react.useState)(null);
|
|
36
|
+
const onLayout = (0, _react.useCallback)(({
|
|
37
|
+
nativeEvent: {
|
|
38
|
+
layout: {
|
|
39
|
+
width,
|
|
40
|
+
height
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}) => {
|
|
44
|
+
if (size === null) {
|
|
45
|
+
setSize({
|
|
46
|
+
width,
|
|
47
|
+
height
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}, [size]);
|
|
51
|
+
return {
|
|
52
|
+
size,
|
|
53
|
+
onLayout
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
const Canvas = exports.Canvas = /*#__PURE__*/(0, _react.forwardRef)(({
|
|
57
|
+
onLayout: _onLayout,
|
|
58
|
+
...props
|
|
59
|
+
}, ref) => {
|
|
60
|
+
const viewRef = (0, _react.useRef)(null);
|
|
61
|
+
const FABRIC = RNWebGPU.fabric;
|
|
62
|
+
const useSize = FABRIC ? useSizeFabric : useSizePaper;
|
|
19
63
|
const [contextId, _] = (0, _react.useState)(() => generateContextId());
|
|
64
|
+
const cb = (0, _react.useRef)();
|
|
65
|
+
const {
|
|
66
|
+
size,
|
|
67
|
+
onLayout
|
|
68
|
+
} = useSize(viewRef);
|
|
69
|
+
(0, _react.useEffect)(() => {
|
|
70
|
+
if (size && cb.current) {
|
|
71
|
+
cb.current();
|
|
72
|
+
}
|
|
73
|
+
}, [size]);
|
|
20
74
|
(0, _react.useImperativeHandle)(ref, () => ({
|
|
21
75
|
getNativeSurface: () => {
|
|
22
|
-
|
|
23
|
-
|
|
76
|
+
if (size === null) {
|
|
77
|
+
throw new Error("[WebGPU] Canvas size is not available yet");
|
|
78
|
+
}
|
|
79
|
+
return RNWebGPU.getNativeSurface(contextId);
|
|
80
|
+
},
|
|
81
|
+
whenReady(callback) {
|
|
82
|
+
if (size === null) {
|
|
83
|
+
cb.current = callback;
|
|
84
|
+
} else {
|
|
85
|
+
callback();
|
|
86
|
+
}
|
|
24
87
|
},
|
|
25
88
|
getContext(contextName) {
|
|
26
89
|
if (contextName !== "webgpu") {
|
|
27
90
|
throw new Error(`[WebGPU] Unsupported context: ${contextName}`);
|
|
28
91
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if (!nativeSurface) {
|
|
32
|
-
return null;
|
|
92
|
+
if (size === null) {
|
|
93
|
+
throw new Error("[WebGPU] Canvas size is not available yet");
|
|
33
94
|
}
|
|
34
|
-
|
|
35
|
-
return ctx;
|
|
95
|
+
return RNWebGPU.MakeWebGPUCanvasContext(contextId, size.width, size.height);
|
|
36
96
|
}
|
|
37
97
|
}));
|
|
38
|
-
(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
98
|
+
return /*#__PURE__*/React.createElement(_reactNative.View, _extends({
|
|
99
|
+
ref: viewRef,
|
|
100
|
+
onLayout: onLayout
|
|
101
|
+
}, props), /*#__PURE__*/React.createElement(_WebGPUViewNativeComponent.default, {
|
|
102
|
+
style: {
|
|
103
|
+
flex: 1
|
|
104
|
+
},
|
|
44
105
|
contextId: contextId
|
|
45
106
|
}));
|
|
46
107
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
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 +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","exports","__brand","canvas","textureFormat","configure","config","createTexture","GPUTextureUsage","RENDER_ATTACHMENT","COPY_SRC","TEXTURE_BINDING","undefined","unconfigure","destroy","getCurrentTexture"],"sourceRoot":"../../src","sources":["Offscreen.ts"],"mappings":";;;;;;AAAA;AACO,MAAMA,kBAAkB,CAA4B;EAGzDC,aAAa,GAAuD,IAAI;EACxEC,iBAAiB,GAAuD,IAAI;EAI5EC,WAAWA,CAACC,KAAa,EAAEC,MAAc,EAAE;IACzC,IAAI,CAACD,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,OAAO,GAAG,IAAIC,yBAAyB,CAAC,IAAI,CAAC;EACpD;EAEAC,aAAaA,CAACC,QAA6B,EAAiB;IAC1D;IACA,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;EAC5C;;EAEA;;EAgBAC,UAAUA,CACRC,SAAkB,EAClBH,QAAc,
|
|
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","exports","__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":[]}
|
package/lib/commonjs/utils.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.warnIfNotHardwareAccelerated = exports.useCanvasEffect = void 0;
|
|
6
|
+
exports.warnIfNotHardwareAccelerated = exports.useGPUContext = exports.useCanvasEffect = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
const warnIfNotHardwareAccelerated = adapter => {
|
|
9
9
|
if (adapter.info.architecture === "swiftshader") {
|
|
@@ -11,28 +11,39 @@ const warnIfNotHardwareAccelerated = adapter => {
|
|
|
11
11
|
}
|
|
12
12
|
};
|
|
13
13
|
exports.warnIfNotHardwareAccelerated = warnIfNotHardwareAccelerated;
|
|
14
|
-
const
|
|
14
|
+
const useGPUContext = () => {
|
|
15
|
+
const [context, setContext] = (0, _react.useState)(null);
|
|
16
|
+
const ref = useCanvasEffect(() => {
|
|
17
|
+
const ctx = ref.current.getContext("webgpu");
|
|
18
|
+
setContext(ctx);
|
|
19
|
+
});
|
|
20
|
+
return {
|
|
21
|
+
ref,
|
|
22
|
+
context
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
exports.useGPUContext = useGPUContext;
|
|
26
|
+
const useCanvasEffect = effect => {
|
|
27
|
+
const unsub = (0, _react.useRef)(null);
|
|
15
28
|
const ref = (0, _react.useRef)(null);
|
|
16
|
-
const unsubscribe = (0, _react.useRef)();
|
|
17
29
|
(0, _react.useEffect)(() => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// }
|
|
23
|
-
// const device = await adapter.requestDevice();
|
|
24
|
-
const unsub = await effect();
|
|
25
|
-
if (unsub) {
|
|
26
|
-
unsubscribe.current = unsub;
|
|
30
|
+
ref.current.whenReady(async () => {
|
|
31
|
+
const sub = effect();
|
|
32
|
+
if (sub) {
|
|
33
|
+
unsub.current = sub;
|
|
27
34
|
}
|
|
28
35
|
});
|
|
29
36
|
return () => {
|
|
30
|
-
if (
|
|
31
|
-
|
|
37
|
+
if (unsub.current) {
|
|
38
|
+
if (unsub.current instanceof Promise) {
|
|
39
|
+
unsub.current.then(sub => sub && sub());
|
|
40
|
+
} else {
|
|
41
|
+
unsub.current();
|
|
42
|
+
}
|
|
32
43
|
}
|
|
33
44
|
};
|
|
34
45
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35
|
-
},
|
|
46
|
+
}, []);
|
|
36
47
|
return ref;
|
|
37
48
|
};
|
|
38
49
|
exports.useCanvasEffect = useCanvasEffect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","warnIfNotHardwareAccelerated","adapter","info","architecture","console","warn","exports","
|
|
1
|
+
{"version":3,"names":["_react","require","warnIfNotHardwareAccelerated","adapter","info","architecture","console","warn","exports","useGPUContext","context","setContext","useState","ref","useCanvasEffect","ctx","current","getContext","effect","unsub","useRef","useEffect","whenReady","sub","Promise","then"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAMO,MAAMC,4BAA4B,GAAIC,OAAmB,IAAK;EACnE,IAAIA,OAAO,CAACC,IAAI,CAACC,YAAY,KAAK,aAAa,EAAE;IAC/CC,OAAO,CAACC,IAAI,CACV,sGACF,CAAC;EACH;AACF,CAAC;AAACC,OAAA,CAAAN,4BAAA,GAAAA,4BAAA;AAEK,MAAMO,aAAa,GAAGA,CAAA,KAAM;EACjC,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAG,IAAAC,eAAQ,EAAyB,IAAI,CAAC;EACpE,MAAMC,GAAG,GAAGC,eAAe,CAAC,MAAM;IAChC,MAAMC,GAAG,GAAGF,GAAG,CAACG,OAAO,CAAEC,UAAU,CAAC,QAAQ,CAAE;IAC9CN,UAAU,CAACI,GAAG,CAAC;EACjB,CAAC,CAAC;EACF,OAAO;IAAEF,GAAG;IAAEH;EAAQ,CAAC;AACzB,CAAC;AAACF,OAAA,CAAAC,aAAA,GAAAA,aAAA;AAEK,MAAMK,eAAe,GAC1BI,MAIiB,IACd;EACH,MAAMC,KAAK,GAAG,IAAAC,aAAM,EAAmD,IAAI,CAAC;EAC5E,MAAMP,GAAG,GAAG,IAAAO,aAAM,EAAY,IAAI,CAAC;EACnC,IAAAC,gBAAS,EAAC,MAAM;IACdR,GAAG,CAACG,OAAO,CAAEM,SAAS,CAAC,YAAY;MACjC,MAAMC,GAAG,GAAGL,MAAM,CAAC,CAAC;MACpB,IAAIK,GAAG,EAAE;QACPJ,KAAK,CAACH,OAAO,GAAGO,GAAG;MACrB;IACF,CAAC,CAAC;IACF,OAAO,MAAM;MACX,IAAIJ,KAAK,CAACH,OAAO,EAAE;QACjB,IAAIG,KAAK,CAACH,OAAO,YAAYQ,OAAO,EAAE;UACpCL,KAAK,CAACH,OAAO,CAACS,IAAI,CAAEF,GAAG,IAAKA,GAAG,IAAIA,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC,MAAM;UACLJ,KAAK,CAACH,OAAO,CAAC,CAAC;QACjB;MACF;IACF,CAAC;IACD;EACF,CAAC,EAAE,EAAE,CAAC;EACN,OAAOH,GAAG;AACZ,CAAC;AAACL,OAAA,CAAAM,eAAA,GAAAA,eAAA","ignoreList":[]}
|
package/lib/module/Canvas.js
CHANGED
|
@@ -1,39 +1,100 @@
|
|
|
1
1
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
-
import {
|
|
2
|
+
import { View } from "react-native";
|
|
3
|
+
import { forwardRef, useEffect, useImperativeHandle, useRef, useState, useLayoutEffect, useCallback } from "react";
|
|
3
4
|
import WebGPUNativeView from "./WebGPUViewNativeComponent";
|
|
4
|
-
import WebGPUNativeModule from "./NativeWebGPUModule";
|
|
5
5
|
let CONTEXT_COUNTER = 1;
|
|
6
6
|
function generateContextId() {
|
|
7
7
|
return CONTEXT_COUNTER++;
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
9
|
+
const useSizeFabric = ref => {
|
|
10
|
+
const [size, setSize] = useState(null);
|
|
11
|
+
useLayoutEffect(() => {
|
|
12
|
+
if (!ref.current) {
|
|
13
|
+
throw new Error("Canvas ref is null");
|
|
14
|
+
}
|
|
15
|
+
ref.current.measureInWindow((_x, _y, width, height) => {
|
|
16
|
+
setSize({
|
|
17
|
+
width,
|
|
18
|
+
height
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}, [ref]);
|
|
22
|
+
return {
|
|
23
|
+
size,
|
|
24
|
+
onLayout: undefined
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
const useSizePaper = _ref => {
|
|
28
|
+
const [size, setSize] = useState(null);
|
|
29
|
+
const onLayout = useCallback(({
|
|
30
|
+
nativeEvent: {
|
|
31
|
+
layout: {
|
|
32
|
+
width,
|
|
33
|
+
height
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}) => {
|
|
37
|
+
if (size === null) {
|
|
38
|
+
setSize({
|
|
39
|
+
width,
|
|
40
|
+
height
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}, [size]);
|
|
44
|
+
return {
|
|
45
|
+
size,
|
|
46
|
+
onLayout
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export const Canvas = /*#__PURE__*/forwardRef(({
|
|
50
|
+
onLayout: _onLayout,
|
|
51
|
+
...props
|
|
52
|
+
}, ref) => {
|
|
53
|
+
const viewRef = useRef(null);
|
|
54
|
+
const FABRIC = RNWebGPU.fabric;
|
|
55
|
+
const useSize = FABRIC ? useSizeFabric : useSizePaper;
|
|
12
56
|
const [contextId, _] = useState(() => generateContextId());
|
|
57
|
+
const cb = useRef();
|
|
58
|
+
const {
|
|
59
|
+
size,
|
|
60
|
+
onLayout
|
|
61
|
+
} = useSize(viewRef);
|
|
62
|
+
useEffect(() => {
|
|
63
|
+
if (size && cb.current) {
|
|
64
|
+
cb.current();
|
|
65
|
+
}
|
|
66
|
+
}, [size]);
|
|
13
67
|
useImperativeHandle(ref, () => ({
|
|
14
68
|
getNativeSurface: () => {
|
|
15
|
-
|
|
16
|
-
|
|
69
|
+
if (size === null) {
|
|
70
|
+
throw new Error("[WebGPU] Canvas size is not available yet");
|
|
71
|
+
}
|
|
72
|
+
return RNWebGPU.getNativeSurface(contextId);
|
|
73
|
+
},
|
|
74
|
+
whenReady(callback) {
|
|
75
|
+
if (size === null) {
|
|
76
|
+
cb.current = callback;
|
|
77
|
+
} else {
|
|
78
|
+
callback();
|
|
79
|
+
}
|
|
17
80
|
},
|
|
18
81
|
getContext(contextName) {
|
|
19
82
|
if (contextName !== "webgpu") {
|
|
20
83
|
throw new Error(`[WebGPU] Unsupported context: ${contextName}`);
|
|
21
84
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (!nativeSurface) {
|
|
25
|
-
return null;
|
|
85
|
+
if (size === null) {
|
|
86
|
+
throw new Error("[WebGPU] Canvas size is not available yet");
|
|
26
87
|
}
|
|
27
|
-
|
|
28
|
-
return ctx;
|
|
88
|
+
return RNWebGPU.MakeWebGPUCanvasContext(contextId, size.width, size.height);
|
|
29
89
|
}
|
|
30
90
|
}));
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
91
|
+
return /*#__PURE__*/React.createElement(View, _extends({
|
|
92
|
+
ref: viewRef,
|
|
93
|
+
onLayout: onLayout
|
|
94
|
+
}, props), /*#__PURE__*/React.createElement(WebGPUNativeView, {
|
|
95
|
+
style: {
|
|
96
|
+
flex: 1
|
|
97
|
+
},
|
|
37
98
|
contextId: contextId
|
|
38
99
|
}));
|
|
39
100
|
});
|
package/lib/module/Canvas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["forwardRef","useEffect","useImperativeHandle","useState","
|
|
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":[]}
|
package/lib/module/Offscreen.js
CHANGED
|
@@ -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":"AAAA;AACA,OAAO,MAAMA,kBAAkB,CAA4B;EAGzDC,aAAa,GAAuD,IAAI;EACxEC,iBAAiB,GAAuD,IAAI;EAI5EC,WAAWA,CAACC,KAAa,EAAEC,MAAc,EAAE;IACzC,IAAI,CAACD,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,OAAO,GAAG,IAAIC,yBAAyB,CAAC,IAAI,CAAC;EACpD;EAEAC,aAAaA,CAACC,QAA6B,EAAiB;IAC1D;IACA,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;EAC5C;;EAEA;;EAgBAC,UAAUA,CACRC,SAAkB,EAClBH,QAAc,
|
|
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":[]}
|
package/lib/module/utils.js
CHANGED
|
@@ -1,31 +1,41 @@
|
|
|
1
|
-
import { useEffect, useRef } from "react";
|
|
1
|
+
import { useEffect, useRef, useState } from "react";
|
|
2
2
|
export const warnIfNotHardwareAccelerated = adapter => {
|
|
3
3
|
if (adapter.info.architecture === "swiftshader") {
|
|
4
4
|
console.warn("GPUAdapter is not hardware accelerated. This is common on Android emulators. Rendering will be slow.");
|
|
5
5
|
}
|
|
6
6
|
};
|
|
7
|
-
export const
|
|
7
|
+
export const useGPUContext = () => {
|
|
8
|
+
const [context, setContext] = useState(null);
|
|
9
|
+
const ref = useCanvasEffect(() => {
|
|
10
|
+
const ctx = ref.current.getContext("webgpu");
|
|
11
|
+
setContext(ctx);
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
ref,
|
|
15
|
+
context
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export const useCanvasEffect = effect => {
|
|
19
|
+
const unsub = useRef(null);
|
|
8
20
|
const ref = useRef(null);
|
|
9
|
-
const unsubscribe = useRef();
|
|
10
21
|
useEffect(() => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
// }
|
|
16
|
-
// const device = await adapter.requestDevice();
|
|
17
|
-
const unsub = await effect();
|
|
18
|
-
if (unsub) {
|
|
19
|
-
unsubscribe.current = unsub;
|
|
22
|
+
ref.current.whenReady(async () => {
|
|
23
|
+
const sub = effect();
|
|
24
|
+
if (sub) {
|
|
25
|
+
unsub.current = sub;
|
|
20
26
|
}
|
|
21
27
|
});
|
|
22
28
|
return () => {
|
|
23
|
-
if (
|
|
24
|
-
|
|
29
|
+
if (unsub.current) {
|
|
30
|
+
if (unsub.current instanceof Promise) {
|
|
31
|
+
unsub.current.then(sub => sub && sub());
|
|
32
|
+
} else {
|
|
33
|
+
unsub.current();
|
|
34
|
+
}
|
|
25
35
|
}
|
|
26
36
|
};
|
|
27
37
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
28
|
-
},
|
|
38
|
+
}, []);
|
|
29
39
|
return ref;
|
|
30
40
|
};
|
|
31
41
|
//# sourceMappingURL=utils.js.map
|
package/lib/module/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","warnIfNotHardwareAccelerated","adapter","info","architecture","console","warn","
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useState","warnIfNotHardwareAccelerated","adapter","info","architecture","console","warn","useGPUContext","context","setContext","ref","useCanvasEffect","ctx","current","getContext","effect","unsub","whenReady","sub","Promise","then"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAMnD,OAAO,MAAMC,4BAA4B,GAAIC,OAAmB,IAAK;EACnE,IAAIA,OAAO,CAACC,IAAI,CAACC,YAAY,KAAK,aAAa,EAAE;IAC/CC,OAAO,CAACC,IAAI,CACV,sGACF,CAAC;EACH;AACF,CAAC;AAED,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EACjC,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGT,QAAQ,CAAyB,IAAI,CAAC;EACpE,MAAMU,GAAG,GAAGC,eAAe,CAAC,MAAM;IAChC,MAAMC,GAAG,GAAGF,GAAG,CAACG,OAAO,CAAEC,UAAU,CAAC,QAAQ,CAAE;IAC9CL,UAAU,CAACG,GAAG,CAAC;EACjB,CAAC,CAAC;EACF,OAAO;IAAEF,GAAG;IAAEF;EAAQ,CAAC;AACzB,CAAC;AAED,OAAO,MAAMG,eAAe,GAC1BI,MAIiB,IACd;EACH,MAAMC,KAAK,GAAGjB,MAAM,CAAmD,IAAI,CAAC;EAC5E,MAAMW,GAAG,GAAGX,MAAM,CAAY,IAAI,CAAC;EACnCD,SAAS,CAAC,MAAM;IACdY,GAAG,CAACG,OAAO,CAAEI,SAAS,CAAC,YAAY;MACjC,MAAMC,GAAG,GAAGH,MAAM,CAAC,CAAC;MACpB,IAAIG,GAAG,EAAE;QACPF,KAAK,CAACH,OAAO,GAAGK,GAAG;MACrB;IACF,CAAC,CAAC;IACF,OAAO,MAAM;MACX,IAAIF,KAAK,CAACH,OAAO,EAAE;QACjB,IAAIG,KAAK,CAACH,OAAO,YAAYM,OAAO,EAAE;UACpCH,KAAK,CAACH,OAAO,CAACO,IAAI,CAAEF,GAAG,IAAKA,GAAG,IAAIA,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC,MAAM;UACLF,KAAK,CAACH,OAAO,CAAC,CAAC;QACjB;MACF;IACF,CAAC;IACD;EACF,CAAC,EAAE,EAAE,CAAC;EACN,OAAOH,GAAG;AACZ,CAAC","ignoreList":[]}
|