react-native-skia 3.0.1 → 3.0.3

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.
Files changed (269) hide show
  1. package/Package.swift +14 -13
  2. package/README.md +19 -2
  3. package/android/CMakeLists.txt +13 -42
  4. package/android/build.gradle +54 -63
  5. package/android/cpp/jni/JniLoad.cpp +2 -4
  6. package/android/cpp/jni/include/JniSkiaView.h +123 -0
  7. package/android/cpp/rnskia-android/{RNSkOpenGLCanvasProvider.cpp → RNSkAndroidCanvasProvider.cpp} +45 -100
  8. package/android/cpp/rnskia-android/{RNSkOpenGLCanvasProvider.h → RNSkAndroidCanvasProvider.h} +24 -22
  9. package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +0 -83
  10. package/android/cpp/rnskia-android/RNSkAndroidVideo.cpp +0 -8
  11. package/android/src/main/java/com/reactnative/skia/RNSkiaPackage.java +1 -2
  12. package/android/src/main/java/com/reactnative/skia/SkiaSurfaceView.java +1 -3
  13. package/android/src/main/java/com/reactnative/skia/SkiaTextureView.java +1 -17
  14. package/android/src/main/java/com/reactnative/skia/{SkiaBaseView.java → SkiaView.java} +78 -16
  15. package/android/src/main/java/com/reactnative/skia/SkiaViewManager.java +85 -0
  16. package/apple/MetalLayerColorSpace.mm +10 -12
  17. package/apple/RNSkApplePlatformContext.h +12 -14
  18. package/apple/RNSkApplePlatformContext.mm +19 -112
  19. package/apple/RNSkMetalCanvasProvider.h +14 -19
  20. package/apple/RNSkMetalCanvasProvider.mm +39 -70
  21. package/apple/RNSkiaModule.mm +10 -0
  22. package/apple/SkiaView.h +20 -0
  23. package/apple/SkiaView.mm +210 -0
  24. package/cpp/api/JsiSkApi.h +2 -13
  25. package/cpp/api/JsiSkCanvas.h +4 -18
  26. package/cpp/api/JsiSkGraphiteContext.h +1 -5
  27. package/cpp/api/JsiSkGraphiteRecording.h +1 -5
  28. package/cpp/api/JsiSkImage.h +7 -41
  29. package/cpp/api/JsiSkImageFactory.h +0 -14
  30. package/cpp/api/JsiSkSurface.h +2 -16
  31. package/cpp/api/JsiSkSurfaceFactory.h +0 -8
  32. package/cpp/rnskia/RNDawnContext.h +3 -2
  33. package/cpp/rnskia/RNDawnInterop.cpp +0 -4
  34. package/cpp/rnskia/RNDawnUtils.h +12 -1
  35. package/cpp/rnskia/RNDawnWindowContext.cpp +12 -1
  36. package/cpp/rnskia/RNDawnWindowContext.h +19 -7
  37. package/cpp/rnskia/RNMetalLayerColorSpace.h +4 -2
  38. package/cpp/rnskia/RNSkCanvasProvider.h +231 -0
  39. package/cpp/rnskia/RNSkGraphiteProducer.cpp +36 -14
  40. package/cpp/rnskia/RNSkGraphiteProducer.h +23 -8
  41. package/cpp/rnskia/RNSkGraphiteTarget.h +396 -0
  42. package/cpp/rnskia/RNSkJsiViewApi.h +9 -18
  43. package/cpp/rnskia/RNSkPlatformContext.h +17 -15
  44. package/cpp/rnskia/RNSkView.h +362 -246
  45. package/jestSetup.js +1 -3
  46. package/lib/commonjs/Platform/Platform.web.js +1 -1
  47. package/lib/commonjs/Platform/Platform.web.js.map +1 -1
  48. package/lib/commonjs/external/reanimated/interpolators.js +1 -1
  49. package/lib/commonjs/external/reanimated/interpolators.js.map +1 -1
  50. package/lib/commonjs/index.d.ts +1 -3
  51. package/lib/commonjs/index.js +3 -12
  52. package/lib/commonjs/index.js.map +1 -1
  53. package/lib/commonjs/mock/index.js +0 -1
  54. package/lib/commonjs/mock/index.js.map +1 -1
  55. package/lib/commonjs/renderer/Canvas.d.ts +15 -12
  56. package/lib/commonjs/renderer/Canvas.js +25 -21
  57. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  58. package/lib/commonjs/skia/types/Graphite.d.ts +3 -3
  59. package/lib/commonjs/skia/types/Graphite.js.map +1 -1
  60. package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +2 -2
  61. package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
  62. package/lib/commonjs/skia/types/Skia.d.ts +1 -2
  63. package/lib/commonjs/skia/types/Skia.js.map +1 -1
  64. package/lib/commonjs/skia/types/Surface/SurfaceFactory.d.ts +1 -1
  65. package/lib/commonjs/skia/types/Surface/SurfaceFactory.js.map +1 -1
  66. package/lib/commonjs/specs/NativeSkiaModule.web.d.ts +5 -4
  67. package/lib/commonjs/specs/NativeSkiaModule.web.js +5 -9
  68. package/lib/commonjs/specs/NativeSkiaModule.web.js.map +1 -1
  69. package/lib/{typescript/src/specs/SkiaPictureViewNativeComponent.d.ts → commonjs/specs/SkiaViewNativeComponent.d.ts} +0 -3
  70. package/lib/commonjs/specs/{SkiaPictureViewNativeComponent.js → SkiaViewNativeComponent.js} +2 -2
  71. package/lib/commonjs/specs/SkiaViewNativeComponent.js.map +1 -0
  72. package/lib/commonjs/specs/SkiaViewNativeComponent.web.d.ts +10 -0
  73. package/lib/commonjs/specs/SkiaViewNativeComponent.web.js +27 -0
  74. package/lib/commonjs/specs/SkiaViewNativeComponent.web.js.map +1 -0
  75. package/lib/commonjs/views/SkiaGraphiteView.d.ts +3 -4
  76. package/lib/commonjs/views/SkiaGraphiteView.js +23 -12
  77. package/lib/commonjs/views/SkiaGraphiteView.js.map +1 -1
  78. package/lib/commonjs/views/SkiaPictureView.d.ts +4 -1
  79. package/lib/commonjs/views/SkiaPictureView.js +12 -10
  80. package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
  81. package/lib/commonjs/views/SkiaView.web.d.ts +12 -0
  82. package/lib/commonjs/views/{SkiaGraphiteView.web.js → SkiaView.web.js} +82 -38
  83. package/lib/commonjs/views/SkiaView.web.js.map +1 -0
  84. package/lib/commonjs/views/SkiaWebRenderer.js +1 -1
  85. package/lib/commonjs/views/SkiaWebRenderer.js.map +1 -1
  86. package/lib/commonjs/views/android.d.ts +6 -0
  87. package/lib/commonjs/views/android.js +17 -0
  88. package/lib/commonjs/views/android.js.map +1 -0
  89. package/lib/commonjs/views/types.d.ts +3 -12
  90. package/lib/commonjs/views/types.js.map +1 -1
  91. package/lib/module/Platform/Platform.web.js +1 -1
  92. package/lib/module/Platform/Platform.web.js.map +1 -1
  93. package/lib/module/external/reanimated/interpolators.js +1 -1
  94. package/lib/module/external/reanimated/interpolators.js.map +1 -1
  95. package/lib/module/index.d.ts +1 -3
  96. package/lib/module/index.js +1 -3
  97. package/lib/module/index.js.map +1 -1
  98. package/lib/module/mock/index.js +0 -1
  99. package/lib/module/mock/index.js.map +1 -1
  100. package/lib/module/renderer/Canvas.d.ts +15 -12
  101. package/lib/module/renderer/Canvas.js +25 -20
  102. package/lib/module/renderer/Canvas.js.map +1 -1
  103. package/lib/module/skia/types/Graphite.d.ts +3 -3
  104. package/lib/module/skia/types/Graphite.js.map +1 -1
  105. package/lib/module/skia/types/Image/ImageFactory.d.ts +2 -2
  106. package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
  107. package/lib/module/skia/types/Skia.d.ts +1 -2
  108. package/lib/module/skia/types/Skia.js.map +1 -1
  109. package/lib/module/skia/types/Surface/SurfaceFactory.d.ts +1 -1
  110. package/lib/module/skia/types/Surface/SurfaceFactory.js.map +1 -1
  111. package/lib/module/specs/NativeSkiaModule.web.d.ts +5 -4
  112. package/lib/module/specs/NativeSkiaModule.web.js +5 -9
  113. package/lib/module/specs/NativeSkiaModule.web.js.map +1 -1
  114. package/lib/{commonjs/specs/SkiaPictureViewNativeComponent.d.ts → module/specs/SkiaViewNativeComponent.d.ts} +0 -3
  115. package/lib/module/specs/{SkiaPictureViewNativeComponent.js → SkiaViewNativeComponent.js} +2 -2
  116. package/lib/module/specs/SkiaViewNativeComponent.js.map +1 -0
  117. package/lib/module/specs/SkiaViewNativeComponent.web.d.ts +10 -0
  118. package/lib/module/specs/SkiaViewNativeComponent.web.js +21 -0
  119. package/lib/module/specs/SkiaViewNativeComponent.web.js.map +1 -0
  120. package/lib/module/views/SkiaGraphiteView.d.ts +3 -4
  121. package/lib/module/views/SkiaGraphiteView.js +23 -12
  122. package/lib/module/views/SkiaGraphiteView.js.map +1 -1
  123. package/lib/module/views/SkiaPictureView.d.ts +4 -1
  124. package/lib/module/views/SkiaPictureView.js +12 -10
  125. package/lib/module/views/SkiaPictureView.js.map +1 -1
  126. package/lib/module/views/SkiaView.web.d.ts +12 -0
  127. package/lib/module/views/{SkiaGraphiteView.web.js → SkiaView.web.js} +80 -36
  128. package/lib/module/views/SkiaView.web.js.map +1 -0
  129. package/lib/module/views/SkiaWebRenderer.js +1 -1
  130. package/lib/module/views/SkiaWebRenderer.js.map +1 -1
  131. package/lib/module/views/android.d.ts +6 -0
  132. package/lib/module/views/android.js +10 -0
  133. package/lib/module/views/android.js.map +1 -0
  134. package/lib/module/views/types.d.ts +3 -12
  135. package/lib/module/views/types.js.map +1 -1
  136. package/lib/typescript/src/index.d.ts +1 -3
  137. package/lib/typescript/src/renderer/Canvas.d.ts +15 -12
  138. package/lib/typescript/src/skia/types/Graphite.d.ts +3 -3
  139. package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +2 -2
  140. package/lib/typescript/src/skia/types/Skia.d.ts +1 -2
  141. package/lib/typescript/src/skia/types/Surface/SurfaceFactory.d.ts +1 -1
  142. package/lib/typescript/src/specs/NativeSkiaModule.web.d.ts +5 -4
  143. package/lib/{module/specs/SkiaPictureViewNativeComponent.d.ts → typescript/src/specs/SkiaViewNativeComponent.d.ts} +0 -3
  144. package/lib/typescript/src/specs/SkiaViewNativeComponent.web.d.ts +10 -0
  145. package/lib/typescript/src/views/SkiaGraphiteView.d.ts +3 -4
  146. package/lib/typescript/src/views/SkiaPictureView.d.ts +4 -1
  147. package/lib/typescript/src/views/SkiaView.web.d.ts +12 -0
  148. package/lib/typescript/src/views/android.d.ts +6 -0
  149. package/lib/typescript/src/views/types.d.ts +3 -12
  150. package/package.json +5 -13
  151. package/react-native-skia.podspec +34 -58
  152. package/src/Platform/Platform.web.tsx +1 -1
  153. package/src/external/reanimated/interpolators.ts +1 -1
  154. package/src/index.ts +1 -3
  155. package/src/mock/index.ts +0 -1
  156. package/src/renderer/Canvas.tsx +24 -28
  157. package/src/skia/types/Graphite.ts +3 -3
  158. package/src/skia/types/Image/ImageFactory.ts +2 -2
  159. package/src/skia/types/Skia.ts +1 -2
  160. package/src/skia/types/Surface/SurfaceFactory.ts +1 -1
  161. package/src/specs/NativeSkiaModule.web.ts +9 -21
  162. package/src/specs/{SkiaPictureViewNativeComponent.ts → SkiaViewNativeComponent.ts} +1 -4
  163. package/src/specs/{SkiaPictureViewNativeComponent.web.ts → SkiaViewNativeComponent.web.ts} +8 -10
  164. package/src/views/SkiaGraphiteView.tsx +27 -16
  165. package/src/views/SkiaPictureView.tsx +11 -10
  166. package/src/views/{SkiaGraphiteView.web.tsx → SkiaView.web.tsx} +100 -53
  167. package/src/views/SkiaWebRenderer.ts +1 -1
  168. package/src/views/android.ts +16 -0
  169. package/src/views/types.ts +3 -14
  170. package/android/cpp/jni/include/JniSkiaBaseView.h +0 -92
  171. package/android/cpp/jni/include/JniSkiaGraphiteView.h +0 -176
  172. package/android/cpp/jni/include/JniSkiaPictureView.h +0 -172
  173. package/android/cpp/rnskia-android/GrAHardwareBufferUtils.cpp +0 -245
  174. package/android/cpp/rnskia-android/GrAHardwareBufferUtils.h +0 -33
  175. package/android/cpp/rnskia-android/OpenGLContext.h +0 -248
  176. package/android/cpp/rnskia-android/OpenGLWindowContext.cpp +0 -67
  177. package/android/cpp/rnskia-android/OpenGLWindowContext.h +0 -75
  178. package/android/cpp/rnskia-android/RNSkAndroidView.h +0 -67
  179. package/android/cpp/rnskia-android/gl/Context.h +0 -80
  180. package/android/cpp/rnskia-android/gl/Display.h +0 -123
  181. package/android/cpp/rnskia-android/gl/Error.cpp +0 -45
  182. package/android/cpp/rnskia-android/gl/Error.h +0 -8
  183. package/android/cpp/rnskia-android/gl/Surface.h +0 -43
  184. package/android/src/main/java/com/reactnative/skia/SkiaBaseViewManager.java +0 -65
  185. package/android/src/main/java/com/reactnative/skia/SkiaGraphiteView.java +0 -78
  186. package/android/src/main/java/com/reactnative/skia/SkiaGraphiteViewManager.java +0 -32
  187. package/android/src/main/java/com/reactnative/skia/SkiaPictureView.java +0 -105
  188. package/android/src/main/java/com/reactnative/skia/SkiaPictureViewManager.java +0 -44
  189. package/apple/MetalContext.h +0 -116
  190. package/apple/MetalContext.mm +0 -38
  191. package/apple/MetalWindowContext.h +0 -42
  192. package/apple/MetalWindowContext.mm +0 -95
  193. package/apple/RNSkAppleView.h +0 -49
  194. package/apple/RNSkAppleView.mm +0 -35
  195. package/apple/SkiaCVPixelBufferUtils.h +0 -122
  196. package/apple/SkiaCVPixelBufferUtils.mm +0 -535
  197. package/apple/SkiaGraphiteView.h +0 -26
  198. package/apple/SkiaGraphiteView.mm +0 -180
  199. package/apple/SkiaPictureView.h +0 -7
  200. package/apple/SkiaPictureView.mm +0 -70
  201. package/apple/SkiaUIView.h +0 -31
  202. package/apple/SkiaUIView.mm +0 -164
  203. package/cpp/rnskia/RNSkGraphiteView.h +0 -708
  204. package/cpp/rnskia/RNSkPictureView.cpp +0 -69
  205. package/cpp/rnskia/RNSkPictureView.h +0 -211
  206. package/cpp/skia/src/gpu/ganesh/gl/GrGLDefines.h +0 -1162
  207. package/lib/commonjs/renderer/DefaultCanvas.d.ts +0 -8
  208. package/lib/commonjs/renderer/DefaultCanvas.js +0 -42
  209. package/lib/commonjs/renderer/DefaultCanvas.js.map +0 -1
  210. package/lib/commonjs/renderer/GraphiteCanvas.d.ts +0 -22
  211. package/lib/commonjs/renderer/GraphiteCanvas.js +0 -64
  212. package/lib/commonjs/renderer/GraphiteCanvas.js.map +0 -1
  213. package/lib/commonjs/renderer/GraphiteCanvas.web.d.ts +0 -1
  214. package/lib/commonjs/renderer/GraphiteCanvas.web.js +0 -13
  215. package/lib/commonjs/renderer/GraphiteCanvas.web.js.map +0 -1
  216. package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.d.ts +0 -10
  217. package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.js +0 -12
  218. package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.js.map +0 -1
  219. package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.web.d.ts +0 -9
  220. package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.web.js +0 -28
  221. package/lib/commonjs/specs/SkiaGraphiteViewNativeComponent.web.js.map +0 -1
  222. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js.map +0 -1
  223. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.web.d.ts +0 -10
  224. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.web.js +0 -29
  225. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.web.js.map +0 -1
  226. package/lib/commonjs/views/SkiaGraphiteView.web.d.ts +0 -14
  227. package/lib/commonjs/views/SkiaGraphiteView.web.js.map +0 -1
  228. package/lib/commonjs/views/SkiaPictureView.web.d.ts +0 -11
  229. package/lib/commonjs/views/SkiaPictureView.web.js +0 -165
  230. package/lib/commonjs/views/SkiaPictureView.web.js.map +0 -1
  231. package/lib/module/renderer/DefaultCanvas.d.ts +0 -8
  232. package/lib/module/renderer/DefaultCanvas.js +0 -34
  233. package/lib/module/renderer/DefaultCanvas.js.map +0 -1
  234. package/lib/module/renderer/GraphiteCanvas.d.ts +0 -22
  235. package/lib/module/renderer/GraphiteCanvas.js +0 -57
  236. package/lib/module/renderer/GraphiteCanvas.js.map +0 -1
  237. package/lib/module/renderer/GraphiteCanvas.web.d.ts +0 -1
  238. package/lib/module/renderer/GraphiteCanvas.web.js +0 -4
  239. package/lib/module/renderer/GraphiteCanvas.web.js.map +0 -1
  240. package/lib/module/specs/SkiaGraphiteViewNativeComponent.d.ts +0 -10
  241. package/lib/module/specs/SkiaGraphiteViewNativeComponent.js +0 -8
  242. package/lib/module/specs/SkiaGraphiteViewNativeComponent.js.map +0 -1
  243. package/lib/module/specs/SkiaGraphiteViewNativeComponent.web.d.ts +0 -9
  244. package/lib/module/specs/SkiaGraphiteViewNativeComponent.web.js +0 -22
  245. package/lib/module/specs/SkiaGraphiteViewNativeComponent.web.js.map +0 -1
  246. package/lib/module/specs/SkiaPictureViewNativeComponent.js.map +0 -1
  247. package/lib/module/specs/SkiaPictureViewNativeComponent.web.d.ts +0 -10
  248. package/lib/module/specs/SkiaPictureViewNativeComponent.web.js +0 -23
  249. package/lib/module/specs/SkiaPictureViewNativeComponent.web.js.map +0 -1
  250. package/lib/module/views/SkiaGraphiteView.web.d.ts +0 -14
  251. package/lib/module/views/SkiaGraphiteView.web.js.map +0 -1
  252. package/lib/module/views/SkiaPictureView.web.d.ts +0 -11
  253. package/lib/module/views/SkiaPictureView.web.js +0 -156
  254. package/lib/module/views/SkiaPictureView.web.js.map +0 -1
  255. package/lib/typescript/src/renderer/DefaultCanvas.d.ts +0 -8
  256. package/lib/typescript/src/renderer/GraphiteCanvas.d.ts +0 -22
  257. package/lib/typescript/src/renderer/GraphiteCanvas.web.d.ts +0 -1
  258. package/lib/typescript/src/specs/SkiaGraphiteViewNativeComponent.d.ts +0 -10
  259. package/lib/typescript/src/specs/SkiaGraphiteViewNativeComponent.web.d.ts +0 -9
  260. package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.web.d.ts +0 -10
  261. package/lib/typescript/src/views/SkiaGraphiteView.web.d.ts +0 -14
  262. package/lib/typescript/src/views/SkiaPictureView.web.d.ts +0 -11
  263. package/libs/.graphite +0 -1
  264. package/src/renderer/DefaultCanvas.tsx +0 -41
  265. package/src/renderer/GraphiteCanvas.tsx +0 -61
  266. package/src/renderer/GraphiteCanvas.web.tsx +0 -3
  267. package/src/specs/SkiaGraphiteViewNativeComponent.ts +0 -17
  268. package/src/specs/SkiaGraphiteViewNativeComponent.web.ts +0 -31
  269. package/src/views/SkiaPictureView.web.tsx +0 -224
