react-native-skia 3.0.0 → 3.0.2
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/Package.swift +14 -13
- package/android/CMakeLists.txt +13 -42
- package/android/build.gradle +55 -47
- package/android/cpp/jni/JniLoad.cpp +2 -4
- package/android/cpp/jni/include/JniSkiaView.h +123 -0
- package/android/cpp/rnskia-android/{RNSkOpenGLCanvasProvider.cpp → RNSkAndroidCanvasProvider.cpp} +45 -100
- package/android/cpp/rnskia-android/{RNSkOpenGLCanvasProvider.h → RNSkAndroidCanvasProvider.h} +24 -22
- package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +0 -83
- package/android/cpp/rnskia-android/RNSkAndroidVideo.cpp +0 -8
- package/android/src/main/java/com/reactnative/skia/RNSkiaPackage.java +1 -2
- package/android/src/main/java/com/reactnative/skia/SkiaSurfaceView.java +1 -3
- package/android/src/main/java/com/reactnative/skia/SkiaTextureView.java +1 -17
- package/android/src/main/java/com/reactnative/skia/{SkiaBaseView.java → SkiaView.java} +78 -16
- package/android/src/main/java/com/reactnative/skia/SkiaViewManager.java +85 -0
- package/apple/MetalLayerColorSpace.mm +0 -4
- package/apple/RNSkApplePlatformContext.h +0 -14
- package/apple/RNSkApplePlatformContext.mm +2 -112
- package/apple/RNSkMetalCanvasProvider.h +14 -19
- package/apple/RNSkMetalCanvasProvider.mm +35 -68
- package/apple/SkiaView.h +20 -0
- package/apple/SkiaView.mm +210 -0
- package/cpp/api/JsiSkApi.h +2 -13
- package/cpp/api/JsiSkCanvas.h +4 -18
- package/cpp/api/JsiSkGraphiteContext.h +1 -5
- package/cpp/api/JsiSkGraphiteRecording.h +1 -5
- package/cpp/api/JsiSkImage.h +7 -41
- package/cpp/api/JsiSkImageFactory.h +0 -14
- package/cpp/api/JsiSkSurface.h +2 -16
- package/cpp/api/JsiSkSurfaceFactory.h +0 -8
- package/cpp/rnskia/RNDawnContext.h +6 -0
- package/cpp/rnskia/RNDawnInterop.cpp +0 -4
- package/cpp/rnskia/RNDawnUtils.h +0 -1
- package/cpp/rnskia/RNDawnWindowContext.cpp +10 -0
- package/cpp/rnskia/RNDawnWindowContext.h +4 -0
- package/cpp/rnskia/RNSkCanvasProvider.h +221 -0
- package/cpp/rnskia/RNSkGraphiteProducer.cpp +36 -14
- package/cpp/rnskia/RNSkGraphiteProducer.h +23 -8
- package/cpp/rnskia/RNSkGraphiteTarget.h +383 -0
- package/cpp/rnskia/RNSkJsiViewApi.h +9 -18
- package/cpp/rnskia/RNSkPlatformContext.h +9 -15
- package/cpp/rnskia/RNSkView.h +340 -245
- package/jestSetup.js +1 -3
- package/lib/commonjs/Platform/Platform.web.js +1 -1
- package/lib/commonjs/Platform/Platform.web.js.map +1 -1
- package/lib/commonjs/index.d.ts +1 -3
- package/lib/commonjs/index.js +3 -12
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/mock/index.js +0 -1
- package/lib/commonjs/mock/index.js.map +1 -1
- package/lib/commonjs/renderer/Canvas.d.ts +15 -12
- package/lib/commonjs/renderer/Canvas.js +24 -20
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/skia/types/Graphite.d.ts +3 -3
- package/lib/commonjs/skia/types/Graphite.js.map +1 -1
- package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +2 -2
- package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/commonjs/skia/types/Skia.d.ts +1 -2
- package/lib/commonjs/skia/types/Skia.js.map +1 -1
- package/lib/commonjs/skia/types/Surface/SurfaceFactory.d.ts +1 -1
- package/lib/commonjs/skia/types/Surface/SurfaceFactory.js.map +1 -1
- package/lib/commonjs/specs/NativeSkiaModule.web.d.ts +5 -4
- package/lib/commonjs/specs/NativeSkiaModule.web.js +5 -9
- package/lib/commonjs/specs/NativeSkiaModule.web.js.map +1 -1
- package/lib/{typescript/src/specs/SkiaPictureViewNativeComponent.d.ts → commonjs/specs/SkiaViewNativeComponent.d.ts} +0 -3
- package/lib/commonjs/specs/{SkiaPictureViewNativeComponent.js → SkiaViewNativeComponent.js} +2 -2
- package/lib/commonjs/specs/SkiaViewNativeComponent.js.map +1 -0
- package/lib/commonjs/specs/SkiaViewNativeComponent.web.d.ts +10 -0
- package/lib/commonjs/specs/SkiaViewNativeComponent.web.js +27 -0
- package/lib/commonjs/specs/SkiaViewNativeComponent.web.js.map +1 -0
- package/lib/commonjs/views/SkiaGraphiteView.d.ts +3 -4
- package/lib/commonjs/views/SkiaGraphiteView.js +23 -12
- package/lib/commonjs/views/SkiaGraphiteView.js.map +1 -1
- package/lib/commonjs/views/SkiaPictureView.d.ts +4 -1
- package/lib/commonjs/views/SkiaPictureView.js +12 -10
- package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
- package/lib/commonjs/views/SkiaView.web.d.ts +12 -0
- package/lib/commonjs/views/{SkiaGraphiteView.web.js → SkiaView.web.js} +82 -38
- package/lib/commonjs/views/SkiaView.web.js.map +1 -0
- package/lib/commonjs/views/SkiaWebRenderer.js +1 -1
- package/lib/commonjs/views/SkiaWebRenderer.js.map +1 -1
- package/lib/commonjs/views/android.d.ts +6 -0
- package/lib/commonjs/views/android.js +17 -0
- package/lib/commonjs/views/android.js.map +1 -0
- package/lib/commonjs/views/types.d.ts +3 -12
- package/lib/commonjs/views/types.js.map +1 -1
- package/lib/module/Platform/Platform.web.js +1 -1
- package/lib/module/Platform/Platform.web.js.map +1 -1
- package/lib/module/index.d.ts +1 -3
- package/lib/module/index.js +1 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/mock/index.js +0 -1
- package/lib/module/mock/index.js.map +1 -1
- package/lib/module/renderer/Canvas.d.ts +15 -12
- package/lib/module/renderer/Canvas.js +24 -19
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/skia/types/Graphite.d.ts +3 -3
- package/lib/module/skia/types/Graphite.js.map +1 -1
- package/lib/module/skia/types/Image/ImageFactory.d.ts +2 -2
- package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/module/skia/types/Skia.d.ts +1 -2
- package/lib/module/skia/types/Skia.js.map +1 -1
- package/lib/module/skia/types/Surface/SurfaceFactory.d.ts +1 -1
- package/lib/module/skia/types/Surface/SurfaceFactory.js.map +1 -1
- package/lib/module/specs/NativeSkiaModule.web.d.ts +5 -4
- package/lib/module/specs/NativeSkiaModule.web.js +5 -9
- package/lib/module/specs/NativeSkiaModule.web.js.map +1 -1
- package/lib/{commonjs/specs/SkiaPictureViewNativeComponent.d.ts → module/specs/SkiaViewNativeComponent.d.ts} +0 -3
- package/lib/module/specs/{SkiaPictureViewNativeComponent.js → SkiaViewNativeComponent.js} +2 -2
- package/lib/module/specs/SkiaViewNativeComponent.js.map +1 -0
- package/lib/module/specs/SkiaViewNativeComponent.web.d.ts +10 -0
- package/lib/module/specs/SkiaViewNativeComponent.web.js +21 -0
- package/lib/module/specs/SkiaViewNativeComponent.web.js.map +1 -0
- package/lib/module/views/SkiaGraphiteView.d.ts +3 -4
- package/lib/module/views/SkiaGraphiteView.js +23 -12
- package/lib/module/views/SkiaGraphiteView.js.map +1 -1
- package/lib/module/views/SkiaPictureView.d.ts +4 -1
- package/lib/module/views/SkiaPictureView.js +12 -10
- package/lib/module/views/SkiaPictureView.js.map +1 -1
- package/lib/module/views/SkiaView.web.d.ts +12 -0
- package/lib/module/views/{SkiaGraphiteView.web.js → SkiaView.web.js} +80 -36
- package/lib/module/views/SkiaView.web.js.map +1 -0
- package/lib/module/views/SkiaWebRenderer.js +1 -1
- package/lib/module/views/SkiaWebRenderer.js.map +1 -1
- package/lib/module/views/android.d.ts +6 -0
- package/lib/module/views/android.js +10 -0
- package/lib/module/views/android.js.map +1 -0
- package/lib/module/views/types.d.ts +3 -12
- package/lib/module/views/types.js.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -3
- package/lib/typescript/src/renderer/Canvas.d.ts +15 -12
- package/lib/typescript/src/skia/types/Graphite.d.ts +3 -3
- package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +2 -2
- package/lib/typescript/src/skia/types/Skia.d.ts +1 -2
- package/lib/typescript/src/skia/types/Surface/SurfaceFactory.d.ts +1 -1
- package/lib/typescript/src/specs/NativeSkiaModule.web.d.ts +5 -4
- package/lib/{module/specs/SkiaPictureViewNativeComponent.d.ts → typescript/src/specs/SkiaViewNativeComponent.d.ts} +0 -3
- package/lib/typescript/src/specs/SkiaViewNativeComponent.web.d.ts +10 -0
- package/lib/typescript/src/views/SkiaGraphiteView.d.ts +3 -4
- package/lib/typescript/src/views/SkiaPictureView.d.ts +4 -1
- package/lib/typescript/src/views/SkiaView.web.d.ts +12 -0
- package/lib/typescript/src/views/android.d.ts +6 -0
- package/lib/typescript/src/views/types.d.ts +3 -12
- package/package.json +8 -16
- package/react-native-skia.podspec +50 -57
- package/src/Platform/Platform.web.tsx +1 -1
- package/src/index.ts +1 -3
- package/src/mock/index.ts +0 -1
- package/src/renderer/Canvas.tsx +23 -27
- package/src/skia/types/Graphite.ts +3 -3
- package/src/skia/types/Image/ImageFactory.ts +2 -2
- package/src/skia/types/Skia.ts +1 -2
- package/src/skia/types/Surface/SurfaceFactory.ts +1 -1
- package/src/specs/NativeSkiaModule.web.ts +9 -21
- package/src/specs/{SkiaPictureViewNativeComponent.ts → SkiaViewNativeComponent.ts} +1 -4
- package/src/specs/{SkiaPictureViewNativeComponent.web.ts → SkiaViewNativeComponent.web.ts} +8 -10
- package/src/views/SkiaGraphiteView.tsx +27 -16
- package/src/views/SkiaPictureView.tsx +11 -10
- package/src/views/{SkiaGraphiteView.web.tsx → SkiaView.web.tsx} +100 -53
- package/src/views/SkiaWebRenderer.ts +1 -1
- package/src/views/android.ts +16 -0
- package/src/views/types.ts +3 -14
- package/android/cpp/jni/include/JniSkiaBaseView.h +0 -92
- package/android/cpp/jni/include/JniSkiaGraphiteView.h +0 -176
- package/android/cpp/jni/include/JniSkiaPictureView.h +0 -172
- package/android/cpp/rnskia-android/GrAHardwareBufferUtils.cpp +0 -245
- package/android/cpp/rnskia-android/GrAHardwareBufferUtils.h +0 -33
- package/android/cpp/rnskia-android/OpenGLContext.h +0 -248
- package/android/cpp/rnskia-android/OpenGLWindowContext.cpp +0 -67
- package/android/cpp/rnskia-android/OpenGLWindowContext.h +0 -75
- package/android/cpp/rnskia-android/RNSkAndroidView.h +0 -67
- package/android/cpp/rnskia-android/gl/Context.h +0 -80
- package/android/cpp/rnskia-android/gl/Display.h +0 -123
- package/android/cpp/rnskia-android/gl/Error.cpp +0 -45
- package/android/cpp/rnskia-android/gl/Error.h +0 -8
- package/android/cpp/rnskia-android/gl/Surface.h +0 -43
- package/android/src/main/java/com/reactnative/skia/SkiaBaseViewManager.java +0 -65
- package/android/src/main/java/com/reactnative/skia/SkiaGraphiteView.java +0 -78
- package/android/src/main/java/com/reactnative/skia/SkiaGraphiteViewManager.java +0 -32
- package/android/src/main/java/com/reactnative/skia/SkiaPictureView.java +0 -105
- package/android/src/main/java/com/reactnative/skia/SkiaPictureViewManager.java +0 -44
- package/apple/MetalContext.h +0 -116
- package/apple/MetalContext.mm +0 -38
- package/apple/MetalWindowContext.h +0 -42
- package/apple/MetalWindowContext.mm +0 -95
- package/apple/RNSkAppleView.h +0 -49
- package/apple/RNSkAppleView.mm +0 -35
- package/apple/SkiaCVPixelBufferUtils.h +0 -122
- package/apple/SkiaCVPixelBufferUtils.mm +0 -535
- package/apple/SkiaGraphiteView.h +0 -26
- package/apple/SkiaGraphiteView.mm +0 -180
- package/apple/SkiaPictureView.h +0 -7
- package/apple/SkiaPictureView.mm +0 -70
- package/apple/SkiaUIView.h +0 -31
- package/apple/SkiaUIView.mm +0 -164
- package/cpp/rnskia/RNSkGraphiteView.h +0 -708
- package/cpp/rnskia/RNSkPictureView.cpp +0 -69
- package/cpp/rnskia/RNSkPictureView.h +0 -211
- package/cpp/skia/src/gpu/ganesh/gl/GrGLDefines.h +0 -1162
- package/lib/commonjs/renderer/DefaultCanvas.d.ts +0 -8
- package/lib/commonjs/renderer/DefaultCanvas.js +0 -42
- package/lib/commonjs/renderer/DefaultCanvas.js.map +0 -1
- package/lib/commonjs/renderer/GraphiteCanvas.d.ts +0 -22
- package/lib/commonjs/renderer/GraphiteCanvas.js +0 -64
- package/lib/commonjs/renderer/GraphiteCanvas.js.map +0 -1
- package/lib/commonjs/renderer/GraphiteCanvas.web.d.ts +0 -1
- package/lib/commonjs/renderer/GraphiteCanvas.web.js +0 -13
- package/lib/commonjs/renderer/GraphiteCanvas.web.js.map +0 -1
- package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.d.ts +0 -10
- package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.js +0 -12
- package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.js.map +0 -1
- package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.web.d.ts +0 -9
- package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.web.js +0 -28
- package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.web.js.map +0 -1
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js.map +0 -1
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.web.d.ts +0 -10
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.web.js +0 -29
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.web.js.map +0 -1
- package/lib/commonjs/views/SkiaGraphiteView.web.d.ts +0 -14
- package/lib/commonjs/views/SkiaGraphiteView.web.js.map +0 -1
- package/lib/commonjs/views/SkiaPictureView.web.d.ts +0 -11
- package/lib/commonjs/views/SkiaPictureView.web.js +0 -165
- package/lib/commonjs/views/SkiaPictureView.web.js.map +0 -1
- package/lib/module/renderer/DefaultCanvas.d.ts +0 -8
- package/lib/module/renderer/DefaultCanvas.js +0 -34
- package/lib/module/renderer/DefaultCanvas.js.map +0 -1
- package/lib/module/renderer/GraphiteCanvas.d.ts +0 -22
- package/lib/module/renderer/GraphiteCanvas.js +0 -57
- package/lib/module/renderer/GraphiteCanvas.js.map +0 -1
- package/lib/module/renderer/GraphiteCanvas.web.d.ts +0 -1
- package/lib/module/renderer/GraphiteCanvas.web.js +0 -4
- package/lib/module/renderer/GraphiteCanvas.web.js.map +0 -1
- package/lib/module/specs/SkiaGraphiteViewNativeComponent.d.ts +0 -10
- package/lib/module/specs/SkiaGraphiteViewNativeComponent.js +0 -8
- package/lib/module/specs/SkiaGraphiteViewNativeComponent.js.map +0 -1
- package/lib/module/specs/SkiaGraphiteViewNativeComponent.web.d.ts +0 -9
- package/lib/module/specs/SkiaGraphiteViewNativeComponent.web.js +0 -22
- package/lib/module/specs/SkiaGraphiteViewNativeComponent.web.js.map +0 -1
- package/lib/module/specs/SkiaPictureViewNativeComponent.js.map +0 -1
- package/lib/module/specs/SkiaPictureViewNativeComponent.web.d.ts +0 -10
- package/lib/module/specs/SkiaPictureViewNativeComponent.web.js +0 -23
- package/lib/module/specs/SkiaPictureViewNativeComponent.web.js.map +0 -1
- package/lib/module/views/SkiaGraphiteView.web.d.ts +0 -14
- package/lib/module/views/SkiaGraphiteView.web.js.map +0 -1
- package/lib/module/views/SkiaPictureView.web.d.ts +0 -11
- package/lib/module/views/SkiaPictureView.web.js +0 -156
- package/lib/module/views/SkiaPictureView.web.js.map +0 -1
- package/lib/typescript/src/renderer/DefaultCanvas.d.ts +0 -8
- package/lib/typescript/src/renderer/GraphiteCanvas.d.ts +0 -22
- package/lib/typescript/src/renderer/GraphiteCanvas.web.d.ts +0 -1
- package/lib/typescript/src/specs/SkiaGraphiteViewNativeComponent.d.ts +0 -10
- package/lib/typescript/src/specs/SkiaGraphiteViewNativeComponent.web.d.ts +0 -9
- package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.web.d.ts +0 -10
- package/lib/typescript/src/views/SkiaGraphiteView.web.d.ts +0 -14
- package/lib/typescript/src/views/SkiaPictureView.web.d.ts +0 -11
- package/libs/.graphite +0 -1
- package/src/renderer/DefaultCanvas.tsx +0 -41
- package/src/renderer/GraphiteCanvas.tsx +0 -61
- package/src/renderer/GraphiteCanvas.web.tsx +0 -3
- package/src/specs/SkiaGraphiteViewNativeComponent.ts +0 -17
- package/src/specs/SkiaGraphiteViewNativeComponent.web.ts +0 -31
- package/src/views/SkiaPictureView.web.tsx +0 -224
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_JsiSkPictureRecorder","_Platform","_SkiaViewNativeId","_SkiaWebRenderer","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","WebGraphiteRecording","constructor","picture","retain","holds","release","disposed","dispose","WebGraphiteContext","target","width","getSize","height","beginRecording","recorder","Error","JsiSkPictureRecorder","CanvasKit","PictureRecorder","x","y","finishRecording","finishRecordingAsPicture","submit","recording","SkiaView","props","ref","onLayout","canvasRef","useRef","pictureRef","queueRef","shownRef","flushScheduledRef","nativeId","useMemo","nativeID","undefined","SkiaViewNativeId","current","isStatic","__destroyWebGLContextAfterRender","present","useCallback","renderer","frame","draw","map","previous","forEach","paint","rendererRef","useSkiaWebRenderer","flush","redraw","queueMicrotask","setPicture","push","_canvasRef$current","_canvasRef$current2","clientWidth","clientHeight","getContext","makeImageSnapshot","rect","measure","callback","getBoundingClientRect","parentElement","offsetParent","parentRect","left","top","window","scrollX","scrollY","measureInWindow","useImperativeHandle","useEffect","api","global","SkiaViewApi","registerView","unregisterView","_ref","_onLayout","_nativeID","_isStatic","viewProps","createElement","Platform","View","key","style","display","exports"],"sources":["SkiaView.web.tsx"],"sourcesContent":["/* global HTMLCanvasElement */\nimport React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n} from \"react\";\nimport type { ViewProps } from \"react-native\";\n\nimport type {\n SkCanvas,\n SkGraphiteContext,\n SkGraphiteRecording,\n SkImage,\n SkPicture,\n SkRect,\n} from \"../skia/types\";\nimport { JsiSkPictureRecorder } from \"../skia/web/JsiSkPictureRecorder\";\nimport { Platform } from \"../Platform\";\nimport type {\n ISkiaViewApiWeb,\n SkiaWebViewHandle,\n} from \"../specs/NativeSkiaModule.web\";\n\nimport { SkiaViewNativeId } from \"./SkiaViewNativeId\";\nimport { useSkiaWebRenderer } from \"./SkiaWebRenderer\";\nimport type { Renderer, WebFrame } from \"./SkiaWebRenderer\";\n\n// The web has no Graphite: the view paints pictures on a WebGL canvas (with\n// context-loss recovery and the destroy-context-after-render mode). It shows\n// one of two kinds of content. The picture of a <Canvas> or a\n// <SkiaPictureView> is a whole frame: the latest one wins. The recordings\n// submitted through the view's context (SkiaGraphiteView) keep their native\n// semantics, presented in submission order and never dropped, with one\n// difference: the surface starts cleared on every frame, so a recording draws\n// the whole frame rather than a delta.\n\nexport interface SkiaViewHandle extends SkiaWebViewHandle {\n /** The canvas element, for Reanimated's measure(). */\n readonly canvasRef: () => HTMLCanvasElement | null;\n}\n\nexport interface SkiaViewProps extends ViewProps {\n ref?: React.Ref<SkiaViewHandle>;\n __destroyWebGLContextAfterRender?: boolean;\n}\n\n/**\n * A frame recorded on the web. The view holds it while it is queued or on\n * screen: disposing it then only marks it, the picture is deleted once the\n * view lets go of it.\n */\nclass WebGraphiteRecording implements SkGraphiteRecording {\n readonly __typename__ = \"GraphiteRecording\" as const;\n private holds = 0;\n private disposed = false;\n\n constructor(readonly picture: SkPicture) {}\n\n retain() {\n this.holds++;\n }\n\n release() {\n this.holds--;\n if (this.disposed && this.holds === 0) {\n this.picture.dispose();\n }\n }\n\n dispose() {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n if (this.holds === 0) {\n this.picture.dispose();\n }\n }\n\n [Symbol.dispose]() {\n this.dispose();\n }\n}\n\ninterface RecordingTarget {\n getSize(): { width: number; height: number };\n submit(recording: WebGraphiteRecording): void;\n}\n\nclass WebGraphiteContext implements SkGraphiteContext {\n readonly __typename__ = \"GraphiteContext\" as const;\n private recorder: JsiSkPictureRecorder | null = null;\n\n constructor(private readonly target: RecordingTarget) {}\n\n get width() {\n return this.target.getSize().width;\n }\n\n get height() {\n return this.target.getSize().height;\n }\n\n beginRecording(): SkCanvas {\n if (this.recorder) {\n throw new Error(\n \"SkiaGraphiteView: a recording is already open, call finishRecording() first.\"\n );\n }\n const { width, height } = this.target.getSize();\n if (width <= 0 || height <= 0) {\n throw new Error(\"SkiaGraphiteView: the view has no size yet.\");\n }\n this.recorder = new JsiSkPictureRecorder(\n CanvasKit,\n new CanvasKit.PictureRecorder()\n );\n return this.recorder.beginRecording({ x: 0, y: 0, width, height });\n }\n\n finishRecording(): SkGraphiteRecording {\n if (!this.recorder) {\n throw new Error(\n \"SkiaGraphiteView: no recording is open, call beginRecording() first.\"\n );\n }\n const picture = this.recorder.finishRecordingAsPicture();\n this.recorder.dispose();\n this.recorder = null;\n return new WebGraphiteRecording(picture);\n }\n\n submit(recording: SkGraphiteRecording) {\n if (!(recording instanceof WebGraphiteRecording)) {\n throw new Error(\n \"SkiaGraphiteView: submit() expects a recording from finishRecording().\"\n );\n }\n this.target.submit(recording);\n }\n\n dispose() {}\n\n [Symbol.dispose]() {}\n}\n\nexport const SkiaView = (props: SkiaViewProps) => {\n const { ref, onLayout } = props;\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n // The picture of a <Canvas> or a <SkiaPictureView>: a whole frame.\n const pictureRef = useRef<SkPicture | null>(null);\n // Recordings submitted since the last frame, in order, and the frame on\n // screen, replayed when the surface is recreated.\n const queueRef = useRef<WebGraphiteRecording[]>([]);\n const shownRef = useRef<WebGraphiteRecording[]>([]);\n const flushScheduledRef = useRef(false);\n const nativeId = useMemo(\n () =>\n props.nativeID !== undefined\n ? Number(props.nativeID)\n : SkiaViewNativeId.current++,\n [props.nativeID]\n );\n\n const isStatic = props.__destroyWebGLContextAfterRender === true;\n\n // Presents the recordings submitted since the last frame. A frame that\n // cannot be painted yet (unmeasured canvas, lost context) stays queued for\n // the next opportunity.\n const present = useCallback((renderer: Renderer) => {\n const frame = queueRef.current;\n if (frame.length === 0) {\n return;\n }\n queueRef.current = [];\n if (!renderer.draw(frame.map((recording) => recording.picture))) {\n queueRef.current = frame;\n return;\n }\n const previous = shownRef.current;\n shownRef.current = frame;\n previous.forEach((recording) => recording.release());\n }, []);\n\n // Paints what the view holds: pending recordings first, else the picture,\n // else the frame on screen again (the surface was recreated).\n const paint = useCallback(\n (renderer: Renderer) => {\n if (queueRef.current.length > 0) {\n present(renderer);\n } else if (pictureRef.current) {\n renderer.draw([pictureRef.current]);\n } else if (shownRef.current.length > 0) {\n renderer.draw(shownRef.current.map((recording) => recording.picture));\n }\n },\n [present]\n );\n const rendererRef = useSkiaWebRenderer(canvasRef, isStatic, {\n paint,\n onLayout,\n });\n\n // Draws are flushed from a microtask rather than an animation frame: the\n // browser composites once per frame either way, and painting right away\n // keeps a frame produced inside an animation callback (the Reanimated\n // mapper, a frame loop) from slipping to the next one. Deferring to the\n // next animation frame would alternate between \"flush pending in this\n // frame\" and \"flush scheduled for the next frame\", halving the effective\n // frame rate. Without a renderer yet (an unmeasured canvas), the content\n // stays held and is painted by the renderer once it exists, so it is\n // never lost.\n const flush = useCallback(() => {\n flushScheduledRef.current = false;\n if (rendererRef.current) {\n paint(rendererRef.current);\n }\n }, [paint, rendererRef]);\n\n const redraw = useCallback(() => {\n if (!flushScheduledRef.current) {\n flushScheduledRef.current = true;\n queueMicrotask(flush);\n }\n }, [flush]);\n\n const setPicture = useCallback(\n (picture: SkPicture) => {\n pictureRef.current = picture;\n redraw();\n },\n [redraw]\n );\n\n const submit = useCallback(\n (recording: WebGraphiteRecording) => {\n recording.retain();\n queueRef.current.push(recording);\n redraw();\n },\n [redraw]\n );\n\n const getSize = useCallback(\n () => ({\n width: canvasRef.current?.clientWidth || 0,\n height: canvasRef.current?.clientHeight || 0,\n }),\n []\n );\n\n const getContext = useCallback(\n (): SkGraphiteContext => new WebGraphiteContext({ getSize, submit }),\n [getSize, submit]\n );\n\n const makeImageSnapshot = useCallback(\n (rect?: SkRect): SkImage | null => {\n const renderer = rendererRef.current;\n if (!renderer) {\n return null;\n }\n let frame: WebFrame;\n if (queueRef.current.length > 0) {\n frame = queueRef.current.map((recording) => recording.picture);\n } else if (pictureRef.current) {\n frame = [pictureRef.current];\n } else {\n frame = shownRef.current.map((recording) => recording.picture);\n }\n if (frame.length === 0) {\n return null;\n }\n return renderer.makeImageSnapshot(frame, rect);\n },\n [rendererRef]\n );\n\n const measure = useCallback(\n (\n callback: (\n x: number,\n y: number,\n width: number,\n height: number,\n pageX: number,\n pageY: number\n ) => void\n ) => {\n if (canvasRef.current) {\n const rect = canvasRef.current.getBoundingClientRect();\n const parentElement = canvasRef.current.offsetParent as HTMLElement;\n const parentRect = parentElement?.getBoundingClientRect() || {\n left: 0,\n top: 0,\n };\n callback(\n // x, y are relative to the parent\n rect.left - parentRect.left,\n rect.top - parentRect.top,\n rect.width,\n rect.height,\n // pageX, pageY are absolute screen coordinates\n rect.left + window.scrollX,\n rect.top + window.scrollY\n );\n }\n },\n []\n );\n\n const measureInWindow = useCallback(\n (\n callback: (x: number, y: number, width: number, height: number) => void\n ) => {\n if (canvasRef.current) {\n const rect = canvasRef.current.getBoundingClientRect();\n callback(rect.left, rect.top, rect.width, rect.height);\n }\n },\n []\n );\n\n // No flush cancellation is needed on unmount: a microtask queued before\n // unmount runs within the same task, and flush no-ops once the\n // layout-effect cleanup has nulled rendererRef.\n\n useImperativeHandle(\n ref,\n () => ({\n setPicture,\n getContext,\n getSize,\n redraw,\n makeImageSnapshot,\n measure,\n measureInWindow,\n get canvasRef() {\n return () => canvasRef.current;\n },\n }),\n [\n setPicture,\n getContext,\n getSize,\n redraw,\n makeImageSnapshot,\n measure,\n measureInWindow,\n ]\n );\n\n useEffect(() => {\n const api = global.SkiaViewApi as ISkiaViewApiWeb;\n api.registerView(`${nativeId}`, {\n setPicture,\n getContext,\n getSize,\n redraw,\n makeImageSnapshot,\n measure,\n measureInWindow,\n });\n return () => {\n // Views must be removed on unmount: the handle's closures capture the\n // canvas element, so a stale entry retains the whole detached DOM tree.\n api.unregisterView(`${nativeId}`);\n };\n }, [\n setPicture,\n getContext,\n getSize,\n redraw,\n makeImageSnapshot,\n measure,\n measureInWindow,\n nativeId,\n ]);\n\n // Let go of the recordings the view holds.\n useEffect(\n () => () => {\n queueRef.current.forEach((recording) => recording.release());\n queueRef.current = [];\n shownRef.current.forEach((recording) => recording.release());\n shownRef.current = [];\n },\n []\n );\n\n const {\n ref: _ref,\n onLayout: _onLayout,\n nativeID: _nativeID,\n __destroyWebGLContextAfterRender: _isStatic,\n ...viewProps\n } = props;\n return (\n <Platform.View nativeID={`${nativeId}`} {...viewProps}>\n <canvas\n // A canvas element is bound to one context kind for life (WebGL for\n // the live renderer, 2D for the static one), so switching renderers\n // needs a fresh element.\n key={isStatic ? \"static\" : \"webgl\"}\n ref={canvasRef}\n style={{ display: \"block\", width: \"100%\", height: \"100%\" }}\n />\n </Platform.View>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,7 +9,7 @@ var _JsiSkSurface = require("../skia/web/JsiSkSurface");
|
|
|
9
9
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
10
10
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
11
11
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* global HTMLCanvasElement, ResizeObserver, MediaQueryList */
|
|
12
|
-
// The WebGL renderers behind the web
|
|
12
|
+
// The WebGL renderers behind the web view (SkiaView.web):
|
|
13
13
|
// a <canvas> element, its WebGL context and the CanvasKit surface built on
|
|
14
14
|
// it, with the context-loss handling and the "destroy the context after each
|
|
15
15
|
// draw" mode that keeps a page under the browser's live-context limit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_JsiSkSurface","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","dp2Pixel","pd","rect","undefined","x","y","width","height","canvasWebGL","WeakMap","deleteContextHandle","handle","CanvasKit","deleteContext","MakeWebGLContext","WebGLRenderer","constructor","canvas","requestRedraw","release","restoreWanted","restoreRequest","setTimeout","_canvasWebGL$get","get","loseContext","restoreContext","acquire","entry","owner","addEventListener","onContextLost","onContextRestored","known","gl","isContextLost","lossAnnounced","_known$loseContext","GetWebGLContext","Error","trackContext","grContext","contextHandle","drawingBufferColorSpace","onResize","_canvas$getContext","getContext","getExtension","set","event","preventDefault","_this$surface","surface","ref","delete","releaseResourcesAndAbandonContext","_canvasWebGL$get$gl$i","_canvasWebGL$get2","makeImageSnapshot","frame","getCanvas","clear","TRANSPARENT","draw","flush","_this$surface2","window","devicePixelRatio","clientWidth","clientHeight","MakeOnScreenGLSurface","ColorSpace","SRGB","JsiSkSurface","Float32Array","of","save","scale","picture","drawPicture","restore","dispose","removeEventListener","clearTimeout","queueMicrotask","isConnected","_entry$loseContext","exports","StaticWebGLRenderer","cachedImage","renderFrameToSurface","tempCanvas","OffscreenCanvas","ctx","webglSurface","skiaCanvas","error","cleanupRenderResult","result","_result$surface","_result$tempCanvas$ge","renderResult","ctx2d","drawImage","console","_this$cachedImage","makeLayoutEvent","timeStamp","Date","now","nativeEvent","layout","currentTarget","target","bubbles","cancelable","defaultPrevented","eventPhase","isDefaultPrevented","isPropagationStopped","persist","stopPropagation","isTrusted","type","useSkiaWebRenderer","canvasRef","isStatic","host","rendererRef","useRef","hostRef","useLayoutEffect","current","renderer","paint","lastWidth","lastHeight","lastPixelDensity","resizeIfNeeded","pixelDensity","observer","ResizeObserver","entries","layoutHandler","onLayout","left","top","contentRect","observe","media","onPixelDensityChange","watchPixelDensity","_media","matchMedia","query","_media2","disconnect"],"sources":["SkiaWebRenderer.ts"],"sourcesContent":["/* global HTMLCanvasElement, ResizeObserver, MediaQueryList */\nimport type { RefObject } from \"react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport type { LayoutChangeEvent } from \"react-native\";\nimport type { GrDirectContext, WebGLContextHandle } from \"canvaskit-wasm\";\n\nimport type { SkRect, SkPicture, SkImage } from \"../skia/types\";\nimport { JsiSkSurface } from \"../skia/web/JsiSkSurface\";\n\n// The WebGL renderers behind the web views (SkiaPictureView, SkiaGraphiteView):\n// a <canvas> element, its WebGL context and the CanvasKit surface built on\n// it, with the context-loss handling and the \"destroy the context after each\n// draw\" mode that keeps a page under the browser's live-context limit.\n\nconst dp2Pixel = (pd: number, rect?: SkRect) => {\n if (!rect) {\n return undefined;\n }\n return {\n x: rect.x * pd,\n y: rect.y * pd,\n width: rect.width * pd,\n height: rect.height * pd,\n };\n};\n\n/**\n * What a view paints: pictures in points, replayed in order onto a cleared\n * surface.\n */\nexport type WebFrame = SkPicture[];\n\nexport interface Renderer {\n onResize(): void;\n /**\n * Paints the frame. Returns false when there is nothing to paint on yet\n * (the canvas is unmeasured, the context is lost): the caller keeps the\n * frame for the next opportunity.\n */\n draw(frame: WebFrame): boolean;\n makeImageSnapshot(frame: WebFrame, rect?: SkRect): SkImage | null;\n dispose(): void;\n}\n\n// A <canvas> element owns at most one WebGL context for its whole lifetime.\n// A renderer, on the other hand, lives as long as the layout effect that\n// creates it, which is shorter: React re-runs layout effects on a *preserved*\n// host node under StrictMode's DEV double-invoke and when an Activity/offscreen\n// subtree is hidden and revealed (#3976). What belongs to the element rather\n// than to a renderer is tracked here, per element:\n// - the context, so that a new renderer can tell whether the element already\n// has one (and whether it is lost) without calling getContext() itself,\n// which on a fresh element would create a context with the wrong attributes\n// (CanvasKit.GetWebGLContext requests its own);\n// - the WEBGL_lose_context extension, captured while the context is healthy:\n// getExtension() returns null on a lost context, and this object is the only\n// way to lose a context on purpose or to ask the browser to restore one;\n// - whether the browser has announced the loss of the context yet: a lost\n// context can only be restored once its webglcontextlost event has been\n// dispatched, and that event is asynchronous;\n// - the renderer currently attached to the element, if any.\ninterface CanvasWebGL {\n gl: WebGLRenderingContext | WebGL2RenderingContext;\n // The WEBGL_lose_context extension.\n loseContext: { loseContext(): void; restoreContext(): void } | null;\n lossAnnounced: boolean;\n owner: WebGLRenderer | null;\n}\nconst canvasWebGL = new WeakMap<HTMLCanvasElement, CanvasWebGL>();\n\n// Unregisters a context from CanvasKit's registry, which otherwise retains the\n// canvas element (and its detached DOM tree) forever (#3924).\nconst deleteContextHandle = (handle: WebGLContextHandle) => {\n CanvasKit.deleteContext(handle);\n // Making the now-deleted handle current clears CanvasKit's current-context\n // globals (GLctx/Module.ctx), which would otherwise keep referencing the\n // context (and the canvas) until another surface becomes current. With a\n // deleted handle this is a no-op that returns null without creating\n // anything.\n CanvasKit.MakeWebGLContext(handle);\n};\n\nexport class WebGLRenderer implements Renderer {\n private surface: JsiSkSurface | null = null;\n private grContext: GrDirectContext | null = null;\n private contextHandle: WebGLContextHandle = 0;\n private pd = 1;\n // Set while the renderer is waiting for a lost context to be restored.\n private restoreWanted = false;\n private restoreRequest: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n private canvas: HTMLCanvasElement,\n // Called when the renderer becomes able to paint again and the current\n // frame should be drawn.\n private requestRedraw: () => void\n ) {\n const entry = canvasWebGL.get(canvas);\n if (entry) {\n entry.owner = this;\n }\n canvas.addEventListener(\"webglcontextlost\", this.onContextLost);\n canvas.addEventListener(\"webglcontextrestored\", this.onContextRestored);\n this.acquire();\n }\n\n // Builds the GrDirectContext and the surface on the element's WebGL\n // context, creating the context first if the element has none.\n private acquire() {\n const { canvas } = this;\n const known = canvasWebGL.get(canvas);\n if (known?.gl.isContextLost()) {\n // Nothing can be built on a lost context: CanvasKit.GetWebGLContext\n // happily registers it, and MakeWebGLContext then faults inside wasm\n // (#3976). Ask the browser for it back and finish in onContextRestored;\n // if the loss hasn't been announced yet, onContextLost asks.\n this.restoreWanted = true;\n if (known.lossAnnounced) {\n known.loseContext?.restoreContext();\n }\n return;\n }\n const handle = CanvasKit.GetWebGLContext(canvas);\n if (!handle) {\n throw new Error(\"Could not create a WebGL context\");\n }\n const entry = known ?? this.trackContext();\n let grContext: GrDirectContext | null = null;\n try {\n grContext = CanvasKit.MakeWebGLContext(handle);\n } finally {\n if (!grContext) {\n // Whether it returned null or threw, don't leave the registry\n // holding on to the canvas.\n deleteContextHandle(handle);\n }\n }\n if (!grContext) {\n throw new Error(\"Could not create a graphics context\");\n }\n this.restoreWanted = false;\n this.contextHandle = handle;\n this.grContext = grContext;\n if (entry) {\n entry.gl.drawingBufferColorSpace = \"display-p3\";\n }\n this.onResize();\n }\n\n // CanvasKit just created the element's context; asking for it again hands\n // back the same object (the attributes are only honored the first time).\n private trackContext(): CanvasWebGL | null {\n const { canvas } = this;\n const gl = canvas.getContext(\"webgl2\") ?? canvas.getContext(\"webgl\");\n if (!gl) {\n return null;\n }\n const entry: CanvasWebGL = {\n gl,\n loseContext: gl.getExtension(\"WEBGL_lose_context\"),\n lossAnnounced: false,\n owner: this,\n };\n canvasWebGL.set(canvas, entry);\n // Browsers restore a lost context (evicted as the oldest one when the\n // page exceeds the active-context limit, or lost to a GPU reset) only if\n // the page called preventDefault() on the webglcontextlost event. A\n // renderer isn't necessarily attached when that happens (the canvas may\n // be in a hidden Activity), so these listeners live as long as the\n // element does. They are registered ahead of any renderer's, and the\n // loss can't be announced before they exist since the event is\n // asynchronous.\n canvas.addEventListener(\"webglcontextlost\", (event) => {\n event.preventDefault();\n entry.lossAnnounced = true;\n });\n canvas.addEventListener(\"webglcontextrestored\", () => {\n entry.lossAnnounced = false;\n });\n return entry;\n }\n\n // Frees everything built on the context. The context itself belongs to the\n // element, see dispose().\n private release() {\n this.surface?.ref.delete();\n this.surface = null;\n if (this.grContext) {\n this.grContext.releaseResourcesAndAbandonContext();\n this.grContext.delete();\n this.grContext = null;\n }\n if (this.contextHandle) {\n deleteContextHandle(this.contextHandle);\n this.contextHandle = 0;\n }\n }\n\n private isContextLost() {\n return canvasWebGL.get(this.canvas)?.gl.isContextLost() ?? false;\n }\n\n private onContextLost = () => {\n // The browser already dropped every GL object; drop our references to\n // them. Restoration is left to the browser (it restores an evicted\n // context as soon as a slot frees up), except when this renderer was\n // built on an already-lost context and is waiting to paint for the first\n // time: chasing an eviction from here would evict the next-oldest context\n // in turn, and with more live canvases than the browser allows the\n // canvases would endlessly evict each other.\n this.release();\n if (this.restoreWanted) {\n // The permission granted by preventDefault() is only recorded by the\n // browser once the event dispatch is over: a restoreContext() call\n // from inside the handler is refused, so ask from a later task.\n this.restoreRequest = setTimeout(() => {\n this.restoreRequest = null;\n canvasWebGL.get(this.canvas)?.loseContext?.restoreContext();\n }, 0);\n }\n };\n\n private onContextRestored = () => {\n this.acquire();\n this.requestRedraw();\n };\n\n makeImageSnapshot(frame: WebFrame, rect?: SkRect): SkImage | null {\n if (!this.surface || this.isContextLost()) {\n return null;\n }\n const canvas = this.surface.getCanvas();\n canvas!.clear(CanvasKit.TRANSPARENT);\n this.draw(frame);\n this.surface.ref.flush();\n return this.surface.makeImageSnapshot(dp2Pixel(this.pd, rect));\n }\n\n onResize() {\n const { canvas } = this;\n if (!this.grContext || this.isContextLost()) {\n // Waiting for the context to be restored (the restore path resizes),\n // or the loss hasn't been announced yet and onContextLost is about to\n // release everything: either way there is nothing to build on.\n return;\n }\n this.pd = window.devicePixelRatio;\n canvas.width = canvas.clientWidth * this.pd;\n canvas.height = canvas.clientHeight * this.pd;\n this.surface?.ref.delete();\n this.surface = null;\n if (canvas.width === 0 || canvas.height === 0) {\n // The canvas hasn't been laid out yet (or is hidden). The view's\n // ResizeObserver calls us again as soon as it has a size.\n return;\n }\n // Reuse the existing WebGL context and GrDirectContext: only the surface\n // needs to be recreated when the canvas is resized.\n const surface = CanvasKit.MakeOnScreenGLSurface(\n this.grContext,\n canvas.width,\n canvas.height,\n CanvasKit.ColorSpace.SRGB\n );\n if (!surface) {\n throw new Error(\"Could not create surface\");\n }\n this.surface = new JsiSkSurface(CanvasKit, surface);\n }\n\n draw(frame: WebFrame) {\n if (!this.surface || this.isContextLost()) {\n return false;\n }\n const canvas = this.surface.getCanvas();\n canvas.clear(Float32Array.of(0, 0, 0, 0));\n canvas.save();\n canvas.scale(this.pd, this.pd);\n for (const picture of frame) {\n canvas.drawPicture(picture);\n }\n canvas.restore();\n this.surface.ref.flush();\n return true;\n }\n\n dispose(): void {\n const { canvas } = this;\n canvas.removeEventListener(\"webglcontextlost\", this.onContextLost);\n canvas.removeEventListener(\"webglcontextrestored\", this.onContextRestored);\n if (this.restoreRequest !== null) {\n clearTimeout(this.restoreRequest);\n this.restoreRequest = null;\n }\n this.restoreWanted = false;\n this.release();\n // Free the drawing buffer, which CanvasKit requests with depth and stencil\n // attachments (about 8 bytes per pixel): a canvas that stays in the\n // document without a renderer, hidden in an Activity say, would otherwise\n // keep a full-size buffer around. The next renderer's onResize() sizes it\n // again.\n canvas.width = 0;\n canvas.height = 0;\n const entry = canvasWebGL.get(canvas);\n if (!entry) {\n return;\n }\n entry.owner = null;\n // Whether the element is going away is only known once the commit is\n // over: on a real unmount React runs this cleanup *before* removing the\n // node from the document, while StrictMode's double-invoke and an\n // Activity hide keep the node in place (and the former builds the next\n // renderer on it right away). Losing the context of a detached element\n // matters: it would otherwise stay alive until the element is garbage\n // collected, and browsers cap the number of live contexts per page\n // (16 in Chrome, which then evicts the oldest one, visible or not).\n queueMicrotask(() => {\n if (\n entry.owner === null &&\n !canvas.isConnected &&\n !entry.gl.isContextLost()\n ) {\n entry.loseContext?.loseContext();\n }\n });\n }\n}\n\ninterface TempRenderResult {\n surface: JsiSkSurface;\n tempCanvas: OffscreenCanvas;\n grContext: GrDirectContext;\n contextHandle: WebGLContextHandle;\n}\n\nexport class StaticWebGLRenderer implements Renderer {\n private cachedImage: SkImage | null = null;\n private pd = 1;\n\n constructor(private canvas: HTMLCanvasElement) {}\n\n onResize(): void {\n this.cachedImage = null;\n }\n\n private renderFrameToSurface(frame: WebFrame): TempRenderResult | null {\n this.pd = window.devicePixelRatio;\n if (this.canvas.clientWidth === 0 || this.canvas.clientHeight === 0) {\n return null;\n }\n const tempCanvas = new OffscreenCanvas(\n this.canvas.clientWidth * this.pd,\n this.canvas.clientHeight * this.pd\n );\n\n let surface: JsiSkSurface | null = null;\n let grContext: GrDirectContext | null = null;\n let contextHandle: WebGLContextHandle = 0;\n\n try {\n contextHandle = CanvasKit.GetWebGLContext(tempCanvas);\n if (!contextHandle) {\n throw new Error(\"Could not create a WebGL context\");\n }\n grContext = CanvasKit.MakeWebGLContext(contextHandle);\n if (!grContext) {\n throw new Error(\"Could not create a graphics context\");\n }\n const ctx = tempCanvas.getContext(\"webgl2\");\n if (ctx) {\n ctx.drawingBufferColorSpace = \"display-p3\";\n }\n const webglSurface = CanvasKit.MakeOnScreenGLSurface(\n grContext,\n tempCanvas.width,\n tempCanvas.height,\n CanvasKit.ColorSpace.SRGB\n );\n\n if (!webglSurface) {\n throw new Error(\"Could not create WebGL surface\");\n }\n\n surface = new JsiSkSurface(CanvasKit, webglSurface);\n\n const skiaCanvas = surface.getCanvas();\n skiaCanvas.clear(Float32Array.of(0, 0, 0, 0));\n skiaCanvas.save();\n skiaCanvas.scale(this.pd, this.pd);\n for (const picture of frame) {\n skiaCanvas.drawPicture(picture);\n }\n skiaCanvas.restore();\n surface.ref.flush();\n\n return { surface, tempCanvas, grContext, contextHandle };\n } catch (error) {\n this.cleanupRenderResult({\n surface,\n tempCanvas,\n grContext,\n contextHandle,\n });\n return null;\n }\n }\n\n private cleanupRenderResult(result: {\n surface: JsiSkSurface | null;\n tempCanvas: OffscreenCanvas;\n grContext: GrDirectContext | null;\n contextHandle: WebGLContextHandle;\n }): void {\n result.surface?.ref.delete();\n if (result.grContext) {\n result.grContext.releaseResourcesAndAbandonContext();\n result.grContext.delete();\n }\n result.tempCanvas\n .getContext(\"webgl2\")\n ?.getExtension(\"WEBGL_lose_context\")\n ?.loseContext();\n if (result.contextHandle) {\n // Unregister the context from CanvasKit's internal registry, otherwise\n // it retains the OffscreenCanvas forever.\n CanvasKit.deleteContext(result.contextHandle);\n // Clear CanvasKit's current-context globals (see WebGLRenderer.dispose).\n CanvasKit.MakeWebGLContext(result.contextHandle);\n }\n }\n\n draw(frame: WebFrame) {\n const renderResult = this.renderFrameToSurface(frame);\n if (!renderResult) {\n return false;\n }\n const { tempCanvas } = renderResult;\n const ctx2d = this.canvas.getContext(\"2d\");\n if (!ctx2d) {\n this.cleanupRenderResult(renderResult);\n throw new Error(\"Could not get 2D context\");\n }\n\n // Set canvas dimensions to match pixel density\n this.canvas.width = this.canvas.clientWidth * this.pd;\n this.canvas.height = this.canvas.clientHeight * this.pd;\n\n // Draw the tempCanvas scaled down to the display size\n ctx2d.drawImage(\n tempCanvas,\n 0,\n 0,\n tempCanvas.width,\n tempCanvas.height,\n 0,\n 0,\n this.canvas.clientWidth * this.pd,\n this.canvas.clientHeight * this.pd\n );\n\n this.cleanupRenderResult(renderResult);\n return true;\n }\n\n makeImageSnapshot(frame: WebFrame, rect?: SkRect): SkImage | null {\n if (!this.cachedImage) {\n const renderResult = this.renderFrameToSurface(frame);\n if (!renderResult) {\n return null;\n }\n\n try {\n this.cachedImage = renderResult.surface.makeImageSnapshot(\n dp2Pixel(this.pd, rect)\n );\n } catch (error) {\n console.error(\"Error creating image snapshot:\", error);\n } finally {\n this.cleanupRenderResult(renderResult);\n }\n }\n\n return this.cachedImage;\n }\n\n dispose(): void {\n this.cachedImage?.dispose();\n this.cachedImage = null;\n }\n}\n\n// Mirrors the event react-native-web synthesizes for onLayout.\nexport const makeLayoutEvent = (\n x: number,\n y: number,\n width: number,\n height: number\n): LayoutChangeEvent => ({\n timeStamp: Date.now(),\n nativeEvent: { layout: { x, y, width, height } },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n currentTarget: 0,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n target: 0,\n bubbles: false,\n cancelable: false,\n defaultPrevented: false,\n eventPhase: 0,\n isDefaultPrevented() {\n throw new Error(\"Method not supported on web.\");\n },\n isPropagationStopped() {\n throw new Error(\"Method not supported on web.\");\n },\n persist() {\n throw new Error(\"Method not supported on web.\");\n },\n preventDefault() {\n throw new Error(\"Method not supported on web.\");\n },\n stopPropagation() {\n throw new Error(\"Method not supported on web.\");\n },\n isTrusted: true,\n type: \"\",\n});\n\nexport interface WebRendererHost {\n /**\n * Paints the view's current content, if any, on a renderer that just got\n * (or got back) a surface: after a resize, a density change or a restored\n * context.\n */\n paint: (renderer: Renderer) => void;\n onLayout?: (event: LayoutChangeEvent) => void;\n}\n\n/**\n * Owns a renderer for the given <canvas> element for as long as the view is\n * mounted, and keeps its surface in step with the element's size and the\n * display's pixel density.\n *\n * The rendering lifecycle deliberately does not depend on layout events:\n * - The renderer is created synchronously on mount (the canvas element is\n * guaranteed to exist in useLayoutEffect; a zero size at that point is\n * fine, the surface is created once the canvas is measurable).\n * - A ResizeObserver on the canvas itself recreates the surface and repaints\n * synchronously (its callbacks run after layout, before paint), and is\n * also the source of the user-facing onLayout event.\n * - The renderer belongs to the layout effect, the WebGL context to the\n * <canvas> element, whose lifetime is longer; see WebGLRenderer for how\n * the two are reconciled.\n */\nexport const useSkiaWebRenderer = (\n canvasRef: RefObject<HTMLCanvasElement | null>,\n isStatic: boolean,\n host: WebRendererHost\n): RefObject<Renderer | null> => {\n const rendererRef = useRef<Renderer | null>(null);\n const hostRef = useRef(host);\n useLayoutEffect(() => {\n hostRef.current = host;\n }, [host]);\n\n useLayoutEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return undefined;\n }\n const renderer: Renderer = isStatic\n ? new StaticWebGLRenderer(canvas)\n : new WebGLRenderer(canvas, () => hostRef.current.paint(renderer));\n rendererRef.current = renderer;\n\n const paint = () => hostRef.current.paint(renderer);\n\n // The renderer constructor already sized the surface from the current\n // layout, so the observer's initial delivery only repaints if the size\n // changed in between.\n let lastWidth = canvas.clientWidth;\n let lastHeight = canvas.clientHeight;\n let lastPixelDensity = window.devicePixelRatio;\n const resizeIfNeeded = () => {\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n const pixelDensity = window.devicePixelRatio;\n if (\n width === lastWidth &&\n height === lastHeight &&\n pixelDensity === lastPixelDensity\n ) {\n return;\n }\n lastWidth = width;\n lastHeight = height;\n lastPixelDensity = pixelDensity;\n renderer.onResize();\n paint();\n };\n\n const observer = new ResizeObserver((entries) => {\n resizeIfNeeded();\n const layoutHandler = hostRef.current.onLayout;\n if (layoutHandler) {\n const { left, top, width, height } = entries[0].contentRect;\n // setTimeout 0 is taken from react-native-web (UIManager)\n setTimeout(\n () => layoutHandler(makeLayoutEvent(left, top, width, height)),\n 0\n );\n }\n });\n observer.observe(canvas);\n\n // A pixel-density change with no CSS size change (browser zoom, moving\n // the window to another display) doesn't trigger the ResizeObserver:\n // watch it via matchMedia, re-arming the query for each new density.\n // This degrades gracefully where unsupported: without matchMedia or\n // MediaQueryList.addEventListener (older Safari), or where the query\n // never matches because the resolution feature is unknown (Safari < 16),\n // density-only changes simply don't repaint — everything else still does.\n let media: MediaQueryList | null = null;\n const onPixelDensityChange = () => {\n resizeIfNeeded();\n watchPixelDensity();\n };\n const watchPixelDensity = () => {\n media?.removeEventListener(\"change\", onPixelDensityChange);\n media = null;\n if (typeof window.matchMedia === \"function\") {\n const query = window.matchMedia(\n `(resolution: ${window.devicePixelRatio}dppx)`\n );\n if (typeof query.addEventListener === \"function\") {\n media = query;\n media.addEventListener(\"change\", onPixelDensityChange);\n }\n }\n };\n watchPixelDensity();\n\n // Paint any content that was dispatched before the renderer existed.\n paint();\n\n return () => {\n observer.disconnect();\n media?.removeEventListener(\"change\", onPixelDensityChange);\n rendererRef.current = null;\n renderer.dispose();\n };\n }, [canvasRef, isStatic]);\n\n return rendererRef;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","require","_JsiSkSurface","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","dp2Pixel","pd","rect","undefined","x","y","width","height","canvasWebGL","WeakMap","deleteContextHandle","handle","CanvasKit","deleteContext","MakeWebGLContext","WebGLRenderer","constructor","canvas","requestRedraw","release","restoreWanted","restoreRequest","setTimeout","_canvasWebGL$get","get","loseContext","restoreContext","acquire","entry","owner","addEventListener","onContextLost","onContextRestored","known","gl","isContextLost","lossAnnounced","_known$loseContext","GetWebGLContext","Error","trackContext","grContext","contextHandle","drawingBufferColorSpace","onResize","_canvas$getContext","getContext","getExtension","set","event","preventDefault","_this$surface","surface","ref","delete","releaseResourcesAndAbandonContext","_canvasWebGL$get$gl$i","_canvasWebGL$get2","makeImageSnapshot","frame","getCanvas","clear","TRANSPARENT","draw","flush","_this$surface2","window","devicePixelRatio","clientWidth","clientHeight","MakeOnScreenGLSurface","ColorSpace","SRGB","JsiSkSurface","Float32Array","of","save","scale","picture","drawPicture","restore","dispose","removeEventListener","clearTimeout","queueMicrotask","isConnected","_entry$loseContext","exports","StaticWebGLRenderer","cachedImage","renderFrameToSurface","tempCanvas","OffscreenCanvas","ctx","webglSurface","skiaCanvas","error","cleanupRenderResult","result","_result$surface","_result$tempCanvas$ge","renderResult","ctx2d","drawImage","console","_this$cachedImage","makeLayoutEvent","timeStamp","Date","now","nativeEvent","layout","currentTarget","target","bubbles","cancelable","defaultPrevented","eventPhase","isDefaultPrevented","isPropagationStopped","persist","stopPropagation","isTrusted","type","useSkiaWebRenderer","canvasRef","isStatic","host","rendererRef","useRef","hostRef","useLayoutEffect","current","renderer","paint","lastWidth","lastHeight","lastPixelDensity","resizeIfNeeded","pixelDensity","observer","ResizeObserver","entries","layoutHandler","onLayout","left","top","contentRect","observe","media","onPixelDensityChange","watchPixelDensity","_media","matchMedia","query","_media2","disconnect"],"sources":["SkiaWebRenderer.ts"],"sourcesContent":["/* global HTMLCanvasElement, ResizeObserver, MediaQueryList */\nimport type { RefObject } from \"react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport type { LayoutChangeEvent } from \"react-native\";\nimport type { GrDirectContext, WebGLContextHandle } from \"canvaskit-wasm\";\n\nimport type { SkRect, SkPicture, SkImage } from \"../skia/types\";\nimport { JsiSkSurface } from \"../skia/web/JsiSkSurface\";\n\n// The WebGL renderers behind the web view (SkiaView.web):\n// a <canvas> element, its WebGL context and the CanvasKit surface built on\n// it, with the context-loss handling and the \"destroy the context after each\n// draw\" mode that keeps a page under the browser's live-context limit.\n\nconst dp2Pixel = (pd: number, rect?: SkRect) => {\n if (!rect) {\n return undefined;\n }\n return {\n x: rect.x * pd,\n y: rect.y * pd,\n width: rect.width * pd,\n height: rect.height * pd,\n };\n};\n\n/**\n * What a view paints: pictures in points, replayed in order onto a cleared\n * surface.\n */\nexport type WebFrame = SkPicture[];\n\nexport interface Renderer {\n onResize(): void;\n /**\n * Paints the frame. Returns false when there is nothing to paint on yet\n * (the canvas is unmeasured, the context is lost): the caller keeps the\n * frame for the next opportunity.\n */\n draw(frame: WebFrame): boolean;\n makeImageSnapshot(frame: WebFrame, rect?: SkRect): SkImage | null;\n dispose(): void;\n}\n\n// A <canvas> element owns at most one WebGL context for its whole lifetime.\n// A renderer, on the other hand, lives as long as the layout effect that\n// creates it, which is shorter: React re-runs layout effects on a *preserved*\n// host node under StrictMode's DEV double-invoke and when an Activity/offscreen\n// subtree is hidden and revealed (#3976). What belongs to the element rather\n// than to a renderer is tracked here, per element:\n// - the context, so that a new renderer can tell whether the element already\n// has one (and whether it is lost) without calling getContext() itself,\n// which on a fresh element would create a context with the wrong attributes\n// (CanvasKit.GetWebGLContext requests its own);\n// - the WEBGL_lose_context extension, captured while the context is healthy:\n// getExtension() returns null on a lost context, and this object is the only\n// way to lose a context on purpose or to ask the browser to restore one;\n// - whether the browser has announced the loss of the context yet: a lost\n// context can only be restored once its webglcontextlost event has been\n// dispatched, and that event is asynchronous;\n// - the renderer currently attached to the element, if any.\ninterface CanvasWebGL {\n gl: WebGLRenderingContext | WebGL2RenderingContext;\n // The WEBGL_lose_context extension.\n loseContext: { loseContext(): void; restoreContext(): void } | null;\n lossAnnounced: boolean;\n owner: WebGLRenderer | null;\n}\nconst canvasWebGL = new WeakMap<HTMLCanvasElement, CanvasWebGL>();\n\n// Unregisters a context from CanvasKit's registry, which otherwise retains the\n// canvas element (and its detached DOM tree) forever (#3924).\nconst deleteContextHandle = (handle: WebGLContextHandle) => {\n CanvasKit.deleteContext(handle);\n // Making the now-deleted handle current clears CanvasKit's current-context\n // globals (GLctx/Module.ctx), which would otherwise keep referencing the\n // context (and the canvas) until another surface becomes current. With a\n // deleted handle this is a no-op that returns null without creating\n // anything.\n CanvasKit.MakeWebGLContext(handle);\n};\n\nexport class WebGLRenderer implements Renderer {\n private surface: JsiSkSurface | null = null;\n private grContext: GrDirectContext | null = null;\n private contextHandle: WebGLContextHandle = 0;\n private pd = 1;\n // Set while the renderer is waiting for a lost context to be restored.\n private restoreWanted = false;\n private restoreRequest: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n private canvas: HTMLCanvasElement,\n // Called when the renderer becomes able to paint again and the current\n // frame should be drawn.\n private requestRedraw: () => void\n ) {\n const entry = canvasWebGL.get(canvas);\n if (entry) {\n entry.owner = this;\n }\n canvas.addEventListener(\"webglcontextlost\", this.onContextLost);\n canvas.addEventListener(\"webglcontextrestored\", this.onContextRestored);\n this.acquire();\n }\n\n // Builds the GrDirectContext and the surface on the element's WebGL\n // context, creating the context first if the element has none.\n private acquire() {\n const { canvas } = this;\n const known = canvasWebGL.get(canvas);\n if (known?.gl.isContextLost()) {\n // Nothing can be built on a lost context: CanvasKit.GetWebGLContext\n // happily registers it, and MakeWebGLContext then faults inside wasm\n // (#3976). Ask the browser for it back and finish in onContextRestored;\n // if the loss hasn't been announced yet, onContextLost asks.\n this.restoreWanted = true;\n if (known.lossAnnounced) {\n known.loseContext?.restoreContext();\n }\n return;\n }\n const handle = CanvasKit.GetWebGLContext(canvas);\n if (!handle) {\n throw new Error(\"Could not create a WebGL context\");\n }\n const entry = known ?? this.trackContext();\n let grContext: GrDirectContext | null = null;\n try {\n grContext = CanvasKit.MakeWebGLContext(handle);\n } finally {\n if (!grContext) {\n // Whether it returned null or threw, don't leave the registry\n // holding on to the canvas.\n deleteContextHandle(handle);\n }\n }\n if (!grContext) {\n throw new Error(\"Could not create a graphics context\");\n }\n this.restoreWanted = false;\n this.contextHandle = handle;\n this.grContext = grContext;\n if (entry) {\n entry.gl.drawingBufferColorSpace = \"display-p3\";\n }\n this.onResize();\n }\n\n // CanvasKit just created the element's context; asking for it again hands\n // back the same object (the attributes are only honored the first time).\n private trackContext(): CanvasWebGL | null {\n const { canvas } = this;\n const gl = canvas.getContext(\"webgl2\") ?? canvas.getContext(\"webgl\");\n if (!gl) {\n return null;\n }\n const entry: CanvasWebGL = {\n gl,\n loseContext: gl.getExtension(\"WEBGL_lose_context\"),\n lossAnnounced: false,\n owner: this,\n };\n canvasWebGL.set(canvas, entry);\n // Browsers restore a lost context (evicted as the oldest one when the\n // page exceeds the active-context limit, or lost to a GPU reset) only if\n // the page called preventDefault() on the webglcontextlost event. A\n // renderer isn't necessarily attached when that happens (the canvas may\n // be in a hidden Activity), so these listeners live as long as the\n // element does. They are registered ahead of any renderer's, and the\n // loss can't be announced before they exist since the event is\n // asynchronous.\n canvas.addEventListener(\"webglcontextlost\", (event) => {\n event.preventDefault();\n entry.lossAnnounced = true;\n });\n canvas.addEventListener(\"webglcontextrestored\", () => {\n entry.lossAnnounced = false;\n });\n return entry;\n }\n\n // Frees everything built on the context. The context itself belongs to the\n // element, see dispose().\n private release() {\n this.surface?.ref.delete();\n this.surface = null;\n if (this.grContext) {\n this.grContext.releaseResourcesAndAbandonContext();\n this.grContext.delete();\n this.grContext = null;\n }\n if (this.contextHandle) {\n deleteContextHandle(this.contextHandle);\n this.contextHandle = 0;\n }\n }\n\n private isContextLost() {\n return canvasWebGL.get(this.canvas)?.gl.isContextLost() ?? false;\n }\n\n private onContextLost = () => {\n // The browser already dropped every GL object; drop our references to\n // them. Restoration is left to the browser (it restores an evicted\n // context as soon as a slot frees up), except when this renderer was\n // built on an already-lost context and is waiting to paint for the first\n // time: chasing an eviction from here would evict the next-oldest context\n // in turn, and with more live canvases than the browser allows the\n // canvases would endlessly evict each other.\n this.release();\n if (this.restoreWanted) {\n // The permission granted by preventDefault() is only recorded by the\n // browser once the event dispatch is over: a restoreContext() call\n // from inside the handler is refused, so ask from a later task.\n this.restoreRequest = setTimeout(() => {\n this.restoreRequest = null;\n canvasWebGL.get(this.canvas)?.loseContext?.restoreContext();\n }, 0);\n }\n };\n\n private onContextRestored = () => {\n this.acquire();\n this.requestRedraw();\n };\n\n makeImageSnapshot(frame: WebFrame, rect?: SkRect): SkImage | null {\n if (!this.surface || this.isContextLost()) {\n return null;\n }\n const canvas = this.surface.getCanvas();\n canvas!.clear(CanvasKit.TRANSPARENT);\n this.draw(frame);\n this.surface.ref.flush();\n return this.surface.makeImageSnapshot(dp2Pixel(this.pd, rect));\n }\n\n onResize() {\n const { canvas } = this;\n if (!this.grContext || this.isContextLost()) {\n // Waiting for the context to be restored (the restore path resizes),\n // or the loss hasn't been announced yet and onContextLost is about to\n // release everything: either way there is nothing to build on.\n return;\n }\n this.pd = window.devicePixelRatio;\n canvas.width = canvas.clientWidth * this.pd;\n canvas.height = canvas.clientHeight * this.pd;\n this.surface?.ref.delete();\n this.surface = null;\n if (canvas.width === 0 || canvas.height === 0) {\n // The canvas hasn't been laid out yet (or is hidden). The view's\n // ResizeObserver calls us again as soon as it has a size.\n return;\n }\n // Reuse the existing WebGL context and GrDirectContext: only the surface\n // needs to be recreated when the canvas is resized.\n const surface = CanvasKit.MakeOnScreenGLSurface(\n this.grContext,\n canvas.width,\n canvas.height,\n CanvasKit.ColorSpace.SRGB\n );\n if (!surface) {\n throw new Error(\"Could not create surface\");\n }\n this.surface = new JsiSkSurface(CanvasKit, surface);\n }\n\n draw(frame: WebFrame) {\n if (!this.surface || this.isContextLost()) {\n return false;\n }\n const canvas = this.surface.getCanvas();\n canvas.clear(Float32Array.of(0, 0, 0, 0));\n canvas.save();\n canvas.scale(this.pd, this.pd);\n for (const picture of frame) {\n canvas.drawPicture(picture);\n }\n canvas.restore();\n this.surface.ref.flush();\n return true;\n }\n\n dispose(): void {\n const { canvas } = this;\n canvas.removeEventListener(\"webglcontextlost\", this.onContextLost);\n canvas.removeEventListener(\"webglcontextrestored\", this.onContextRestored);\n if (this.restoreRequest !== null) {\n clearTimeout(this.restoreRequest);\n this.restoreRequest = null;\n }\n this.restoreWanted = false;\n this.release();\n // Free the drawing buffer, which CanvasKit requests with depth and stencil\n // attachments (about 8 bytes per pixel): a canvas that stays in the\n // document without a renderer, hidden in an Activity say, would otherwise\n // keep a full-size buffer around. The next renderer's onResize() sizes it\n // again.\n canvas.width = 0;\n canvas.height = 0;\n const entry = canvasWebGL.get(canvas);\n if (!entry) {\n return;\n }\n entry.owner = null;\n // Whether the element is going away is only known once the commit is\n // over: on a real unmount React runs this cleanup *before* removing the\n // node from the document, while StrictMode's double-invoke and an\n // Activity hide keep the node in place (and the former builds the next\n // renderer on it right away). Losing the context of a detached element\n // matters: it would otherwise stay alive until the element is garbage\n // collected, and browsers cap the number of live contexts per page\n // (16 in Chrome, which then evicts the oldest one, visible or not).\n queueMicrotask(() => {\n if (\n entry.owner === null &&\n !canvas.isConnected &&\n !entry.gl.isContextLost()\n ) {\n entry.loseContext?.loseContext();\n }\n });\n }\n}\n\ninterface TempRenderResult {\n surface: JsiSkSurface;\n tempCanvas: OffscreenCanvas;\n grContext: GrDirectContext;\n contextHandle: WebGLContextHandle;\n}\n\nexport class StaticWebGLRenderer implements Renderer {\n private cachedImage: SkImage | null = null;\n private pd = 1;\n\n constructor(private canvas: HTMLCanvasElement) {}\n\n onResize(): void {\n this.cachedImage = null;\n }\n\n private renderFrameToSurface(frame: WebFrame): TempRenderResult | null {\n this.pd = window.devicePixelRatio;\n if (this.canvas.clientWidth === 0 || this.canvas.clientHeight === 0) {\n return null;\n }\n const tempCanvas = new OffscreenCanvas(\n this.canvas.clientWidth * this.pd,\n this.canvas.clientHeight * this.pd\n );\n\n let surface: JsiSkSurface | null = null;\n let grContext: GrDirectContext | null = null;\n let contextHandle: WebGLContextHandle = 0;\n\n try {\n contextHandle = CanvasKit.GetWebGLContext(tempCanvas);\n if (!contextHandle) {\n throw new Error(\"Could not create a WebGL context\");\n }\n grContext = CanvasKit.MakeWebGLContext(contextHandle);\n if (!grContext) {\n throw new Error(\"Could not create a graphics context\");\n }\n const ctx = tempCanvas.getContext(\"webgl2\");\n if (ctx) {\n ctx.drawingBufferColorSpace = \"display-p3\";\n }\n const webglSurface = CanvasKit.MakeOnScreenGLSurface(\n grContext,\n tempCanvas.width,\n tempCanvas.height,\n CanvasKit.ColorSpace.SRGB\n );\n\n if (!webglSurface) {\n throw new Error(\"Could not create WebGL surface\");\n }\n\n surface = new JsiSkSurface(CanvasKit, webglSurface);\n\n const skiaCanvas = surface.getCanvas();\n skiaCanvas.clear(Float32Array.of(0, 0, 0, 0));\n skiaCanvas.save();\n skiaCanvas.scale(this.pd, this.pd);\n for (const picture of frame) {\n skiaCanvas.drawPicture(picture);\n }\n skiaCanvas.restore();\n surface.ref.flush();\n\n return { surface, tempCanvas, grContext, contextHandle };\n } catch (error) {\n this.cleanupRenderResult({\n surface,\n tempCanvas,\n grContext,\n contextHandle,\n });\n return null;\n }\n }\n\n private cleanupRenderResult(result: {\n surface: JsiSkSurface | null;\n tempCanvas: OffscreenCanvas;\n grContext: GrDirectContext | null;\n contextHandle: WebGLContextHandle;\n }): void {\n result.surface?.ref.delete();\n if (result.grContext) {\n result.grContext.releaseResourcesAndAbandonContext();\n result.grContext.delete();\n }\n result.tempCanvas\n .getContext(\"webgl2\")\n ?.getExtension(\"WEBGL_lose_context\")\n ?.loseContext();\n if (result.contextHandle) {\n // Unregister the context from CanvasKit's internal registry, otherwise\n // it retains the OffscreenCanvas forever.\n CanvasKit.deleteContext(result.contextHandle);\n // Clear CanvasKit's current-context globals (see WebGLRenderer.dispose).\n CanvasKit.MakeWebGLContext(result.contextHandle);\n }\n }\n\n draw(frame: WebFrame) {\n const renderResult = this.renderFrameToSurface(frame);\n if (!renderResult) {\n return false;\n }\n const { tempCanvas } = renderResult;\n const ctx2d = this.canvas.getContext(\"2d\");\n if (!ctx2d) {\n this.cleanupRenderResult(renderResult);\n throw new Error(\"Could not get 2D context\");\n }\n\n // Set canvas dimensions to match pixel density\n this.canvas.width = this.canvas.clientWidth * this.pd;\n this.canvas.height = this.canvas.clientHeight * this.pd;\n\n // Draw the tempCanvas scaled down to the display size\n ctx2d.drawImage(\n tempCanvas,\n 0,\n 0,\n tempCanvas.width,\n tempCanvas.height,\n 0,\n 0,\n this.canvas.clientWidth * this.pd,\n this.canvas.clientHeight * this.pd\n );\n\n this.cleanupRenderResult(renderResult);\n return true;\n }\n\n makeImageSnapshot(frame: WebFrame, rect?: SkRect): SkImage | null {\n if (!this.cachedImage) {\n const renderResult = this.renderFrameToSurface(frame);\n if (!renderResult) {\n return null;\n }\n\n try {\n this.cachedImage = renderResult.surface.makeImageSnapshot(\n dp2Pixel(this.pd, rect)\n );\n } catch (error) {\n console.error(\"Error creating image snapshot:\", error);\n } finally {\n this.cleanupRenderResult(renderResult);\n }\n }\n\n return this.cachedImage;\n }\n\n dispose(): void {\n this.cachedImage?.dispose();\n this.cachedImage = null;\n }\n}\n\n// Mirrors the event react-native-web synthesizes for onLayout.\nexport const makeLayoutEvent = (\n x: number,\n y: number,\n width: number,\n height: number\n): LayoutChangeEvent => ({\n timeStamp: Date.now(),\n nativeEvent: { layout: { x, y, width, height } },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n currentTarget: 0,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n target: 0,\n bubbles: false,\n cancelable: false,\n defaultPrevented: false,\n eventPhase: 0,\n isDefaultPrevented() {\n throw new Error(\"Method not supported on web.\");\n },\n isPropagationStopped() {\n throw new Error(\"Method not supported on web.\");\n },\n persist() {\n throw new Error(\"Method not supported on web.\");\n },\n preventDefault() {\n throw new Error(\"Method not supported on web.\");\n },\n stopPropagation() {\n throw new Error(\"Method not supported on web.\");\n },\n isTrusted: true,\n type: \"\",\n});\n\nexport interface WebRendererHost {\n /**\n * Paints the view's current content, if any, on a renderer that just got\n * (or got back) a surface: after a resize, a density change or a restored\n * context.\n */\n paint: (renderer: Renderer) => void;\n onLayout?: (event: LayoutChangeEvent) => void;\n}\n\n/**\n * Owns a renderer for the given <canvas> element for as long as the view is\n * mounted, and keeps its surface in step with the element's size and the\n * display's pixel density.\n *\n * The rendering lifecycle deliberately does not depend on layout events:\n * - The renderer is created synchronously on mount (the canvas element is\n * guaranteed to exist in useLayoutEffect; a zero size at that point is\n * fine, the surface is created once the canvas is measurable).\n * - A ResizeObserver on the canvas itself recreates the surface and repaints\n * synchronously (its callbacks run after layout, before paint), and is\n * also the source of the user-facing onLayout event.\n * - The renderer belongs to the layout effect, the WebGL context to the\n * <canvas> element, whose lifetime is longer; see WebGLRenderer for how\n * the two are reconciled.\n */\nexport const useSkiaWebRenderer = (\n canvasRef: RefObject<HTMLCanvasElement | null>,\n isStatic: boolean,\n host: WebRendererHost\n): RefObject<Renderer | null> => {\n const rendererRef = useRef<Renderer | null>(null);\n const hostRef = useRef(host);\n useLayoutEffect(() => {\n hostRef.current = host;\n }, [host]);\n\n useLayoutEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) {\n return undefined;\n }\n const renderer: Renderer = isStatic\n ? new StaticWebGLRenderer(canvas)\n : new WebGLRenderer(canvas, () => hostRef.current.paint(renderer));\n rendererRef.current = renderer;\n\n const paint = () => hostRef.current.paint(renderer);\n\n // The renderer constructor already sized the surface from the current\n // layout, so the observer's initial delivery only repaints if the size\n // changed in between.\n let lastWidth = canvas.clientWidth;\n let lastHeight = canvas.clientHeight;\n let lastPixelDensity = window.devicePixelRatio;\n const resizeIfNeeded = () => {\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n const pixelDensity = window.devicePixelRatio;\n if (\n width === lastWidth &&\n height === lastHeight &&\n pixelDensity === lastPixelDensity\n ) {\n return;\n }\n lastWidth = width;\n lastHeight = height;\n lastPixelDensity = pixelDensity;\n renderer.onResize();\n paint();\n };\n\n const observer = new ResizeObserver((entries) => {\n resizeIfNeeded();\n const layoutHandler = hostRef.current.onLayout;\n if (layoutHandler) {\n const { left, top, width, height } = entries[0].contentRect;\n // setTimeout 0 is taken from react-native-web (UIManager)\n setTimeout(\n () => layoutHandler(makeLayoutEvent(left, top, width, height)),\n 0\n );\n }\n });\n observer.observe(canvas);\n\n // A pixel-density change with no CSS size change (browser zoom, moving\n // the window to another display) doesn't trigger the ResizeObserver:\n // watch it via matchMedia, re-arming the query for each new density.\n // This degrades gracefully where unsupported: without matchMedia or\n // MediaQueryList.addEventListener (older Safari), or where the query\n // never matches because the resolution feature is unknown (Safari < 16),\n // density-only changes simply don't repaint — everything else still does.\n let media: MediaQueryList | null = null;\n const onPixelDensityChange = () => {\n resizeIfNeeded();\n watchPixelDensity();\n };\n const watchPixelDensity = () => {\n media?.removeEventListener(\"change\", onPixelDensityChange);\n media = null;\n if (typeof window.matchMedia === \"function\") {\n const query = window.matchMedia(\n `(resolution: ${window.devicePixelRatio}dppx)`\n );\n if (typeof query.addEventListener === \"function\") {\n media = query;\n media.addEventListener(\"change\", onPixelDensityChange);\n }\n }\n };\n watchPixelDensity();\n\n // Paint any content that was dispatched before the renderer existed.\n paint();\n\n return () => {\n observer.disconnect();\n media?.removeEventListener(\"change\", onPixelDensityChange);\n rendererRef.current = null;\n renderer.dispose();\n };\n }, [canvasRef, isStatic]);\n\n return rendererRef;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AndroidCanvasProps, AndroidSurfaceType } from "./types";
|
|
2
|
+
/** The native props the `android` prop of a view resolves to. */
|
|
3
|
+
export declare const androidNativeProps: (android?: AndroidCanvasProps) => {
|
|
4
|
+
androidSurfaceType: AndroidSurfaceType | "auto";
|
|
5
|
+
androidZOrderOnTop: boolean;
|
|
6
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.androidNativeProps = void 0;
|
|
7
|
+
// Anything else reaching the native component would hit the generated
|
|
8
|
+
// string-enum parser, which aborts on unknown values.
|
|
9
|
+
const resolveSurfaceType = surfaceType => surfaceType === "SurfaceView" || surfaceType === "TextureView" ? surfaceType : "auto";
|
|
10
|
+
|
|
11
|
+
/** The native props the `android` prop of a view resolves to. */
|
|
12
|
+
const androidNativeProps = android => ({
|
|
13
|
+
androidSurfaceType: resolveSurfaceType(android === null || android === void 0 ? void 0 : android.surfaceType),
|
|
14
|
+
androidZOrderOnTop: !!(android !== null && android !== void 0 && android.zOrderOnTop)
|
|
15
|
+
});
|
|
16
|
+
exports.androidNativeProps = androidNativeProps;
|
|
17
|
+
//# sourceMappingURL=android.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["resolveSurfaceType","surfaceType","androidNativeProps","android","androidSurfaceType","androidZOrderOnTop","zOrderOnTop","exports"],"sources":["android.ts"],"sourcesContent":["import type { AndroidCanvasProps, AndroidSurfaceType } from \"./types\";\n\n// Anything else reaching the native component would hit the generated\n// string-enum parser, which aborts on unknown values.\nconst resolveSurfaceType = (\n surfaceType: AndroidSurfaceType | undefined\n): \"auto\" | AndroidSurfaceType =>\n surfaceType === \"SurfaceView\" || surfaceType === \"TextureView\"\n ? surfaceType\n : \"auto\";\n\n/** The native props the `android` prop of a view resolves to. */\nexport const androidNativeProps = (android?: AndroidCanvasProps) => ({\n androidSurfaceType: resolveSurfaceType(android?.surfaceType),\n androidZOrderOnTop: !!android?.zOrderOnTop,\n});\n"],"mappings":";;;;;;AAEA;AACA;AACA,MAAMA,kBAAkB,GACtBC,WAA2C,IAE3CA,WAAW,KAAK,aAAa,IAAIA,WAAW,KAAK,aAAa,GAC1DA,WAAW,GACX,MAAM;;AAEZ;AACO,MAAMC,kBAAkB,GAAIC,OAA4B,KAAM;EACnEC,kBAAkB,EAAEJ,kBAAkB,CAACG,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEF,WAAW,CAAC;EAC5DI,kBAAkB,EAAE,CAAC,EAACF,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEG,WAAW;AAC5C,CAAC,CAAC;AAACC,OAAA,CAAAL,kBAAA,GAAAA,kBAAA","ignoreList":[]}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import type { ViewProps } from "react-native";
|
|
2
2
|
import type { SharedValue } from "react-native-reanimated";
|
|
3
3
|
import type { SkGraphiteContext, SkImage, SkPicture, SkRect, SkSize } from "../skia/types";
|
|
4
|
-
export type NativeSkiaViewProps = ViewProps & {
|
|
5
|
-
debug?: boolean;
|
|
6
|
-
opaque?: boolean;
|
|
7
|
-
};
|
|
8
4
|
export type AndroidSurfaceType = "SurfaceView" | "TextureView";
|
|
9
5
|
export interface AndroidCanvasProps {
|
|
10
6
|
/**
|
|
@@ -35,17 +31,13 @@ export interface ISkiaViewApi {
|
|
|
35
31
|
makeImageSnapshotAsync: (nativeId: number, rect?: SkRect) => Promise<SkImage>;
|
|
36
32
|
size: (nativeId: number) => SkSize;
|
|
37
33
|
/**
|
|
38
|
-
* The recording side of a
|
|
39
|
-
*
|
|
34
|
+
* The recording side of a view: its native id, the layout size in points,
|
|
35
|
+
* and the props its surface format follows from.
|
|
40
36
|
*/
|
|
41
37
|
makeGraphiteContext: (nativeId: number, width: number, height: number, opaque: boolean, highBitDepth: boolean) => SkGraphiteContext;
|
|
42
38
|
}
|
|
39
|
+
/** The props every Skia view takes, whichever way it is drawn. */
|
|
43
40
|
export interface SkiaBaseViewProps extends ViewProps {
|
|
44
|
-
/**
|
|
45
|
-
* When set to true the view will display information about the
|
|
46
|
-
* average time it takes to render.
|
|
47
|
-
*/
|
|
48
|
-
debug?: boolean;
|
|
49
41
|
/**
|
|
50
42
|
* Declares that the canvas covers every pixel of its bounds. On Android an
|
|
51
43
|
* opaque canvas is backed by a `SurfaceView` by default, the cheapest path
|
|
@@ -64,6 +56,5 @@ export interface SkiaBaseViewProps extends ViewProps {
|
|
|
64
56
|
}
|
|
65
57
|
export interface SkiaPictureViewNativeProps extends SkiaBaseViewProps {
|
|
66
58
|
picture?: SkPicture;
|
|
67
|
-
androidWarmup?: boolean;
|
|
68
59
|
}
|
|
69
60
|
export type SkiaGraphiteViewNativeProps = SkiaBaseViewProps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { ViewProps } from \"react-native\";\nimport type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n SkGraphiteContext,\n SkImage,\n SkPicture,\n SkRect,\n SkSize,\n} from \"../skia/types\";\n\nexport type
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { ViewProps } from \"react-native\";\nimport type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n SkGraphiteContext,\n SkImage,\n SkPicture,\n SkRect,\n SkSize,\n} from \"../skia/types\";\n\nexport type AndroidSurfaceType = \"SurfaceView\" | \"TextureView\";\n\nexport interface AndroidCanvasProps {\n /**\n * Backing view. Defaults to `SurfaceView` when the canvas is `opaque` and to\n * `TextureView` otherwise; both composite correctly in React Native stacking\n * order without further flags.\n */\n surfaceType?: AndroidSurfaceType;\n /**\n * SurfaceView only: composite above every React Native view in the window,\n * ignoring `zIndex`. Ignored for TextureView. Defaults to false.\n */\n zOrderOnTop?: boolean;\n}\n\nexport interface ISkiaViewApi {\n web?: boolean;\n setJsiProperty: <T>(nativeId: number, name: string, value: T) => void;\n requestRedraw: (nativeId: number) => void;\n /**\n * Reads the shared values into the recording held for the view and\n * schedules a redraw. Native only; called from a worklet on every frame.\n * Until the view registers, the recording is queued for it and kept\n * current all the same. Ignored when the recording `recorderId` is neither\n * held by the view nor queued for it.\n */\n applyUpdates: (\n nativeId: number,\n recorderId: number,\n values: SharedValue<unknown>[]\n ) => void;\n makeImageSnapshot: (nativeId: number, rect?: SkRect) => SkImage;\n makeImageSnapshotAsync: (nativeId: number, rect?: SkRect) => Promise<SkImage>;\n size: (nativeId: number) => SkSize;\n /**\n * The recording side of a view: its native id, the layout size in points,\n * and the props its surface format follows from.\n */\n makeGraphiteContext: (\n nativeId: number,\n width: number,\n height: number,\n opaque: boolean,\n highBitDepth: boolean\n ) => SkGraphiteContext;\n}\n\n/** The props every Skia view takes, whichever way it is drawn. */\nexport interface SkiaBaseViewProps extends ViewProps {\n /**\n * Declares that the canvas covers every pixel of its bounds. On Android an\n * opaque canvas is backed by a `SurfaceView` by default, the cheapest path\n * (see `android.surfaceType`). Defaults to false.\n */\n opaque?: boolean;\n\n /**\n * Renders into a surface with more than 8 bits per channel (16-bit float on\n * iOS, 10-bit on Android) to avoid banding in subtle gradients. On Android\n * the extra precision survives composition only when combined with `opaque`.\n */\n highBitDepth?: boolean;\n\n /** Android-only rendering options. Ignored on iOS and web. */\n android?: AndroidCanvasProps;\n\n // On web, only 16 WebGL contextes are allowed. If the drawing is non-animated, set\n // __destroyWebGLContextAfterRender to true to release the context after each draw.\n __destroyWebGLContextAfterRender?: boolean;\n}\n\nexport interface SkiaPictureViewNativeProps extends SkiaBaseViewProps {\n picture?: SkPicture;\n}\n\nexport type SkiaGraphiteViewNativeProps = SkiaBaseViewProps;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useMemo } from "react";
|
|
2
2
|
import { isRNModule, unwrapModule } from "../skia/types";
|
|
3
|
-
// Layout is observed by the views themselves (see
|
|
3
|
+
// Layout is observed by the views themselves (see SkiaView.web.tsx):
|
|
4
4
|
// this shim only reproduces react-native-web's default View styling.
|
|
5
5
|
const View = ({
|
|
6
6
|
children,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","isRNModule","unwrapModule","View","children","style","rawStyle","cssStyles","alignItems","backgroundColor","border","boxSizing","display","flexBasis","flexDirection","flexShrink","listStyle","margin","minHeight","minWidth","padding","position","textDecoration","zIndex","createElement","Platform","OS","PixelRatio","window","devicePixelRatio","resolveAsset","source","asset","require","getAssetByID","httpServerLocation","name","type","uri","Error","findNodeHandle"],"sources":["Platform.web.tsx"],"sourcesContent":["import type { CSSProperties } from \"react\";\nimport React, { useMemo } from \"react\";\nimport type { ViewComponent, ViewProps } from \"react-native\";\n\nimport type { DataModule } from \"../skia/types\";\nimport { isRNModule, unwrapModule } from \"../skia/types\";\n\nimport type { IPlatform } from \"./IPlatform\";\n\n// Layout is observed by the views themselves (see
|
|
1
|
+
{"version":3,"names":["React","useMemo","isRNModule","unwrapModule","View","children","style","rawStyle","cssStyles","alignItems","backgroundColor","border","boxSizing","display","flexBasis","flexDirection","flexShrink","listStyle","margin","minHeight","minWidth","padding","position","textDecoration","zIndex","createElement","Platform","OS","PixelRatio","window","devicePixelRatio","resolveAsset","source","asset","require","getAssetByID","httpServerLocation","name","type","uri","Error","findNodeHandle"],"sources":["Platform.web.tsx"],"sourcesContent":["import type { CSSProperties } from \"react\";\nimport React, { useMemo } from \"react\";\nimport type { ViewComponent, ViewProps } from \"react-native\";\n\nimport type { DataModule } from \"../skia/types\";\nimport { isRNModule, unwrapModule } from \"../skia/types\";\n\nimport type { IPlatform } from \"./IPlatform\";\n\n// Layout is observed by the views themselves (see SkiaView.web.tsx):\n// this shim only reproduces react-native-web's default View styling.\nconst View = (({ children, style: rawStyle }: ViewProps) => {\n const style = useMemo(() => (rawStyle ?? {}) as CSSProperties, [rawStyle]);\n const cssStyles = useMemo(() => {\n return {\n alignItems: \"stretch\" as const,\n backgroundColor: \"transparent\" as const,\n border: \"0 solid black\" as const,\n boxSizing: \"border-box\" as const,\n display: \"flex\" as const,\n flexBasis: \"auto\" as const,\n flexDirection: \"column\" as const,\n flexShrink: 0,\n listStyle: \"none\" as const,\n margin: 0,\n minHeight: 0,\n minWidth: 0,\n padding: 0,\n position: \"relative\" as const,\n textDecoration: \"none\" as const,\n zIndex: 0,\n ...style,\n };\n }, [style]);\n\n return <div style={cssStyles}>{children}</div>;\n}) as unknown as typeof ViewComponent;\n\nexport const Platform: IPlatform = {\n OS: \"web\",\n PixelRatio: typeof window !== \"undefined\" ? window.devicePixelRatio : 1, // window is not defined on node\n resolveAsset: (source: DataModule) => {\n const asset = unwrapModule(source);\n if (typeof asset === \"string\") {\n return asset;\n }\n if (isRNModule(asset)) {\n if (typeof require === \"function\") {\n const {\n getAssetByID,\n } = require(\"react-native/Libraries/Image/AssetRegistry\");\n const { httpServerLocation, name, type } = getAssetByID(asset);\n const uri = `${httpServerLocation}/${name}.${type}`;\n return uri;\n }\n throw new Error(\n \"Asset source is a number - this is not supported on the web\"\n );\n }\n return asset.uri;\n },\n findNodeHandle: () => {\n throw new Error(\"findNodeHandle is not supported on the web\");\n },\n View,\n};\n"],"mappings":"AACA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAItC,SAASC,UAAU,EAAEC,YAAY,QAAQ,eAAe;AAIxD;AACA;AACA,MAAMC,IAAI,GAAIA,CAAC;EAAEC,QAAQ;EAAEC,KAAK,EAAEC;AAAoB,CAAC,KAAK;EAC1D,MAAMD,KAAK,GAAGL,OAAO,CAAC,MAAOM,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAI,CAAC,CAAmB,EAAE,CAACA,QAAQ,CAAC,CAAC;EAC1E,MAAMC,SAAS,GAAGP,OAAO,CAAC,MAAM;IAC9B,OAAO;MACLQ,UAAU,EAAE,SAAkB;MAC9BC,eAAe,EAAE,aAAsB;MACvCC,MAAM,EAAE,eAAwB;MAChCC,SAAS,EAAE,YAAqB;MAChCC,OAAO,EAAE,MAAe;MACxBC,SAAS,EAAE,MAAe;MAC1BC,aAAa,EAAE,QAAiB;MAChCC,UAAU,EAAE,CAAC;MACbC,SAAS,EAAE,MAAe;MAC1BC,MAAM,EAAE,CAAC;MACTC,SAAS,EAAE,CAAC;MACZC,QAAQ,EAAE,CAAC;MACXC,OAAO,EAAE,CAAC;MACVC,QAAQ,EAAE,UAAmB;MAC7BC,cAAc,EAAE,MAAe;MAC/BC,MAAM,EAAE,CAAC;MACT,GAAGlB;IACL,CAAC;EACH,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,oBAAON,KAAA,CAAAyB,aAAA;IAAKnB,KAAK,EAAEE;EAAU,GAAEH,QAAc,CAAC;AAChD,CAAqC;AAErC,OAAO,MAAMqB,QAAmB,GAAG;EACjCC,EAAE,EAAE,KAAK;EACTC,UAAU,EAAE,OAAOC,MAAM,KAAK,WAAW,GAAGA,MAAM,CAACC,gBAAgB,GAAG,CAAC;EAAE;EACzEC,YAAY,EAAGC,MAAkB,IAAK;IACpC,MAAMC,KAAK,GAAG9B,YAAY,CAAC6B,MAAM,CAAC;IAClC,IAAI,OAAOC,KAAK,KAAK,QAAQ,EAAE;MAC7B,OAAOA,KAAK;IACd;IACA,IAAI/B,UAAU,CAAC+B,KAAK,CAAC,EAAE;MACrB,IAAI,OAAOC,OAAO,KAAK,UAAU,EAAE;QACjC,MAAM;UACJC;QACF,CAAC,GAAGD,OAAO,CAAC,4CAA4C,CAAC;QACzD,MAAM;UAAEE,kBAAkB;UAAEC,IAAI;UAAEC;QAAK,CAAC,GAAGH,YAAY,CAACF,KAAK,CAAC;QAC9D,MAAMM,GAAG,GAAG,GAAGH,kBAAkB,IAAIC,IAAI,IAAIC,IAAI,EAAE;QACnD,OAAOC,GAAG;MACZ;MACA,MAAM,IAAIC,KAAK,CACb,6DACF,CAAC;IACH;IACA,OAAOP,KAAK,CAACM,GAAG;EAClB,CAAC;EACDE,cAAc,EAAEA,CAAA,KAAM;IACpB,MAAM,IAAID,KAAK,CAAC,4CAA4C,CAAC;EAC/D,CAAC;EACDpC;AACF,CAAC","ignoreList":[]}
|
package/lib/module/index.d.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import "./skia/NativeSetup";
|
|
2
2
|
export { JsiSkImage } from "./skia/web/JsiSkImage";
|
|
3
3
|
export * from "./renderer";
|
|
4
|
-
export { useCanvasRef, useCanvasSize } from "./renderer/Canvas";
|
|
4
|
+
export { Canvas, useCanvasRef, useCanvasSize } from "./renderer/Canvas";
|
|
5
5
|
export type { CanvasProps, CanvasRef } from "./renderer/Canvas";
|
|
6
|
-
export { GraphiteCanvas } from "./renderer/GraphiteCanvas";
|
|
7
|
-
export { Canvas } from "./renderer/DefaultCanvas";
|
|
8
6
|
export * from "./renderer/Offscreen";
|
|
9
7
|
export * from "./views";
|
|
10
8
|
export * from "./skia";
|
package/lib/module/index.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import "./skia/NativeSetup";
|
|
2
2
|
export { JsiSkImage } from "./skia/web/JsiSkImage";
|
|
3
3
|
export * from "./renderer";
|
|
4
|
-
export { useCanvasRef, useCanvasSize } from "./renderer/Canvas";
|
|
5
|
-
export { GraphiteCanvas } from "./renderer/GraphiteCanvas";
|
|
6
|
-
export { Canvas } from "./renderer/DefaultCanvas";
|
|
4
|
+
export { Canvas, useCanvasRef, useCanvasSize } from "./renderer/Canvas";
|
|
7
5
|
export * from "./renderer/Offscreen";
|
|
8
6
|
export * from "./views";
|
|
9
7
|
export * from "./skia";
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["JsiSkImage","
|
|
1
|
+
{"version":3,"names":["JsiSkImage","Canvas","useCanvasRef","useCanvasSize"],"sources":["index.ts"],"sourcesContent":["import \"./skia/NativeSetup\";\nexport { JsiSkImage } from \"./skia/web/JsiSkImage\";\nexport * from \"./renderer\";\nexport { Canvas, useCanvasRef, useCanvasSize } from \"./renderer/Canvas\";\nexport type { CanvasProps, CanvasRef } from \"./renderer/Canvas\";\nexport * from \"./renderer/Offscreen\";\nexport * from \"./views\";\nexport * from \"./skia\";\nexport * from \"./external\";\nexport * from \"./animation\";\nexport * from \"./dom/types\";\nexport * from \"./dom/nodes\";\n"],"mappings":"AAAA,OAAO,oBAAoB;AAC3B,SAASA,UAAU,QAAQ,uBAAuB;AAClD,cAAc,YAAY;AAC1B,SAASC,MAAM,EAAEC,YAAY,EAAEC,aAAa,QAAQ,mBAAmB;AAEvE,cAAc,sBAAsB;AACpC,cAAc,SAAS;AACvB,cAAc,QAAQ;AACtB,cAAc,YAAY;AAC1B,cAAc,aAAa;AAC3B,cAAc,aAAa;AAC3B,cAAc,aAAa","ignoreList":[]}
|
package/lib/module/mock/index.js
CHANGED
|
@@ -24,7 +24,6 @@ export const Mock = CanvasKit => {
|
|
|
24
24
|
...require("../dom/types"),
|
|
25
25
|
...require("../dom/nodes"),
|
|
26
26
|
Canvas: require("react-native").View,
|
|
27
|
-
GraphiteCanvas: require("react-native").View,
|
|
28
27
|
getPreferredHighBitDepthCanvasFormat: () => "rgba16float",
|
|
29
28
|
SkiaPictureView: require("react-native").View,
|
|
30
29
|
SkiaGraphiteView: require("react-native").View,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["JsiSkApi","JsiSkImage","Noop","undefined","NoopValue","current","NoopSharedValue","value","Mock","CanvasKit","global","SkiaApi","Skia","require","Canvas","View","
|
|
1
|
+
{"version":3,"names":["JsiSkApi","JsiSkImage","Noop","undefined","NoopValue","current","NoopSharedValue","value","Mock","CanvasKit","global","SkiaApi","Skia","require","Canvas","View","getPreferredHighBitDepthCanvasFormat","SkiaPictureView","SkiaGraphiteView","drawAsPicture","drawAsImage","drawAsImageFromPicture","useCanvasRef","useCanvasSize","ref","size","width","height","useValue","useComputedValue","useTiming","useLoop","useSpring","useClockValue","useValueEffect","isOnMainThread","useClock","usePathInterpolation","useImageAsTexture","useTextureValue","useTextureValueFromPicture","useRSXformBuffer","usePointBuffer","useColorBuffer","useRectBuffer","useBuffer","useRawData","useData","useFont","Font","useFonts","useTypeface","useImage","useSVG","useVideo"],"sources":["index.ts"],"sourcesContent":["import type { CanvasKit } from \"canvaskit-wasm\";\n\nimport { JsiSkApi } from \"../skia/web\";\nimport { JsiSkImage } from \"../skia/web/JsiSkImage\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst Noop: () => any = () => undefined;\nconst NoopValue = () => ({ current: 0 });\nconst NoopSharedValue = () => ({ value: 0 });\n\nexport const Mock = (CanvasKit: CanvasKit) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n global.SkiaApi = JsiSkApi(CanvasKit);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const Skia = global.SkiaApi;\n return {\n Skia,\n ...require(\"../renderer/components\"),\n ...require(\"../skia\"),\n ...require(\"../animation\"),\n ...require(\"../dom/types\"),\n ...require(\"../dom/nodes\"),\n Canvas: require(\"react-native\").View,\n getPreferredHighBitDepthCanvasFormat: () => \"rgba16float\",\n SkiaPictureView: require(\"react-native\").View,\n SkiaGraphiteView: require(\"react-native\").View,\n JsiSkImage: JsiSkImage,\n drawAsPicture: Noop,\n drawAsImage: Noop,\n drawAsImageFromPicture: Noop,\n useCanvasRef: NoopValue,\n useCanvasSize: () => ({\n ref: {\n current: 0,\n },\n size: {\n width: 0,\n height: 0,\n },\n }),\n // Skia Animations\n useValue: NoopValue,\n useComputedValue: NoopValue,\n useTiming: NoopValue,\n useLoop: NoopValue,\n useSpring: NoopValue,\n useClockValue: NoopValue,\n useValueEffect: Noop,\n // Reanimated hooks\n isOnMainThread: () => true,\n useClock: NoopSharedValue,\n usePathInterpolation: NoopSharedValue,\n useImageAsTexture: NoopSharedValue,\n useTextureValue: NoopSharedValue,\n useTextureValueFromPicture: NoopSharedValue,\n useRSXformBuffer: NoopSharedValue,\n usePointBuffer: NoopSharedValue,\n useColorBuffer: NoopSharedValue,\n useRectBuffer: NoopSharedValue,\n useBuffer: NoopSharedValue,\n useRawData: Noop,\n useData: Noop,\n useFont: () => Skia.Font(undefined, 0),\n useFonts: Noop,\n useTypeface: () => null,\n useImage: () => null,\n useSVG: () => null,\n useVideo: () => null,\n };\n};\n"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,aAAa;AACtC,SAASC,UAAU,QAAQ,wBAAwB;;AAEnD;AACA,MAAMC,IAAe,GAAGA,CAAA,KAAMC,SAAS;AACvC,MAAMC,SAAS,GAAGA,CAAA,MAAO;EAAEC,OAAO,EAAE;AAAE,CAAC,CAAC;AACxC,MAAMC,eAAe,GAAGA,CAAA,MAAO;EAAEC,KAAK,EAAE;AAAE,CAAC,CAAC;AAE5C,OAAO,MAAMC,IAAI,GAAIC,SAAoB,IAAK;EAC5C;EACA;EACAC,MAAM,CAACC,OAAO,GAAGX,QAAQ,CAACS,SAAS,CAAC;EACpC;EACA;EACA,MAAMG,IAAI,GAAGF,MAAM,CAACC,OAAO;EAC3B,OAAO;IACLC,IAAI;IACJ,GAAGC,OAAO,CAAC,wBAAwB,CAAC;IACpC,GAAGA,OAAO,CAAC,SAAS,CAAC;IACrB,GAAGA,OAAO,CAAC,cAAc,CAAC;IAC1B,GAAGA,OAAO,CAAC,cAAc,CAAC;IAC1B,GAAGA,OAAO,CAAC,cAAc,CAAC;IAC1BC,MAAM,EAAED,OAAO,CAAC,cAAc,CAAC,CAACE,IAAI;IACpCC,oCAAoC,EAAEA,CAAA,KAAM,aAAa;IACzDC,eAAe,EAAEJ,OAAO,CAAC,cAAc,CAAC,CAACE,IAAI;IAC7CG,gBAAgB,EAAEL,OAAO,CAAC,cAAc,CAAC,CAACE,IAAI;IAC9Cd,UAAU,EAAEA,UAAU;IACtBkB,aAAa,EAAEjB,IAAI;IACnBkB,WAAW,EAAElB,IAAI;IACjBmB,sBAAsB,EAAEnB,IAAI;IAC5BoB,YAAY,EAAElB,SAAS;IACvBmB,aAAa,EAAEA,CAAA,MAAO;MACpBC,GAAG,EAAE;QACHnB,OAAO,EAAE;MACX,CAAC;MACDoB,IAAI,EAAE;QACJC,KAAK,EAAE,CAAC;QACRC,MAAM,EAAE;MACV;IACF,CAAC,CAAC;IACF;IACAC,QAAQ,EAAExB,SAAS;IACnByB,gBAAgB,EAAEzB,SAAS;IAC3B0B,SAAS,EAAE1B,SAAS;IACpB2B,OAAO,EAAE3B,SAAS;IAClB4B,SAAS,EAAE5B,SAAS;IACpB6B,aAAa,EAAE7B,SAAS;IACxB8B,cAAc,EAAEhC,IAAI;IACpB;IACAiC,cAAc,EAAEA,CAAA,KAAM,IAAI;IAC1BC,QAAQ,EAAE9B,eAAe;IACzB+B,oBAAoB,EAAE/B,eAAe;IACrCgC,iBAAiB,EAAEhC,eAAe;IAClCiC,eAAe,EAAEjC,eAAe;IAChCkC,0BAA0B,EAAElC,eAAe;IAC3CmC,gBAAgB,EAAEnC,eAAe;IACjCoC,cAAc,EAAEpC,eAAe;IAC/BqC,cAAc,EAAErC,eAAe;IAC/BsC,aAAa,EAAEtC,eAAe;IAC9BuC,SAAS,EAAEvC,eAAe;IAC1BwC,UAAU,EAAE5C,IAAI;IAChB6C,OAAO,EAAE7C,IAAI;IACb8C,OAAO,EAAEA,CAAA,KAAMpC,IAAI,CAACqC,IAAI,CAAC9C,SAAS,EAAE,CAAC,CAAC;IACtC+C,QAAQ,EAAEhD,IAAI;IACdiD,WAAW,EAAEA,CAAA,KAAM,IAAI;IACvBC,QAAQ,EAAEA,CAAA,KAAM,IAAI;IACpBC,MAAM,EAAEA,CAAA,KAAM,IAAI;IAClBC,QAAQ,EAAEA,CAAA,KAAM;EAClB,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { FC, RefObject } from "react";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import type { MeasureInWindowOnSuccessCallback, MeasureOnSuccessCallback,
|
|
3
|
+
import type { MeasureInWindowOnSuccessCallback, MeasureOnSuccessCallback, ViewProps } from "react-native";
|
|
4
4
|
import type { SharedValue } from "react-native-reanimated";
|
|
5
5
|
import type { AndroidCanvasProps } from "../views/types";
|
|
6
6
|
import type { SkImage, SkRect, SkSize } from "../skia/types";
|
|
@@ -18,7 +18,6 @@ export declare const useCanvasSize: (userRef?: RefObject<CanvasRef | null>) => {
|
|
|
18
18
|
size: SkSize;
|
|
19
19
|
};
|
|
20
20
|
export interface CanvasProps extends Omit<ViewProps, "onLayout"> {
|
|
21
|
-
debug?: boolean;
|
|
22
21
|
/** @deprecated Not supported on native. Use `onSize` or `useCanvasSize()` instead. */
|
|
23
22
|
onLayout?: ViewProps["onLayout"];
|
|
24
23
|
/**
|
|
@@ -29,7 +28,6 @@ export interface CanvasProps extends Omit<ViewProps, "onLayout"> {
|
|
|
29
28
|
*/
|
|
30
29
|
opaque?: boolean;
|
|
31
30
|
onSize?: SharedValue<SkSize>;
|
|
32
|
-
colorSpace?: "p3" | "srgb";
|
|
33
31
|
/**
|
|
34
32
|
* Renders into a surface with more than 8 bits per channel (16-bit float on
|
|
35
33
|
* iOS, 10-bit on Android) to avoid banding in subtle gradients. Colors are
|
|
@@ -42,16 +40,21 @@ export interface CanvasProps extends Omit<ViewProps, "onLayout"> {
|
|
|
42
40
|
/** Android-only rendering options. Ignored on iOS and web. */
|
|
43
41
|
android?: AndroidCanvasProps;
|
|
44
42
|
ref?: React.Ref<CanvasRef>;
|
|
45
|
-
androidWarmup?: boolean;
|
|
46
43
|
__destroyWebGLContextAfterRender?: boolean;
|
|
47
44
|
}
|
|
48
45
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
46
|
+
* The declarative canvas. Its children are rendered by Skia's own React
|
|
47
|
+
* renderer; the frames are produced off the JS thread:
|
|
48
|
+
*
|
|
49
|
+
* - the JS thread records the scene graph into a native recorder once per
|
|
50
|
+
* React commit and hands it to the view;
|
|
51
|
+
* - the Reanimated UI runtime only reads the shared values into it (the one
|
|
52
|
+
* step that needs a JS runtime), it never replays anything;
|
|
53
|
+
* - a dedicated native thread pool replays the recorder into a Graphite
|
|
54
|
+
* recording whenever the content changed, at most once per presented frame;
|
|
55
|
+
* - the view presents the recording on the next vsync.
|
|
56
|
+
*
|
|
57
|
+
* On the web the scene is drawn into a picture on the JS thread and painted
|
|
58
|
+
* on a WebGL canvas.
|
|
52
59
|
*/
|
|
53
|
-
export declare const
|
|
54
|
-
nativeId: number;
|
|
55
|
-
viewRef: RefObject<View | null>;
|
|
56
|
-
};
|
|
57
|
-
export declare const Canvas: ({ debug, opaque, children, onSize, colorSpace, highBitDepth, androidWarmup, android, ref, onLayout, ...viewProps }: CanvasProps) => React.JSX.Element;
|
|
60
|
+
export declare const Canvas: ({ opaque, children, onSize, highBitDepth, android, ref, onLayout, ...viewProps }: CanvasProps) => React.JSX.Element;
|