@@ -3,18 +3,33 @@ package com.reactnative.skia;
3
3
  import android.content.Context;
4
4
  import android.graphics.SurfaceTexture;
5
5
  import android.util.Log;
6
+ import android.view.Choreographer;
6
7
  import android.view.MotionEvent;
7
8
  import android.view.Surface;
8
9
  import android.view.View;
9
10
 
11
+ import com.facebook.jni.HybridData;
12
+ import com.facebook.jni.annotations.DoNotStrip;
13
+ import com.facebook.react.bridge.ReactContext;
10
14
  import com.facebook.react.uimanager.PointerEvents;
11
15
  import com.facebook.react.views.view.ReactViewGroup;
12
16
 
13
- public abstract class SkiaBaseView extends ReactViewGroup implements SkiaViewAPI {
17
+ /**
18
+ * The Android view behind <Canvas>, <SkiaPictureView> and <SkiaGraphiteView>.
19
+ * It is backed by a SurfaceView or a TextureView (see updateView()) that the
20
+ * native side draws into with Graphite, presenting the queued recordings on
21
+ * the Choreographer.
22
+ */
23
+ public class SkiaView extends ReactViewGroup implements SkiaViewAPI, Choreographer.FrameCallback {
14
24
  // Backing view kinds, see updateView().
15
25
  private static final int KIND_SURFACE_VIEW = 0;
16
26
  private static final int KIND_TEXTURE_VIEW = 1;
17
27
 
28
+ private static final String TAG = "SkiaView";
29
+
30
+ @DoNotStrip
31
+ private HybridData mHybridData;
32
+
18
33
  private View mView;
19
34
 
20
35
  // Props, applied together in updateView().
@@ -28,11 +43,12 @@ public abstract class SkiaBaseView extends ReactViewGroup implements SkiaViewAPI
28
43
  private boolean mAppliedZOrderOnTop;
29
44
  private boolean mAppliedHighBitDepth;
30
45
 
31
- private final boolean debug = false;
32
- private final String tag = "SkiaView";
46
+ private boolean mFramePending = false;
33
47
 
34
- public SkiaBaseView(Context context) {
48
+ public SkiaView(Context context) {
35
49
  super(context);
50
+ RNSkiaModule skiaModule = ((ReactContext) context).getNativeModule(RNSkiaModule.class);
51
+ mHybridData = initHybrid(skiaModule.getSkiaManager());
36
52
  }
37
53
 
38
54
  @Override
@@ -82,7 +98,7 @@ public abstract class SkiaBaseView extends ReactViewGroup implements SkiaViewAPI
82
98
  return false;
83
99
  }
84
100
  if (kind != KIND_SURFACE_VIEW || !mOpaque) {
85
- Log.w(tag, "highBitDepth requires an opaque SurfaceView on Android, falling back to the 8-bit format");
101
+ Log.w(TAG, "highBitDepth requires an opaque SurfaceView on Android, falling back to the 8-bit format");
86
102
  return false;
87
103
  }
88
104
  return true;
@@ -107,8 +123,8 @@ public abstract class SkiaBaseView extends ReactViewGroup implements SkiaViewAPI
107
123
  mAppliedZOrderOnTop = zOrderOnTop;
108
124
  mAppliedHighBitDepth = highBitDepth;
109
125
  mView = kind == KIND_SURFACE_VIEW
110
- ? new SkiaSurfaceView(getContext(), this, debug, zOrderOnTop, mOpaque)
111
- : new SkiaTextureView(getContext(), this, debug, mOpaque);
126
+ ? new SkiaSurfaceView(getContext(), this, zOrderOnTop, mOpaque)
127
+ : new SkiaTextureView(getContext(), this, mOpaque);
112
128
  addView(mView);
113
129
  // React Native sizes native children explicitly through onLayout, so
114
130
  // the requestLayout triggered by addView is ignored; size the new
@@ -130,11 +146,52 @@ public abstract class SkiaBaseView extends ReactViewGroup implements SkiaViewAPI
130
146
  @Override
131
147
  protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
132
148
  super.onLayout(changed, left, top, right, bottom);
149
+ // The backing view gets this exact size, and so does its surface: tell
150
+ // the native side now, so that a frame recorded before the surface
151
+ // exists (the first one usually is) already has the right size.
152
+ setLayoutSize(right - left, bottom - top);
133
153
  if (mView != null) {
134
154
  mView.layout(0, 0, right - left, bottom - top);
135
155
  }
136
156
  }
137
157
 
158
+ // Frames --------------------------------------------------------------
159
+
160
+ /**
161
+ * Presents the queued recordings on the next vsync. Main thread; called
162
+ * from native when a recording is submitted.
163
+ */
164
+ @DoNotStrip
165
+ public void scheduleFrame() {
166
+ if (!mFramePending) {
167
+ mFramePending = true;
168
+ Choreographer.getInstance().postFrameCallback(this);
169
+ }
170
+ }
171
+
172
+ @Override
173
+ public void doFrame(long frameTimeNanos) {
174
+ mFramePending = false;
175
+ if (presentFrame()) {
176
+ scheduleFrame();
177
+ }
178
+ }
179
+
180
+ @Override
181
+ protected void onDetachedFromWindow() {
182
+ super.onDetachedFromWindow();
183
+ Choreographer.getInstance().removeFrameCallback(this);
184
+ mFramePending = false;
185
+ }
186
+
187
+ @Override
188
+ protected void finalize() throws Throwable {
189
+ super.finalize();
190
+ mHybridData.resetNative();
191
+ }
192
+
193
+ // Surfaces ------------------------------------------------------------
194
+
138
195
  // SurfaceView callbacks: the native side receives an android.view.Surface.
139
196
 
140
197
  @Override
@@ -144,7 +201,7 @@ public abstract class SkiaBaseView extends ReactViewGroup implements SkiaViewAPI
144
201
 
145
202
  @Override
146
203
  public void onSurfaceChanged(Surface surface, int width, int height) {
147
- Log.i(tag, "onSurfaceChanged " + width + "/" + height);
204
+ Log.i(TAG, "onSurfaceChanged " + width + "/" + height);
148
205
  surfaceSizeChanged(surface, width, height, true, mAppliedHighBitDepth);
149
206
  }
150
207
 
@@ -158,7 +215,7 @@ public abstract class SkiaBaseView extends ReactViewGroup implements SkiaViewAPI
158
215
 
159
216
  @Override
160
217
  public void onSurfaceTextureChanged(SurfaceTexture surface, int width, int height) {
161
- Log.i(tag, "onSurfaceTextureSizeChanged " + width + "/" + height);
218
+ Log.i(TAG, "onSurfaceTextureSizeChanged " + width + "/" + height);
162
219
  surfaceSizeChanged(surface, width, height, false, false);
163
220
  }
164
221
 
@@ -167,19 +224,24 @@ public abstract class SkiaBaseView extends ReactViewGroup implements SkiaViewAPI
167
224
  surfaceDestroyed();
168
225
  }
169
226
 
227
+ // Native ---------------------------------------------------------------
228
+
229
+ private native HybridData initHybrid(SkiaManager skiaManager);
230
+
170
231
  // isSurface tells the native side whether `surface` is an
171
232
  // android.view.Surface (SurfaceView) or a SurfaceTexture (TextureView).
172
- protected abstract void surfaceAvailable(Object surface, int width, int height, boolean isSurface, boolean highBitDepth);
233
+ private native void surfaceAvailable(Object surface, int width, int height, boolean isSurface, boolean highBitDepth);
173
234
 
174
- protected abstract void surfaceSizeChanged(Object surface, int width, int height, boolean isSurface, boolean highBitDepth);
235
+ private native void surfaceSizeChanged(Object surface, int width, int height, boolean isSurface, boolean highBitDepth);
175
236
 
176
- protected abstract void surfaceDestroyed();
237
+ private native void surfaceDestroyed();
177
238
 
178
- protected abstract void setDebugMode(boolean show);
239
+ private native void setLayoutSize(int width, int height);
179
240
 
180
- protected abstract void registerView(int nativeId);
241
+ native void registerView(int nativeId);
181
242
 
182
- protected abstract void unregisterView();
243
+ private native void unregisterView();
183
244
 
184
- protected abstract int[] getBitmap(int width, int height);
245
+ /** Choreographer tick: returns whether more recordings are waiting. */
246
+ private native boolean presentFrame();
185
247
  }
@@ -0,0 +1,85 @@
1
+ package com.reactnative.skia;
2
+
3
+ import com.facebook.react.uimanager.PointerEvents;
4
+ import com.facebook.react.uimanager.ThemedReactContext;
5
+ import com.facebook.react.uimanager.ViewProps;
6
+ import com.facebook.react.uimanager.annotations.ReactProp;
7
+ import com.facebook.react.viewmanagers.SkiaViewManagerDelegate;
8
+ import com.facebook.react.viewmanagers.SkiaViewManagerInterface;
9
+ import com.facebook.react.views.view.ReactViewGroup;
10
+ import com.facebook.react.views.view.ReactViewManager;
11
+
12
+ import androidx.annotation.NonNull;
13
+ import androidx.annotation.Nullable;
14
+
15
+ public class SkiaViewManager extends ReactViewManager implements SkiaViewManagerInterface<SkiaView> {
16
+
17
+ protected SkiaViewManagerDelegate mDelegate;
18
+
19
+ SkiaViewManager() {
20
+ mDelegate = new SkiaViewManagerDelegate(this);
21
+ }
22
+
23
+ protected SkiaViewManagerDelegate getDelegate() {
24
+ return mDelegate;
25
+ }
26
+
27
+ @NonNull
28
+ @Override
29
+ public String getName() {
30
+ return "SkiaView";
31
+ }
32
+
33
+ @NonNull
34
+ @Override
35
+ public SkiaView createViewInstance(@NonNull ThemedReactContext reactContext) {
36
+ return new SkiaView(reactContext);
37
+ }
38
+
39
+ @Override
40
+ public void setNativeId(@NonNull ReactViewGroup view, @Nullable String nativeId) {
41
+ super.setNativeId(view, nativeId);
42
+ int nativeIdResolved = Integer.parseInt(nativeId);
43
+ ((SkiaView) view).registerView(nativeIdResolved);
44
+ }
45
+
46
+ @ReactProp(name = "opaque")
47
+ public void setOpaque(SkiaView view, boolean value) {
48
+ view.setOpaque(value);
49
+ }
50
+
51
+ @ReactProp(name = "highBitDepth")
52
+ public void setHighBitDepth(SkiaView view, boolean value) {
53
+ view.setHighBitDepth(value);
54
+ }
55
+
56
+ @ReactProp(name = "androidSurfaceType")
57
+ public void setAndroidSurfaceType(SkiaView view, @Nullable String value) {
58
+ view.setSurfaceType(value);
59
+ }
60
+
61
+ @ReactProp(name = "androidZOrderOnTop")
62
+ public void setAndroidZOrderOnTop(SkiaView view, boolean value) {
63
+ view.setZOrderOnTop(value);
64
+ }
65
+
66
+ @ReactProp(name = ViewProps.POINTER_EVENTS)
67
+ public void setPointerEvents(SkiaView view, @Nullable String pointerEventsStr) {
68
+ view.setPointerEvents(PointerEvents.parsePointerEvents(pointerEventsStr));
69
+ }
70
+
71
+ // The backing view depends on several props (opaque, androidSurfaceType,
72
+ // androidZOrderOnTop, highBitDepth), so it is resolved once per transaction
73
+ // rather than in each setter.
74
+ @Override
75
+ protected void onAfterUpdateTransaction(@NonNull ReactViewGroup view) {
76
+ super.onAfterUpdateTransaction(view);
77
+ ((SkiaView) view).updateView();
78
+ }
79
+
80
+ @Override
81
+ public void onDropViewInstance(@NonNull ReactViewGroup view) {
82
+ super.onDropViewInstance(view);
83
+ ((SkiaView) view).dropInstance();
84
+ }
85
+ }
@@ -1,5 +1,3 @@
1
- #ifdef SK_GRAPHITE
2
-
3
1
  #import <CoreGraphics/CoreGraphics.h>
4
2
  #import <Foundation/Foundation.h>
5
3
  #import <QuartzCore/CAMetalLayer.h>
@@ -10,20 +8,22 @@
10
8
 
11
9
  namespace RNSkia {
12
10
 
13
- // WebGPU canvas values are sRGB-encoded regardless of the texture format
14
- // (GPUCanvasConfiguration.colorSpace defaults to "srgb"), so the same shader
15
- // output must display identically on bgra8unorm and rgba16float surfaces.
16
- // Tagging the float layer as (gamma-encoded) extended sRGB matches the
17
- // browser behavior: identical colors, with the extra precision of float16.
11
+ // The surface holds gamma-encoded values in the gamut the view renders in
12
+ // (sRGB or Display P3, see DawnUtils::viewColorSpace) regardless of the
13
+ // texture format, so the same content must display identically on bgra8unorm
14
+ // and rgba16float surfaces. Tagging the float layer with the gamma-encoded
15
+ // extended colorspace of that gamut gives identical colors, with the extra
16
+ // precision of float16.
18
17
  void applyCAMetalLayerColorSpace(void *nativeSurface,
19
- wgpu::TextureFormat format) {
18
+ wgpu::TextureFormat format,
19
+ bool useP3ColorSpace) {
20
20
  CALayer *layer = (__bridge CALayer *)nativeSurface;
21
21
  if (![layer isKindOfClass:[CAMetalLayer class]]) {
22
22
  return;
23
23
  }
24
24
  auto metalLayer = static_cast<CAMetalLayer *>(layer);
25
- setCAMetalLayerColorSpace(metalLayer,
26
- format == wgpu::TextureFormat::RGBA16Float, false);
25
+ setCAMetalLayerColorSpace(
26
+ metalLayer, format == wgpu::TextureFormat::RGBA16Float, useP3ColorSpace);
27
27
  // The change must be set synchronously so the first present already sees
28
28
  // it, and it must reach the render server. On a non-main thread (RN JS or
29
29
  // worklet runtime) the property lands in that thread's implicit
@@ -35,5 +35,3 @@ void applyCAMetalLayerColorSpace(void *nativeSurface,
35
35
  }
36
36
 
37
37
  } // namespace RNSkia
38
-
39
- #endif // SK_GRAPHITE
@@ -32,28 +32,27 @@ public:
32
32
  // Create screenshot manager
33
33
  _screenshotService =
34
34
  [[ViewScreenshotService alloc] initWithViewRegistry:viewRegistry];
35
+ _prefersP3ColorSpace = mainScreenSupportsP3();
35
36
  }
36
37
 
37
38
  ~RNSkApplePlatformContext() = default;
38
39
 
40
+ /**
41
+ Whether the main screen has a wide color gamut (Display P3). The screen is
42
+ asked once and the answer is kept: RNSkiaModule asks first, on the main
43
+ queue it is created on, so that the context (created on the JS thread)
44
+ only reads the answer.
45
+ */
46
+ static bool mainScreenSupportsP3();
47
+
48
+ bool prefersP3ColorSpace() override { return _prefersP3ColorSpace; }
49
+
39
50
  void runOnMainThread(std::function<void()>) override;
40
51
 
41
52
  sk_sp<SkImage> takeScreenshotFromViewTag(size_t tag) override;
42
53
 
43
54
  sk_sp<SkImage> makeImageFromNativeBuffer(void *buffer) override;
44
55
 
45
- #if !defined(SK_GRAPHITE)
46
- GrDirectContext *getDirectContext() override;
47
-
48
- sk_sp<SkImage> makeImageFromNativeTexture(const TextureInfo &textureInfo,
49
- int width, int height,
50
- bool mipMapped) override;
51
-
52
- const TextureInfo getTexture(sk_sp<SkSurface> image) override;
53
-
54
- const TextureInfo getTexture(sk_sp<SkImage> image) override;
55
- #endif
56
-
57
56
  uint64_t makeNativeBuffer(sk_sp<SkImage> image) override;
58
57
 
59
58
  uint64_t makeTestNativeBuffer(int width, int height) override;
@@ -78,8 +77,7 @@ public:
78
77
 
79
78
  private:
80
79
  ViewScreenshotService *_screenshotService;
81
-
82
- SkColorType mtlPixelFormatToSkColorType(MTLPixelFormat pixelFormat);
80
+ bool _prefersP3ColorSpace = false;
83
81
  };
84
82
 
85
83
  } // namespace RNSkia
@@ -1,18 +1,13 @@
1
1
  #import "RNSkApplePlatformContext.h"
2
2
 
3
3
  #import <CoreMedia/CMSampleBuffer.h>
4
- #include <Metal/Metal.h>
5
4
  #import <React/RCTUtils.h>
6
5
  #include <algorithm>
7
6
  #include <set>
8
7
  #include <thread>
9
8
  #include <utility>
10
9
 
11
- #if defined(SK_GRAPHITE)
12
10
  #include "RNDawnContext.h"
13
- #else
14
- #include "MetalContext.h"
15
- #endif
16
11
  #include "RNSkAppleVideo.h"
17
12
 
18
13
  #pragma clang diagnostic push
@@ -83,15 +78,12 @@ void RNSkApplePlatformContext::releaseNativeBuffer(uint64_t pointer) {
83
78
  }
84
79
 
85
80
  uint64_t RNSkApplePlatformContext::makeNativeBuffer(sk_sp<SkImage> image) {
86
- #if defined(SK_GRAPHITE)
87
81
  // A Graphite GPU texture can't be read with readPixels(nullptr) (and can't be
88
- // drawn onto a raster surface) — both yield uninitialized/black pixels. Read
89
- // it back to a raster image first. (JsiNativeBuffer calls the Ganesh-only
90
- // SkImage::makeNonTextureImage(), which is a no-op on Graphite.)
82
+ // drawn onto a raster surface): both yield uninitialized/black pixels. Read
83
+ // it back to a raster image first.
91
84
  if (image && image->isTextureBacked()) {
92
85
  image = DawnContext::getInstance().MakeRasterImage(image);
93
86
  }
94
- #endif
95
87
  // 0. If Image is not in BGRA, convert to BGRA as only BGRA is supported.
96
88
  if (image->colorType() != kBGRA_8888_SkColorType) {
97
89
  const SkImageInfo bgraInfo =
@@ -241,67 +233,6 @@ uint64_t RNSkApplePlatformContext::makeTestNativeBuffer(int width, int height) {
241
233
  return reinterpret_cast<uint64_t>(pixelBuffer);
242
234
  }
243
235
 
244
- #if !defined(SK_GRAPHITE)
245
- GrDirectContext *RNSkApplePlatformContext::getDirectContext() {
246
- return MetalContext::getInstance().getDirectContext();
247
- }
248
-
249
- const TextureInfo RNSkApplePlatformContext::getTexture(sk_sp<SkImage> image) {
250
- TextureInfo result;
251
- GrBackendTexture texture;
252
- if (!SkImages::GetBackendTextureFromImage(image, &texture, true)) {
253
- throw std::runtime_error("Couldn't get backend texture");
254
- }
255
- if (!texture.isValid()) {
256
- throw std::runtime_error("Invalid backend texture");
257
- }
258
- GrMtlTextureInfo textureInfo;
259
- if (!GrBackendTextures::GetMtlTextureInfo(texture, &textureInfo)) {
260
- throw std::runtime_error("Couldn't get Metal texture info");
261
- }
262
- result.mtlTexture = textureInfo.fTexture.get();
263
- return result;
264
- }
265
-
266
- const TextureInfo
267
- RNSkApplePlatformContext::getTexture(sk_sp<SkSurface> surface) {
268
- TextureInfo result;
269
- GrBackendTexture texture = SkSurfaces::GetBackendTexture(
270
- surface.get(), SkSurfaces::BackendHandleAccess::kFlushRead);
271
- if (!texture.isValid()) {
272
- throw std::runtime_error("Invalid backend texture");
273
- }
274
- GrMtlTextureInfo textureInfo;
275
- if (!GrBackendTextures::GetMtlTextureInfo(texture, &textureInfo)) {
276
- throw std::runtime_error("Couldn't get Metal texture info");
277
- }
278
- result.mtlTexture = textureInfo.fTexture.get();
279
- return result;
280
- }
281
-
282
- sk_sp<SkImage> RNSkApplePlatformContext::makeImageFromNativeTexture(
283
- const TextureInfo &texInfo, int width, int height, bool mipMapped) {
284
- id<MTLTexture> mtlTexture = (__bridge id<MTLTexture>)(texInfo.mtlTexture);
285
-
286
- SkColorType colorType = mtlPixelFormatToSkColorType(mtlTexture.pixelFormat);
287
- if (colorType == SkColorType::kUnknown_SkColorType) {
288
- throw std::runtime_error("Unsupported pixelFormat");
289
- }
290
-
291
- GrMtlTextureInfo textureInfo;
292
- textureInfo.fTexture.retain((__bridge const void *)mtlTexture);
293
-
294
- GrBackendTexture texture = GrBackendTextures::MakeMtl(
295
- width, height, mipMapped ? skgpu::Mipmapped::kYes : skgpu::Mipmapped::kNo,
296
- textureInfo);
297
-
298
- return SkImages::BorrowTextureFrom(getDirectContext(), texture,
299
- kTopLeft_GrSurfaceOrigin, colorType,
300
- kPremul_SkAlphaType, nullptr);
301
- return nullptr;
302
- }
303
- #endif
304
-
305
236
  std::shared_ptr<RNSkVideo>
306
237
  RNSkApplePlatformContext::createVideo(const std::string &url) {
307
238
  return std::make_shared<RNSkAppleVideo>(url, this);
@@ -311,57 +242,33 @@ void RNSkApplePlatformContext::raiseError(const std::exception &err) {
311
242
  RCTFatal(RCTErrorWithMessage([NSString stringWithUTF8String:err.what()]));
312
243
  }
313
244
 
245
+ bool RNSkApplePlatformContext::mainScreenSupportsP3() {
246
+ static bool supportsP3 = false;
247
+ static dispatch_once_t onceToken;
248
+ dispatch_once(&onceToken, ^{
249
+ #if !TARGET_OS_OSX
250
+ supportsP3 =
251
+ [UIScreen mainScreen].traitCollection.displayGamut == UIDisplayGamutP3;
252
+ #else
253
+ NSColorSpace *screenColorSpace = [NSScreen mainScreen].colorSpace;
254
+ supportsP3 =
255
+ screenColorSpace != nil &&
256
+ [screenColorSpace isEqual:[NSColorSpace displayP3ColorSpace]];
257
+ #endif // !TARGET_OS_OSX
258
+ });
259
+ return supportsP3;
260
+ }
261
+
314
262
  sk_sp<SkSurface>
315
263
  RNSkApplePlatformContext::makeOffscreenSurface(int width, int height,
316
264
  bool useP3ColorSpace) {
317
- #if defined(SK_GRAPHITE)
318
265
  return DawnContext::getInstance().MakeOffscreen(width, height,
319
266
  useP3ColorSpace);
320
- #else
321
- return MetalContext::getInstance().MakeOffscreen(width, height,
322
- useP3ColorSpace);
323
- #endif
324
267
  }
325
268
 
326
269
  sk_sp<SkImage>
327
270
  RNSkApplePlatformContext::makeImageFromNativeBuffer(void *buffer) {
328
- #if defined(SK_GRAPHITE)
329
271
  return DawnContext::getInstance().MakeImageFromBuffer(buffer);
330
- #else
331
- return MetalContext::getInstance().MakeImageFromBuffer(buffer);
332
- #endif
333
- }
334
-
335
- SkColorType RNSkApplePlatformContext::mtlPixelFormatToSkColorType(
336
- MTLPixelFormat pixelFormat) {
337
- switch (pixelFormat) {
338
- case MTLPixelFormatRGBA8Unorm:
339
- return kRGBA_8888_SkColorType;
340
- case MTLPixelFormatBGRA8Unorm:
341
- return kBGRA_8888_SkColorType;
342
- case MTLPixelFormatRGB10A2Unorm:
343
- return kRGBA_1010102_SkColorType;
344
- case MTLPixelFormatR8Unorm:
345
- return kGray_8_SkColorType;
346
- case MTLPixelFormatRGBA16Float:
347
- return kRGBA_F16_SkColorType;
348
- case MTLPixelFormatRG8Unorm:
349
- return kR8G8_unorm_SkColorType;
350
- case MTLPixelFormatR16Float:
351
- return kA16_float_SkColorType;
352
- case MTLPixelFormatRG16Float:
353
- return kR16G16_float_SkColorType;
354
- case MTLPixelFormatR16Unorm:
355
- return kA16_unorm_SkColorType;
356
- case MTLPixelFormatRG16Unorm:
357
- return kR16G16_unorm_SkColorType;
358
- case MTLPixelFormatRGBA16Unorm:
359
- return kR16G16B16A16_unorm_SkColorType;
360
- case MTLPixelFormatRGBA8Unorm_sRGB:
361
- return kSRGBA_8888_SkColorType;
362
- default:
363
- return kUnknown_SkColorType;
364
- }
365
272
  }
366
273
 
367
274
  sk_sp<SkFontMgr> RNSkApplePlatformContext::createFontMgr() {
@@ -1,43 +1,39 @@
1
1
  #pragma once
2
2
 
3
+ #import "RNSkCanvasProvider.h"
3
4
  #import "RNSkPlatformContext.h"
4
- #import "RNSkView.h"
5
5
 
6
6
  #import <MetalKit/MetalKit.h>
7
7
  #import <QuartzCore/CAMetalLayer.h>
8
8
 
9
+ #include <memory>
9
10
  #include <mutex>
10
11
  #include <vector>
11
12
 
12
- #pragma clang diagnostic push
13
- #pragma clang diagnostic ignored "-Wdocumentation"
14
-
15
- #import <include/gpu/ganesh/GrDirectContext.h>
16
-
17
- #pragma clang diagnostic pop
18
-
13
+ /**
14
+ * The CAMetalLayer a SkiaView presents into. The layer is configured as a
15
+ * Dawn surface (see DawnWindowContext) when the view gets a size.
16
+ */
19
17
  class RNSkMetalCanvasProvider : public RNSkia::RNSkCanvasProvider {
20
18
  public:
21
- RNSkMetalCanvasProvider(std::function<void()> requestRedraw,
22
- std::shared_ptr<RNSkia::RNSkPlatformContext> context,
23
- bool useP3ColorSpace = true);
19
+ explicit RNSkMetalCanvasProvider(
20
+ std::shared_ptr<RNSkia::RNSkPlatformContext> context);
24
21
 
25
22
  ~RNSkMetalCanvasProvider();
26
23
 
27
24
  int getWidth() override;
28
25
  int getHeight() override;
29
26
 
30
- bool renderToCanvas(const std::function<void(SkCanvas *)> &cb) override;
27
+ bool getTargetInfo(RNSkia::RNSkGraphiteTargetInfo *info) override;
31
28
 
32
- #if defined(SK_GRAPHITE)
33
- bool getGraphiteTargetInfo(RNSkia::RNSkGraphiteTargetInfo *info) override;
29
+ bool getLayoutSize(int *width, int *height) override;
34
30
 
35
31
  bool presentRecordings(
36
32
  const std::vector<skgpu::graphite::Recording *> &recordings) override;
37
- #endif
33
+
34
+ bool presentImage(const sk_sp<SkImage> &image) override;
38
35
 
39
36
  void setSize(int width, int height);
40
- void setUseP3ColorSpace(bool useP3ColorSpace);
41
37
  void setHighBitDepth(bool highBitDepth);
42
38
  CALayer *getLayer();
43
39
 
@@ -48,13 +44,12 @@ private:
48
44
  #pragma clang diagnostic ignored "-Wunguarded-availability-new"
49
45
  CAMetalLayer *_layer;
50
46
  #pragma clang diagnostic pop
51
- bool _useP3ColorSpace = true;
52
47
  bool _highBitDepth = false;
53
- #if defined(SK_GRAPHITE)
54
48
  // A copy of the window's target description, readable from any thread
55
49
  // while the window itself belongs to the main thread.
56
50
  std::mutex _targetInfoMutex;
57
51
  RNSkia::RNSkGraphiteTargetInfo _targetInfo;
58
52
  bool _hasTargetInfo = false;
59
- #endif
53
+ int _layoutWidth = 0;
54
+ int _layoutHeight = 0;
60
55
  };