@shopify/react-native-skia 1.3.13 → 1.4.0

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 (361) hide show
  1. package/android/CMakeLists.txt +9 -4
  2. package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +6 -0
  3. package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.cpp +81 -0
  4. package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.h +40 -0
  5. package/cpp/api/JsiSkApi.h +2 -0
  6. package/cpp/api/JsiSkPath.h +29 -19
  7. package/cpp/api/JsiSkRuntimeEffect.h +7 -0
  8. package/cpp/api/JsiSkiaContext.h +79 -0
  9. package/cpp/rnskia/RNSkPlatformContext.h +4 -0
  10. package/cpp/rnskia/SkiaContext.h +22 -0
  11. package/cpp/skia/include/android/GrAHardwareBufferUtils.h +2 -2
  12. package/cpp/skia/include/android/SkImageAndroid.h +1 -1
  13. package/cpp/skia/include/android/SkSurfaceAndroid.h +1 -1
  14. package/cpp/skia/include/codec/SkAndroidCodec.h +13 -9
  15. package/cpp/skia/include/codec/SkCodec.h +28 -5
  16. package/cpp/skia/include/core/SkArc.h +69 -0
  17. package/cpp/skia/include/core/SkBitmap.h +10 -0
  18. package/cpp/skia/include/core/SkBlender.h +2 -3
  19. package/cpp/skia/include/core/SkCanvas.h +86 -16
  20. package/cpp/skia/include/core/SkCapabilities.h +0 -4
  21. package/cpp/skia/include/core/SkColorFilter.h +4 -4
  22. package/cpp/skia/include/core/SkColorPriv.h +5 -7
  23. package/cpp/skia/include/core/SkColorType.h +2 -0
  24. package/cpp/skia/include/core/SkFlattenable.h +1 -1
  25. package/cpp/skia/include/core/SkFontArguments.h +3 -1
  26. package/cpp/skia/include/core/SkFontParameters.h +3 -2
  27. package/cpp/skia/include/core/SkFourByteTag.h +19 -0
  28. package/cpp/skia/include/core/SkImage.h +41 -1
  29. package/cpp/skia/include/core/SkImageGenerator.h +0 -5
  30. package/cpp/skia/include/core/SkImageInfo.h +20 -0
  31. package/cpp/skia/include/core/SkM44.h +1 -1
  32. package/cpp/skia/include/core/SkMatrix.h +2 -1
  33. package/cpp/skia/include/core/SkMilestone.h +1 -1
  34. package/cpp/skia/include/core/SkPaint.h +1 -1
  35. package/cpp/skia/include/core/SkPath.h +20 -6
  36. package/cpp/skia/include/core/SkPathMeasure.h +1 -0
  37. package/cpp/skia/include/core/SkPicture.h +5 -5
  38. package/cpp/skia/include/core/SkPoint3.h +2 -12
  39. package/cpp/skia/include/core/SkRRect.h +5 -0
  40. package/cpp/skia/include/core/SkRect.h +5 -16
  41. package/cpp/skia/include/core/SkRefCnt.h +2 -0
  42. package/cpp/skia/include/core/SkScalar.h +20 -32
  43. package/cpp/skia/include/core/SkShader.h +17 -0
  44. package/cpp/skia/include/core/SkSize.h +2 -1
  45. package/cpp/skia/include/core/SkStream.h +2 -3
  46. package/cpp/skia/include/core/SkStrokeRec.h +6 -1
  47. package/cpp/skia/include/core/SkSurface.h +13 -4
  48. package/cpp/skia/include/core/SkSurfaceProps.h +5 -0
  49. package/cpp/skia/include/core/SkSwizzle.h +3 -1
  50. package/cpp/skia/include/core/SkTypeface.h +1 -0
  51. package/cpp/skia/include/core/SkTypes.h +1 -19
  52. package/cpp/skia/include/core/SkUnPreMultiply.h +4 -5
  53. package/cpp/skia/include/core/SkVertices.h +4 -2
  54. package/cpp/skia/include/docs/SkPDFDocument.h +11 -14
  55. package/cpp/skia/include/effects/SkHighContrastFilter.h +6 -6
  56. package/cpp/skia/include/effects/SkImageFilters.h +49 -23
  57. package/cpp/skia/include/effects/SkRuntimeEffect.h +51 -70
  58. package/cpp/skia/include/effects/SkShaderMaskFilter.h +2 -0
  59. package/cpp/skia/include/effects/SkTableMaskFilter.h +2 -0
  60. package/cpp/skia/include/gpu/GrBackendSemaphore.h +2 -120
  61. package/cpp/skia/include/gpu/GrBackendSurface.h +2 -466
  62. package/cpp/skia/include/gpu/GrContextOptions.h +2 -368
  63. package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +2 -179
  64. package/cpp/skia/include/gpu/GrDirectContext.h +2 -1011
  65. package/cpp/skia/include/gpu/GrDriverBugWorkarounds.h +2 -47
  66. package/cpp/skia/include/gpu/GrDriverBugWorkaroundsAutogen.h +2 -41
  67. package/cpp/skia/include/gpu/GrRecordingContext.h +2 -279
  68. package/cpp/skia/include/gpu/GrTypes.h +2 -238
  69. package/cpp/skia/include/gpu/GrYUVABackendTextures.h +2 -118
  70. package/cpp/skia/include/gpu/d3d/GrD3DBackendContext.h +2 -29
  71. package/cpp/skia/include/gpu/d3d/GrD3DTypes.h +2 -242
  72. package/cpp/skia/include/gpu/ganesh/GrBackendSemaphore.h +80 -0
  73. package/cpp/skia/include/gpu/ganesh/GrBackendSurface.h +412 -0
  74. package/cpp/skia/include/gpu/ganesh/GrContextOptions.h +386 -0
  75. package/cpp/skia/include/gpu/ganesh/GrContextThreadSafeProxy.h +175 -0
  76. package/cpp/skia/include/gpu/ganesh/GrDirectContext.h +993 -0
  77. package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkarounds.h +53 -0
  78. package/cpp/skia/include/gpu/ganesh/GrDriverBugWorkaroundsAutogen.h +45 -0
  79. package/cpp/skia/include/gpu/ganesh/GrExternalTextureGenerator.h +1 -1
  80. package/cpp/skia/include/gpu/ganesh/GrRecordingContext.h +285 -0
  81. package/cpp/skia/include/gpu/ganesh/GrTypes.h +177 -0
  82. package/cpp/skia/include/gpu/ganesh/GrYUVABackendTextures.h +130 -0
  83. package/cpp/skia/include/gpu/ganesh/SkImageGanesh.h +1 -1
  84. package/cpp/skia/include/gpu/ganesh/SkSurfaceGanesh.h +1 -1
  85. package/cpp/skia/include/gpu/ganesh/d3d/GrD3DBackendContext.h +35 -0
  86. package/cpp/skia/include/gpu/ganesh/d3d/GrD3DTypes.h +248 -0
  87. package/cpp/skia/include/gpu/ganesh/gl/GrGLAssembleHelpers.h +17 -0
  88. package/cpp/skia/include/gpu/ganesh/gl/GrGLAssembleInterface.h +45 -0
  89. package/cpp/skia/include/gpu/ganesh/gl/GrGLBackendSurface.h +1 -1
  90. package/cpp/skia/include/gpu/ganesh/gl/GrGLConfig.h +69 -0
  91. package/cpp/skia/include/gpu/ganesh/gl/GrGLExtensions.h +79 -0
  92. package/cpp/skia/include/gpu/ganesh/gl/GrGLFunctions.h +306 -0
  93. package/cpp/skia/include/gpu/ganesh/gl/GrGLInterface.h +338 -0
  94. package/cpp/skia/include/gpu/ganesh/gl/GrGLMakeWebGLInterface.h +19 -0
  95. package/cpp/skia/include/gpu/ganesh/gl/GrGLTypes.h +219 -0
  96. package/cpp/skia/include/gpu/{gl → ganesh/gl}/egl/GrGLMakeEGLInterface.h +2 -2
  97. package/cpp/skia/include/gpu/ganesh/gl/epoxy/GrGLMakeEpoxyEGLInterface.h +20 -0
  98. package/cpp/skia/include/gpu/ganesh/gl/ios/GrGLMakeIOSInterface.h +20 -0
  99. package/cpp/skia/include/gpu/ganesh/gl/mac/GrGLMakeMacInterface.h +20 -0
  100. package/cpp/skia/include/gpu/ganesh/gl/win/GrGLMakeWinInterface.h +20 -0
  101. package/cpp/skia/include/gpu/ganesh/mock/GrMockTypes.h +166 -0
  102. package/cpp/skia/include/gpu/{mtl → ganesh/mtl}/GrMtlBackendContext.h +2 -2
  103. package/cpp/skia/include/gpu/ganesh/mtl/GrMtlBackendSemaphore.h +23 -0
  104. package/cpp/skia/include/gpu/ganesh/mtl/GrMtlBackendSurface.h +44 -0
  105. package/cpp/skia/include/gpu/ganesh/mtl/GrMtlDirectContext.h +30 -0
  106. package/cpp/skia/include/gpu/{mtl → ganesh/mtl}/GrMtlTypes.h +1 -3
  107. package/cpp/skia/include/gpu/ganesh/mtl/SkSurfaceMetal.h +2 -2
  108. package/cpp/skia/include/gpu/ganesh/vk/GrBackendDrawableInfo.h +2 -2
  109. package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSemaphore.h +1 -1
  110. package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSurface.h +7 -3
  111. package/cpp/skia/include/gpu/ganesh/vk/GrVkDirectContext.h +6 -3
  112. package/cpp/skia/include/gpu/ganesh/vk/GrVkTypes.h +101 -0
  113. package/cpp/skia/include/gpu/gl/GrGLAssembleHelpers.h +2 -9
  114. package/cpp/skia/include/gpu/gl/GrGLAssembleInterface.h +2 -38
  115. package/cpp/skia/include/gpu/gl/GrGLConfig.h +2 -73
  116. package/cpp/skia/include/gpu/gl/GrGLExtensions.h +2 -72
  117. package/cpp/skia/include/gpu/gl/GrGLFunctions.h +2 -301
  118. package/cpp/skia/include/gpu/gl/GrGLInterface.h +2 -332
  119. package/cpp/skia/include/gpu/gl/GrGLTypes.h +2 -213
  120. package/cpp/skia/include/gpu/graphite/BackendSemaphore.h +20 -41
  121. package/cpp/skia/include/gpu/graphite/BackendTexture.h +18 -118
  122. package/cpp/skia/include/gpu/graphite/Context.h +122 -44
  123. package/cpp/skia/include/gpu/graphite/ContextOptions.h +30 -3
  124. package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +45 -17
  125. package/cpp/skia/include/gpu/graphite/Image.h +56 -54
  126. package/cpp/skia/include/gpu/graphite/Recorder.h +68 -14
  127. package/cpp/skia/include/gpu/graphite/Recording.h +3 -3
  128. package/cpp/skia/include/gpu/graphite/Surface.h +6 -2
  129. package/cpp/skia/include/gpu/graphite/TextureInfo.h +36 -117
  130. package/cpp/skia/include/gpu/graphite/dawn/DawnTypes.h +108 -6
  131. package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +4 -1
  132. package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteTypes.h +41 -25
  133. package/cpp/skia/include/gpu/graphite/precompile/PaintOptions.h +197 -0
  134. package/cpp/skia/include/gpu/graphite/precompile/Precompile.h +48 -0
  135. package/cpp/skia/include/gpu/graphite/precompile/PrecompileBase.h +84 -0
  136. package/cpp/skia/include/gpu/graphite/precompile/PrecompileBlender.h +56 -0
  137. package/cpp/skia/include/gpu/graphite/precompile/PrecompileColorFilter.h +85 -0
  138. package/cpp/skia/include/gpu/graphite/precompile/PrecompileImageFilter.h +119 -0
  139. package/cpp/skia/include/gpu/graphite/precompile/PrecompileMaskFilter.h +51 -0
  140. package/cpp/skia/include/gpu/graphite/precompile/PrecompileRuntimeEffect.h +47 -0
  141. package/cpp/skia/include/gpu/graphite/precompile/PrecompileShader.h +170 -0
  142. package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +24 -2
  143. package/cpp/skia/include/gpu/mock/GrMockTypes.h +2 -157
  144. package/cpp/skia/include/gpu/mtl/MtlMemoryAllocator.h +2 -0
  145. package/cpp/skia/include/gpu/vk/GrVkTypes.h +2 -101
  146. package/cpp/skia/include/gpu/vk/VulkanBackendContext.h +13 -8
  147. package/cpp/skia/include/gpu/vk/VulkanExtensions.h +9 -3
  148. package/cpp/skia/include/gpu/vk/VulkanMemoryAllocator.h +4 -1
  149. package/cpp/skia/include/gpu/vk/VulkanTypes.h +25 -8
  150. package/cpp/skia/include/ports/SkFontMgr_Fontations.h +20 -0
  151. package/cpp/skia/include/ports/SkFontMgr_android.h +7 -0
  152. package/cpp/skia/include/ports/SkImageGeneratorCG.h +3 -1
  153. package/cpp/skia/include/ports/SkTypeface_win.h +0 -17
  154. package/cpp/skia/include/private/SkEncodedInfo.h +8 -2
  155. package/cpp/skia/include/private/SkExif.h +28 -75
  156. package/cpp/skia/include/private/SkGainmapInfo.h +47 -7
  157. package/cpp/skia/include/private/SkJpegMetadataDecoder.h +12 -0
  158. package/cpp/skia/include/private/SkPathRef.h +52 -44
  159. package/cpp/skia/include/private/SkXmp.h +13 -4
  160. package/cpp/skia/include/private/base/SkASAN.h +56 -0
  161. package/cpp/skia/include/private/base/SkAlign.h +5 -0
  162. package/cpp/skia/include/private/base/SkContainers.h +10 -2
  163. package/cpp/skia/include/private/base/SkFeatures.h +22 -1
  164. package/cpp/skia/include/private/base/SkFloatingPoint.h +51 -65
  165. package/cpp/skia/include/private/base/SkMacros.h +67 -0
  166. package/cpp/skia/include/private/base/SkMalloc.h +8 -0
  167. package/cpp/skia/include/private/base/SkPoint_impl.h +2 -11
  168. package/cpp/skia/include/private/base/SkTArray.h +108 -23
  169. package/cpp/skia/include/private/base/SkTFitsIn.h +1 -12
  170. package/cpp/skia/include/private/chromium/GrDeferredDisplayList.h +1 -1
  171. package/cpp/skia/include/private/chromium/GrDeferredDisplayListRecorder.h +0 -39
  172. package/cpp/skia/include/private/chromium/GrPromiseImageTexture.h +1 -1
  173. package/cpp/skia/include/private/chromium/GrSurfaceCharacterization.h +3 -3
  174. package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +1 -4
  175. package/cpp/skia/include/private/chromium/Slug.h +5 -11
  176. package/cpp/skia/include/private/gpu/ganesh/GrContext_Base.h +1 -1
  177. package/cpp/skia/include/private/gpu/ganesh/GrD3DTypesMinimal.h +2 -2
  178. package/cpp/skia/include/private/gpu/ganesh/GrTextureGenerator.h +1 -1
  179. package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +21 -93
  180. package/cpp/skia/include/private/gpu/vk/SkiaVulkan.h +2 -2
  181. package/cpp/skia/include/utils/SkCustomTypeface.h +1 -0
  182. package/cpp/skia/include/utils/SkNWayCanvas.h +1 -1
  183. package/cpp/skia/include/utils/SkParse.h +0 -1
  184. package/cpp/skia/modules/skcms/src/Transform_inl.h +59 -56
  185. package/cpp/skia/modules/skcms/src/skcms_Transform.h +3 -0
  186. package/cpp/skia/modules/skcms/src/skcms_internals.h +2 -0
  187. package/cpp/skia/modules/skcms/src/skcms_public.h +46 -14
  188. package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +15 -1
  189. package/cpp/skia/modules/skparagraph/include/TextStyle.h +2 -2
  190. package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +2 -4
  191. package/cpp/skia/modules/skresources/include/SkResources.h +1 -1
  192. package/cpp/skia/modules/skshaper/include/SkShaper.h +316 -0
  193. package/cpp/skia/modules/skshaper/include/SkShaper_coretext.h +19 -0
  194. package/cpp/skia/modules/skshaper/include/SkShaper_factory.h +41 -0
  195. package/cpp/skia/modules/skshaper/include/SkShaper_harfbuzz.h +39 -0
  196. package/cpp/skia/modules/skshaper/include/SkShaper_skunicode.h +28 -0
  197. package/cpp/skia/modules/skunicode/include/SkUnicode.h +6 -23
  198. package/cpp/skia/modules/svg/include/SkSVGAttribute.h +0 -3
  199. package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +12 -2
  200. package/cpp/skia/modules/svg/include/SkSVGCircle.h +13 -0
  201. package/cpp/skia/modules/svg/include/SkSVGClipPath.h +6 -0
  202. package/cpp/skia/modules/svg/include/SkSVGContainer.h +17 -1
  203. package/cpp/skia/modules/svg/include/SkSVGDOM.h +25 -15
  204. package/cpp/skia/modules/svg/include/SkSVGEllipse.h +13 -2
  205. package/cpp/skia/modules/svg/include/SkSVGFe.h +11 -2
  206. package/cpp/skia/modules/svg/include/SkSVGFeBlend.h +9 -0
  207. package/cpp/skia/modules/svg/include/SkSVGFeColorMatrix.h +9 -0
  208. package/cpp/skia/modules/svg/include/SkSVGFeComponentTransfer.h +82 -0
  209. package/cpp/skia/modules/svg/include/SkSVGFeComposite.h +10 -1
  210. package/cpp/skia/modules/svg/include/SkSVGFeDisplacementMap.h +10 -0
  211. package/cpp/skia/modules/svg/include/SkSVGFeFlood.h +10 -0
  212. package/cpp/skia/modules/svg/include/SkSVGFeGaussianBlur.h +9 -0
  213. package/cpp/skia/modules/svg/include/SkSVGFeImage.h +9 -0
  214. package/cpp/skia/modules/svg/include/SkSVGFeLightSource.h +5 -0
  215. package/cpp/skia/modules/svg/include/SkSVGFeLighting.h +11 -0
  216. package/cpp/skia/modules/svg/include/SkSVGFeMerge.h +63 -0
  217. package/cpp/skia/modules/svg/include/SkSVGFeMorphology.h +8 -0
  218. package/cpp/skia/modules/svg/include/SkSVGFeOffset.h +9 -0
  219. package/cpp/skia/modules/svg/include/SkSVGFeTurbulence.h +9 -0
  220. package/cpp/skia/modules/svg/include/SkSVGFilter.h +9 -0
  221. package/cpp/skia/modules/svg/include/SkSVGFilterContext.h +3 -3
  222. package/cpp/skia/modules/svg/include/SkSVGGradient.h +10 -2
  223. package/cpp/skia/modules/svg/include/SkSVGImage.h +9 -0
  224. package/cpp/skia/modules/svg/include/SkSVGLine.h +11 -0
  225. package/cpp/skia/modules/svg/include/SkSVGLinearGradient.h +10 -0
  226. package/cpp/skia/modules/svg/include/SkSVGMask.h +6 -0
  227. package/cpp/skia/modules/svg/include/SkSVGNode.h +13 -2
  228. package/cpp/skia/modules/svg/include/SkSVGOpenTypeSVGDecoder.h +5 -0
  229. package/cpp/skia/modules/svg/include/SkSVGPath.h +10 -0
  230. package/cpp/skia/modules/svg/include/SkSVGPattern.h +5 -0
  231. package/cpp/skia/modules/svg/include/SkSVGPoly.h +11 -0
  232. package/cpp/skia/modules/svg/include/SkSVGRadialGradient.h +11 -0
  233. package/cpp/skia/modules/svg/include/SkSVGRect.h +11 -0
  234. package/cpp/skia/modules/svg/include/SkSVGRenderContext.h +43 -7
  235. package/cpp/skia/modules/svg/include/SkSVGSVG.h +7 -0
  236. package/cpp/skia/modules/svg/include/SkSVGShape.h +8 -2
  237. package/cpp/skia/modules/svg/include/SkSVGStop.h +5 -3
  238. package/cpp/skia/modules/svg/include/SkSVGText.h +8 -2
  239. package/cpp/skia/modules/svg/include/SkSVGTransformableNode.h +8 -0
  240. package/cpp/skia/modules/svg/include/SkSVGTypes.h +9 -0
  241. package/cpp/skia/modules/svg/include/SkSVGUse.h +7 -0
  242. package/cpp/skia/src/base/SkMathPriv.h +337 -0
  243. package/cpp/skia/src/base/SkTLazy.h +208 -0
  244. package/cpp/skia/src/core/SkTHash.h +58 -7
  245. package/cpp/skia/src/gpu/ganesh/gl/GrGLDefines.h +3 -0
  246. package/ios/RNSkia-iOS/RNSkiOSPlatformContext.h +3 -0
  247. package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +7 -0
  248. package/ios/RNSkia-iOS/SkiaCVPixelBufferUtils.mm +7 -2
  249. package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.h +78 -0
  250. package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.mm +20 -4
  251. package/lib/commonjs/renderer/HostConfig.js.map +1 -1
  252. package/lib/commonjs/skia/types/Paragraph/TextStyle.d.ts +2 -2
  253. package/lib/commonjs/skia/types/Paragraph/TextStyle.js.map +1 -1
  254. package/lib/commonjs/skia/types/Skia.d.ts +6 -1
  255. package/lib/commonjs/skia/types/Skia.js.map +1 -1
  256. package/lib/commonjs/skia/web/JsiSkia.js +4 -1
  257. package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
  258. package/lib/commonjs/web/WithSkiaWeb.d.ts +11 -4
  259. package/lib/commonjs/web/WithSkiaWeb.js +3 -2
  260. package/lib/commonjs/web/WithSkiaWeb.js.map +1 -1
  261. package/lib/module/renderer/HostConfig.js.map +1 -1
  262. package/lib/module/skia/types/Paragraph/TextStyle.d.ts +2 -2
  263. package/lib/module/skia/types/Paragraph/TextStyle.js.map +1 -1
  264. package/lib/module/skia/types/Skia.d.ts +6 -1
  265. package/lib/module/skia/types/Skia.js.map +1 -1
  266. package/lib/module/skia/web/JsiSkia.js +4 -1
  267. package/lib/module/skia/web/JsiSkia.js.map +1 -1
  268. package/lib/module/web/WithSkiaWeb.d.ts +11 -4
  269. package/lib/module/web/WithSkiaWeb.js +3 -2
  270. package/lib/module/web/WithSkiaWeb.js.map +1 -1
  271. package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +1 -0
  272. package/lib/typescript/lib/commonjs/web/WithSkiaWeb.d.ts +2 -1
  273. package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -0
  274. package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +1 -0
  275. package/lib/typescript/lib/module/web/WithSkiaWeb.d.ts +2 -1
  276. package/lib/typescript/src/skia/types/Paragraph/TextStyle.d.ts +2 -2
  277. package/lib/typescript/src/skia/types/Skia.d.ts +6 -1
  278. package/lib/typescript/src/web/WithSkiaWeb.d.ts +11 -4
  279. package/libs/android/arm64-v8a/libskia.a +0 -0
  280. package/libs/android/arm64-v8a/libskottie.a +0 -0
  281. package/libs/android/arm64-v8a/libskparagraph.a +0 -0
  282. package/libs/android/arm64-v8a/libsksg.a +0 -0
  283. package/libs/android/arm64-v8a/libskshaper.a +0 -0
  284. package/libs/android/arm64-v8a/libskunicode_core.a +0 -0
  285. package/libs/android/arm64-v8a/libskunicode_icu.a +0 -0
  286. package/libs/android/arm64-v8a/libsvg.a +0 -0
  287. package/libs/android/armeabi-v7a/libskia.a +0 -0
  288. package/libs/android/armeabi-v7a/libskottie.a +0 -0
  289. package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
  290. package/libs/android/armeabi-v7a/libsksg.a +0 -0
  291. package/libs/android/armeabi-v7a/libskshaper.a +0 -0
  292. package/libs/android/armeabi-v7a/libskunicode_core.a +0 -0
  293. package/libs/android/armeabi-v7a/libskunicode_icu.a +0 -0
  294. package/libs/android/armeabi-v7a/libsvg.a +0 -0
  295. package/libs/android/x86/libskia.a +0 -0
  296. package/libs/android/x86/libskottie.a +0 -0
  297. package/libs/android/x86/libskparagraph.a +0 -0
  298. package/libs/android/x86/libsksg.a +0 -0
  299. package/libs/android/x86/libskshaper.a +0 -0
  300. package/libs/android/x86/libskunicode_core.a +0 -0
  301. package/libs/android/x86/libskunicode_icu.a +0 -0
  302. package/libs/android/x86/libsvg.a +0 -0
  303. package/libs/android/x86_64/libskia.a +0 -0
  304. package/libs/android/x86_64/libskottie.a +0 -0
  305. package/libs/android/x86_64/libskparagraph.a +0 -0
  306. package/libs/android/x86_64/libsksg.a +0 -0
  307. package/libs/android/x86_64/libskshaper.a +0 -0
  308. package/libs/android/x86_64/libskunicode_core.a +0 -0
  309. package/libs/android/x86_64/libskunicode_icu.a +0 -0
  310. package/libs/android/x86_64/libsvg.a +0 -0
  311. package/libs/ios/libskia.xcframework/Info.plist +5 -5
  312. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  313. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  314. package/libs/ios/libskottie.xcframework/Info.plist +5 -5
  315. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  316. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  317. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  318. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  319. package/libs/ios/libsksg.xcframework/Info.plist +5 -5
  320. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  321. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  322. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  323. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  324. package/libs/ios/libsvg.xcframework/Info.plist +5 -5
  325. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  326. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  327. package/package.json +3 -5
  328. package/react-native-skia.podspec +2 -1
  329. package/src/renderer/HostConfig.ts +5 -1
  330. package/src/renderer/__tests__/e2e/ImageFilters.spec.tsx +5 -2
  331. package/src/renderer/__tests__/e2e/Paths.spec.tsx +12 -5
  332. package/src/renderer/__tests__/e2e/SDF.spec.tsx +1 -1
  333. package/src/renderer/__tests__/e2e/Snapshot.spec.tsx +1 -1
  334. package/src/skia/types/Paragraph/TextStyle.ts +2 -2
  335. package/src/skia/types/Skia.ts +7 -1
  336. package/src/skia/web/JsiSkia.ts +3 -0
  337. package/src/web/WithSkiaWeb.tsx +17 -6
  338. package/cpp/skia/include/core/SkDrawLooper.h +0 -135
  339. package/cpp/skia/include/effects/SkBlurDrawLooper.h +0 -26
  340. package/cpp/skia/include/effects/SkLayerDrawLooper.h +0 -161
  341. package/cpp/skia/include/gpu/gl/GrGLConfig_chrome.h +0 -14
  342. package/cpp/skia/include/gpu/vk/GrVkBackendContext.h +0 -84
  343. package/cpp/skia/include/gpu/vk/GrVkExtensions.h +0 -15
  344. package/cpp/skia/include/gpu/vk/GrVkMemoryAllocator.h +0 -15
  345. package/cpp/skia/include/ports/SkFontMgr_indirect.h +0 -102
  346. package/cpp/skia/include/ports/SkRemotableFontMgr.h +0 -139
  347. package/cpp/skia/include/private/base/SkFloatBits.h +0 -90
  348. package/cpp/skia/include/private/gpu/graphite/ContextOptionsPriv.h +0 -69
  349. package/cpp/skia/include/private/gpu/graphite/DawnTypesPriv.h +0 -54
  350. package/cpp/skia/include/private/gpu/graphite/MtlGraphiteTypesPriv.h +0 -95
  351. package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +0 -83
  352. package/cpp/skia/src/core/SkPathEnums.h +0 -25
  353. package/cpp/skia/src/core/SkPathPriv.h +0 -540
  354. package/libs/android/arm64-v8a/libskunicode.a +0 -0
  355. package/libs/android/armeabi-v7a/libskunicode.a +0 -0
  356. package/libs/android/x86/libskunicode.a +0 -0
  357. package/libs/android/x86_64/libskunicode.a +0 -0
  358. package/libs/ios/libskunicode.xcframework/Info.plist +0 -46
  359. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
  360. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
  361. /package/cpp/skia/include/gpu/{gl → ganesh/gl}/glx/GrGLMakeGLXInterface.h +0 -0
@@ -0,0 +1,337 @@
1
+ /*
2
+ * Copyright 2012 Google Inc.
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+
8
+ #ifndef SkMathPriv_DEFINED
9
+ #define SkMathPriv_DEFINED
10
+
11
+ #include "include/private/base/SkAssert.h"
12
+ #include "include/private/base/SkCPUTypes.h"
13
+ #include "include/private/base/SkTemplates.h"
14
+
15
+ #include <cstddef>
16
+ #include <cstdint>
17
+
18
+ /**
19
+ * Return the integer square root of value, with a bias of bitBias
20
+ */
21
+ int32_t SkSqrtBits(int32_t value, int bitBias);
22
+
23
+ /** Return the integer square root of n, treated as a SkFixed (16.16)
24
+ */
25
+ static inline int32_t SkSqrt32(int32_t n) { return SkSqrtBits(n, 15); }
26
+
27
+ /**
28
+ * Returns (value < 0 ? 0 : value) efficiently (i.e. no compares or branches)
29
+ */
30
+ static inline int SkClampPos(int value) {
31
+ return value & ~(value >> 31);
32
+ }
33
+
34
+ /**
35
+ * Stores numer/denom and numer%denom into div and mod respectively.
36
+ */
37
+ template <typename In, typename Out>
38
+ inline void SkTDivMod(In numer, In denom, Out* div, Out* mod) {
39
+ *div = static_cast<Out>(numer/denom);
40
+ *mod = static_cast<Out>(numer%denom);
41
+ }
42
+
43
+ /** Returns -1 if n < 0, else returns 0
44
+ */
45
+ #define SkExtractSign(n) ((int32_t)(n) >> 31)
46
+
47
+ /** If sign == -1, returns -n, else sign must be 0, and returns n.
48
+ Typically used in conjunction with SkExtractSign().
49
+ */
50
+ static inline int32_t SkApplySign(int32_t n, int32_t sign) {
51
+ SkASSERT(sign == 0 || sign == -1);
52
+ return (n ^ sign) - sign;
53
+ }
54
+
55
+ /** Return x with the sign of y */
56
+ static inline int32_t SkCopySign32(int32_t x, int32_t y) {
57
+ return SkApplySign(x, SkExtractSign(x ^ y));
58
+ }
59
+
60
+ /** Given a positive value and a positive max, return the value
61
+ pinned against max.
62
+ Note: only works as long as max - value doesn't wrap around
63
+ @return max if value >= max, else value
64
+ */
65
+ static inline unsigned SkClampUMax(unsigned value, unsigned max) {
66
+ if (value > max) {
67
+ value = max;
68
+ }
69
+ return value;
70
+ }
71
+
72
+ // If a signed int holds min_int (e.g. 0x80000000) it is undefined what happens when
73
+ // we negate it (even though we *know* we're 2's complement and we'll get the same
74
+ // value back). So we create this helper function that casts to size_t (unsigned) first,
75
+ // to avoid the complaint.
76
+ static inline size_t sk_negate_to_size_t(int32_t value) {
77
+ #if defined(_MSC_VER)
78
+ #pragma warning(push)
79
+ #pragma warning(disable : 4146) // Thanks MSVC, we know what we're negating an unsigned
80
+ #endif
81
+ return -static_cast<size_t>(value);
82
+ #if defined(_MSC_VER)
83
+ #pragma warning(pop)
84
+ #endif
85
+ }
86
+
87
+ ///////////////////////////////////////////////////////////////////////////////
88
+
89
+ /** Return a*b/255, truncating away any fractional bits. Only valid if both
90
+ a and b are 0..255
91
+ */
92
+ static inline U8CPU SkMulDiv255Trunc(U8CPU a, U8CPU b) {
93
+ SkASSERT((uint8_t)a == a);
94
+ SkASSERT((uint8_t)b == b);
95
+ unsigned prod = a*b + 1;
96
+ return (prod + (prod >> 8)) >> 8;
97
+ }
98
+
99
+ /** Return (a*b)/255, taking the ceiling of any fractional bits. Only valid if
100
+ both a and b are 0..255. The expected result equals (a * b + 254) / 255.
101
+ */
102
+ static inline U8CPU SkMulDiv255Ceiling(U8CPU a, U8CPU b) {
103
+ SkASSERT((uint8_t)a == a);
104
+ SkASSERT((uint8_t)b == b);
105
+ unsigned prod = a*b + 255;
106
+ return (prod + (prod >> 8)) >> 8;
107
+ }
108
+
109
+ /** Just the rounding step in SkDiv255Round: round(value / 255)
110
+ */
111
+ static inline unsigned SkDiv255Round(unsigned prod) {
112
+ prod += 128;
113
+ return (prod + (prod >> 8)) >> 8;
114
+ }
115
+
116
+ /**
117
+ * Swap byte order of a 4-byte value, e.g. 0xaarrggbb -> 0xbbggrraa.
118
+ */
119
+ #if defined(_MSC_VER)
120
+ #include <stdlib.h>
121
+ static inline uint32_t SkBSwap32(uint32_t v) { return _byteswap_ulong(v); }
122
+ #else
123
+ static inline uint32_t SkBSwap32(uint32_t v) { return __builtin_bswap32(v); }
124
+ #endif
125
+
126
+ /*
127
+ * Return the number of set bits (i.e., the population count) in the provided uint32_t.
128
+ */
129
+ int SkPopCount_portable(uint32_t n);
130
+
131
+ #if defined(__GNUC__) || defined(__clang__)
132
+ static inline int SkPopCount(uint32_t n) {
133
+ return __builtin_popcount(n);
134
+ }
135
+ #else
136
+ static inline int SkPopCount(uint32_t n) {
137
+ return SkPopCount_portable(n);
138
+ }
139
+ #endif
140
+
141
+ /*
142
+ * Return the 0-based index of the nth bit set in target
143
+ * Returns 32 if there is no nth bit set.
144
+ */
145
+ int SkNthSet(uint32_t target, int n);
146
+
147
+ //! Returns the number of leading zero bits (0...32)
148
+ // From Hacker's Delight 2nd Edition
149
+ constexpr int SkCLZ_portable(uint32_t x) {
150
+ int n = 32;
151
+ uint32_t y = x >> 16; if (y != 0) {n -= 16; x = y;}
152
+ y = x >> 8; if (y != 0) {n -= 8; x = y;}
153
+ y = x >> 4; if (y != 0) {n -= 4; x = y;}
154
+ y = x >> 2; if (y != 0) {n -= 2; x = y;}
155
+ y = x >> 1; if (y != 0) {return n - 2;}
156
+ return n - static_cast<int>(x);
157
+ }
158
+
159
+ static_assert(32 == SkCLZ_portable(0));
160
+ static_assert(31 == SkCLZ_portable(1));
161
+ static_assert( 1 == SkCLZ_portable(1 << 30));
162
+ static_assert( 1 == SkCLZ_portable((1 << 30) | (1 << 24) | 1));
163
+ static_assert( 0 == SkCLZ_portable(~0U));
164
+
165
+ #if defined(SK_BUILD_FOR_WIN)
166
+ #include <intrin.h>
167
+
168
+ static inline int SkCLZ(uint32_t mask) {
169
+ if (mask) {
170
+ unsigned long index = 0;
171
+ _BitScanReverse(&index, mask);
172
+ // Suppress this bogus /analyze warning. The check for non-zero
173
+ // guarantees that _BitScanReverse will succeed.
174
+ #pragma warning(push)
175
+ #pragma warning(suppress : 6102) // Using 'index' from failed function call
176
+ return static_cast<int>(index ^ 0x1F);
177
+ #pragma warning(pop)
178
+ } else {
179
+ return 32;
180
+ }
181
+ }
182
+ #elif defined(SK_CPU_ARM32) || defined(__GNUC__) || defined(__clang__)
183
+ static inline int SkCLZ(uint32_t mask) {
184
+ // __builtin_clz(0) is undefined, so we have to detect that case.
185
+ return mask ? __builtin_clz(mask) : 32;
186
+ }
187
+ #else
188
+ static inline int SkCLZ(uint32_t mask) {
189
+ return SkCLZ_portable(mask);
190
+ }
191
+ #endif
192
+
193
+ //! Returns the number of trailing zero bits (0...32)
194
+ // From Hacker's Delight 2nd Edition
195
+ constexpr int SkCTZ_portable(uint32_t x) {
196
+ return 32 - SkCLZ_portable(~x & (x - 1));
197
+ }
198
+
199
+ static_assert(32 == SkCTZ_portable(0));
200
+ static_assert( 0 == SkCTZ_portable(1));
201
+ static_assert(30 == SkCTZ_portable(1 << 30));
202
+ static_assert( 2 == SkCTZ_portable((1 << 30) | (1 << 24) | (1 << 2)));
203
+ static_assert( 0 == SkCTZ_portable(~0U));
204
+
205
+ #if defined(SK_BUILD_FOR_WIN)
206
+ #include <intrin.h>
207
+
208
+ static inline int SkCTZ(uint32_t mask) {
209
+ if (mask) {
210
+ unsigned long index = 0;
211
+ _BitScanForward(&index, mask);
212
+ // Suppress this bogus /analyze warning. The check for non-zero
213
+ // guarantees that _BitScanReverse will succeed.
214
+ #pragma warning(push)
215
+ #pragma warning(suppress : 6102) // Using 'index' from failed function call
216
+ return static_cast<int>(index);
217
+ #pragma warning(pop)
218
+ } else {
219
+ return 32;
220
+ }
221
+ }
222
+ #elif defined(SK_CPU_ARM32) || defined(__GNUC__) || defined(__clang__)
223
+ static inline int SkCTZ(uint32_t mask) {
224
+ // __builtin_ctz(0) is undefined, so we have to detect that case.
225
+ return mask ? __builtin_ctz(mask) : 32;
226
+ }
227
+ #else
228
+ static inline int SkCTZ(uint32_t mask) {
229
+ return SkCTZ_portable(mask);
230
+ }
231
+ #endif
232
+
233
+ /**
234
+ * Returns the log2 of the specified value, were that value to be rounded up
235
+ * to the next power of 2. It is undefined to pass 0. Examples:
236
+ * SkNextLog2(1) -> 0
237
+ * SkNextLog2(2) -> 1
238
+ * SkNextLog2(3) -> 2
239
+ * SkNextLog2(4) -> 2
240
+ * SkNextLog2(5) -> 3
241
+ */
242
+ static inline int SkNextLog2(uint32_t value) {
243
+ SkASSERT(value != 0);
244
+ return 32 - SkCLZ(value - 1);
245
+ }
246
+
247
+ constexpr int SkNextLog2_portable(uint32_t value) {
248
+ SkASSERT(value != 0);
249
+ return 32 - SkCLZ_portable(value - 1);
250
+ }
251
+
252
+ /**
253
+ * Returns the log2 of the specified value, were that value to be rounded down
254
+ * to the previous power of 2. It is undefined to pass 0. Examples:
255
+ * SkPrevLog2(1) -> 0
256
+ * SkPrevLog2(2) -> 1
257
+ * SkPrevLog2(3) -> 1
258
+ * SkPrevLog2(4) -> 2
259
+ * SkPrevLog2(5) -> 2
260
+ */
261
+ static inline int SkPrevLog2(uint32_t value) {
262
+ SkASSERT(value != 0);
263
+ return 32 - SkCLZ(value >> 1);
264
+ }
265
+
266
+ constexpr int SkPrevLog2_portable(uint32_t value) {
267
+ SkASSERT(value != 0);
268
+ return 32 - SkCLZ_portable(value >> 1);
269
+ }
270
+
271
+ /**
272
+ * Returns the smallest power-of-2 that is >= the specified value. If value
273
+ * is already a power of 2, then it is returned unchanged. It is undefined
274
+ * if value is <= 0.
275
+ */
276
+ static inline int SkNextPow2(int value) {
277
+ SkASSERT(value > 0);
278
+ return 1 << SkNextLog2(static_cast<uint32_t>(value));
279
+ }
280
+
281
+ constexpr int SkNextPow2_portable(int value) {
282
+ SkASSERT(value > 0);
283
+ return 1 << SkNextLog2_portable(static_cast<uint32_t>(value));
284
+ }
285
+
286
+ /**
287
+ * Returns the largest power-of-2 that is <= the specified value. If value
288
+ * is already a power of 2, then it is returned unchanged. It is undefined
289
+ * if value is <= 0.
290
+ */
291
+ static inline int SkPrevPow2(int value) {
292
+ SkASSERT(value > 0);
293
+ return 1 << SkPrevLog2(static_cast<uint32_t>(value));
294
+ }
295
+
296
+ constexpr int SkPrevPow2_portable(int value) {
297
+ SkASSERT(value > 0);
298
+ return 1 << SkPrevLog2_portable(static_cast<uint32_t>(value));
299
+ }
300
+
301
+ ///////////////////////////////////////////////////////////////////////////////
302
+
303
+ /**
304
+ * Return the smallest power-of-2 >= n.
305
+ */
306
+ static inline uint32_t GrNextPow2(uint32_t n) {
307
+ return n ? (1 << (32 - SkCLZ(n - 1))) : 1;
308
+ }
309
+
310
+ /**
311
+ * Returns the next power of 2 >= n or n if the next power of 2 can't be represented by size_t.
312
+ */
313
+ static inline size_t GrNextSizePow2(size_t n) {
314
+ constexpr int kNumSizeTBits = 8 * sizeof(size_t);
315
+ constexpr size_t kHighBitSet = size_t(1) << (kNumSizeTBits - 1);
316
+
317
+ if (!n) {
318
+ return 1;
319
+ } else if (n >= kHighBitSet) {
320
+ return n;
321
+ }
322
+
323
+ n--;
324
+ uint32_t shift = 1;
325
+ while (shift < kNumSizeTBits) {
326
+ n |= n >> shift;
327
+ shift <<= 1;
328
+ }
329
+ return n + 1;
330
+ }
331
+
332
+ // conservative check. will return false for very large values that "could" fit
333
+ template <typename T> static inline bool SkFitsInFixed(T x) {
334
+ return SkTAbs(x) <= 32767.0f;
335
+ }
336
+
337
+ #endif
@@ -0,0 +1,208 @@
1
+ /*
2
+ * Copyright 2011 Google Inc.
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+
8
+ #ifndef SkTLazy_DEFINED
9
+ #define SkTLazy_DEFINED
10
+
11
+ #include "include/private/base/SkAssert.h"
12
+
13
+ #include <optional>
14
+ #include <utility>
15
+
16
+ /**
17
+ * Efficient way to defer allocating/initializing a class until it is needed
18
+ * (if ever).
19
+ */
20
+ template <typename T> class SkTLazy {
21
+ public:
22
+ SkTLazy() = default;
23
+ explicit SkTLazy(const T* src) : fValue(src ? std::optional<T>(*src) : std::nullopt) {}
24
+ SkTLazy(const SkTLazy& that) : fValue(that.fValue) {}
25
+ SkTLazy(SkTLazy&& that) : fValue(std::move(that.fValue)) {}
26
+
27
+ ~SkTLazy() = default;
28
+
29
+ SkTLazy& operator=(const SkTLazy& that) {
30
+ fValue = that.fValue;
31
+ return *this;
32
+ }
33
+
34
+ SkTLazy& operator=(SkTLazy&& that) {
35
+ fValue = std::move(that.fValue);
36
+ return *this;
37
+ }
38
+
39
+ /**
40
+ * Return a pointer to an instance of the class initialized with 'args'.
41
+ * If a previous instance had been initialized (either from init() or
42
+ * set()) it will first be destroyed, so that a freshly initialized
43
+ * instance is always returned.
44
+ */
45
+ template <typename... Args> T* init(Args&&... args) {
46
+ fValue.emplace(std::forward<Args>(args)...);
47
+ return this->get();
48
+ }
49
+
50
+ /**
51
+ * Copy src into this, and return a pointer to a copy of it. Note this
52
+ * will always return the same pointer, so if it is called on a lazy that
53
+ * has already been initialized, then this will copy over the previous
54
+ * contents.
55
+ */
56
+ T* set(const T& src) {
57
+ fValue = src;
58
+ return this->get();
59
+ }
60
+
61
+ T* set(T&& src) {
62
+ fValue = std::move(src);
63
+ return this->get();
64
+ }
65
+
66
+ /**
67
+ * Destroy the lazy object (if it was created via init() or set())
68
+ */
69
+ void reset() {
70
+ fValue.reset();
71
+ }
72
+
73
+ /**
74
+ * Returns true if a valid object has been initialized in the SkTLazy,
75
+ * false otherwise.
76
+ */
77
+ bool isValid() const { return fValue.has_value(); }
78
+
79
+ /**
80
+ * Returns the object. This version should only be called when the caller
81
+ * knows that the object has been initialized.
82
+ */
83
+ T* get() {
84
+ SkASSERT(fValue.has_value());
85
+ return &fValue.value();
86
+ }
87
+ const T* get() const {
88
+ SkASSERT(fValue.has_value());
89
+ return &fValue.value();
90
+ }
91
+
92
+ T* operator->() { return this->get(); }
93
+ const T* operator->() const { return this->get(); }
94
+
95
+ T& operator*() {
96
+ SkASSERT(fValue.has_value());
97
+ return *fValue;
98
+ }
99
+ const T& operator*() const {
100
+ SkASSERT(fValue.has_value());
101
+ return *fValue;
102
+ }
103
+
104
+ /**
105
+ * Like above but doesn't assert if object isn't initialized (in which case
106
+ * nullptr is returned).
107
+ */
108
+ const T* getMaybeNull() const { return fValue.has_value() ? this->get() : nullptr; }
109
+ T* getMaybeNull() { return fValue.has_value() ? this->get() : nullptr; }
110
+
111
+ private:
112
+ std::optional<T> fValue;
113
+ };
114
+
115
+ /**
116
+ * A helper built on top of std::optional to do copy-on-first-write. The object is initialized
117
+ * with a const pointer but provides a non-const pointer accessor. The first time the
118
+ * accessor is called (if ever) the object is cloned.
119
+ *
120
+ * In the following example at most one copy of constThing is made:
121
+ *
122
+ * SkTCopyOnFirstWrite<Thing> thing(&constThing);
123
+ * ...
124
+ * function_that_takes_a_const_thing_ptr(thing); // constThing is passed
125
+ * ...
126
+ * if (need_to_modify_thing()) {
127
+ * thing.writable()->modifyMe(); // makes a copy of constThing
128
+ * }
129
+ * ...
130
+ * x = thing->readSomething();
131
+ * ...
132
+ * if (need_to_modify_thing_now()) {
133
+ * thing.writable()->changeMe(); // makes a copy of constThing if we didn't call modifyMe()
134
+ * }
135
+ *
136
+ * consume_a_thing(thing); // could be constThing or a modified copy.
137
+ */
138
+ template <typename T>
139
+ class SkTCopyOnFirstWrite {
140
+ public:
141
+ explicit SkTCopyOnFirstWrite(const T& initial) : fObj(&initial) {}
142
+
143
+ explicit SkTCopyOnFirstWrite(const T* initial) : fObj(initial) {}
144
+
145
+ // Constructor for delayed initialization.
146
+ SkTCopyOnFirstWrite() : fObj(nullptr) {}
147
+
148
+ SkTCopyOnFirstWrite(const SkTCopyOnFirstWrite& that) { *this = that; }
149
+ SkTCopyOnFirstWrite( SkTCopyOnFirstWrite&& that) { *this = std::move(that); }
150
+
151
+ SkTCopyOnFirstWrite& operator=(const SkTCopyOnFirstWrite& that) {
152
+ fLazy = that.fLazy;
153
+ fObj = fLazy.has_value() ? &fLazy.value() : that.fObj;
154
+ return *this;
155
+ }
156
+
157
+ SkTCopyOnFirstWrite& operator=(SkTCopyOnFirstWrite&& that) {
158
+ fLazy = std::move(that.fLazy);
159
+ fObj = fLazy.has_value() ? &fLazy.value() : that.fObj;
160
+ return *this;
161
+ }
162
+
163
+ // Should only be called once, and only if the default constructor was used.
164
+ void init(const T& initial) {
165
+ SkASSERT(!fObj);
166
+ SkASSERT(!fLazy.has_value());
167
+ fObj = &initial;
168
+ }
169
+
170
+ // If not already initialized, in-place instantiates the writable object
171
+ template <typename... Args>
172
+ void initIfNeeded(Args&&... args) {
173
+ if (!fObj) {
174
+ SkASSERT(!fLazy.has_value());
175
+ fObj = &fLazy.emplace(std::forward<Args>(args)...);
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Returns a writable T*. The first time this is called the initial object is cloned.
181
+ */
182
+ T* writable() {
183
+ SkASSERT(fObj);
184
+ if (!fLazy.has_value()) {
185
+ fLazy = *fObj;
186
+ fObj = &fLazy.value();
187
+ }
188
+ return &fLazy.value();
189
+ }
190
+
191
+ const T* get() const { return fObj; }
192
+
193
+ /**
194
+ * Operators for treating this as though it were a const pointer.
195
+ */
196
+
197
+ const T *operator->() const { return fObj; }
198
+
199
+ operator const T*() const { return fObj; }
200
+
201
+ const T& operator *() const { return *fObj; }
202
+
203
+ private:
204
+ const T* fObj;
205
+ std::optional<T> fLazy;
206
+ };
207
+
208
+ #endif
@@ -9,6 +9,7 @@
9
9
  #define SkTHash_DEFINED
10
10
 
11
11
  #include "include/core/SkTypes.h"
12
+ #include "src/base/SkMathPriv.h"
12
13
  #include "src/core/SkChecksum.h"
13
14
 
14
15
  #include <initializer_list>
@@ -73,6 +74,17 @@ public:
73
74
  // Approximately how many bytes of memory do we use beyond sizeof(*this)?
74
75
  size_t approxBytesUsed() const { return fCapacity * sizeof(Slot); }
75
76
 
77
+ // Exchange two hash tables.
78
+ void swap(THashTable& that) {
79
+ std::swap(fCount, that.fCount);
80
+ std::swap(fCapacity, that.fCapacity);
81
+ std::swap(fSlots, that.fSlots);
82
+ }
83
+
84
+ void swap(THashTable&& that) {
85
+ *this = std::move(that);
86
+ }
87
+
76
88
  // !!!!!!!!!!!!!!!!! CAUTION !!!!!!!!!!!!!!!!!
77
89
  // set(), find() and foreach() all allow mutable access to table entries.
78
90
  // If you change an entry so that it no longer has the same key, all hell
@@ -130,11 +142,11 @@ public:
130
142
  return false;
131
143
  }
132
144
  if (hash == s.fHash && key == Traits::GetKey(*s)) {
133
- this->removeSlot(index);
134
- if (4 * fCount <= fCapacity && fCapacity > 4) {
135
- this->resize(fCapacity / 2);
136
- }
137
- return true;
145
+ this->removeSlot(index);
146
+ if (4 * fCount <= fCapacity && fCapacity > 4) {
147
+ this->resize(fCapacity / 2);
148
+ }
149
+ return true;
138
150
  }
139
151
  index = this->next(index);
140
152
  }
@@ -150,7 +162,12 @@ public:
150
162
  // Hash tables will automatically resize themselves when set() and remove() are called, but
151
163
  // resize() can be called to manually grow capacity before a bulk insertion.
152
164
  void resize(int capacity) {
165
+ // We must have enough capacity to hold every key.
153
166
  SkASSERT(capacity >= fCount);
167
+ // `capacity` must be a power of two, because we use `hash & (capacity-1)` to look up keys
168
+ // in the table (since this is faster than a modulo).
169
+ SkASSERT((capacity & (capacity - 1)) == 0);
170
+
154
171
  int oldCapacity = fCapacity;
155
172
  SkDEBUGCODE(int oldCount = fCount);
156
173
 
@@ -168,6 +185,22 @@ public:
168
185
  SkASSERT(fCount == oldCount);
169
186
  }
170
187
 
188
+ // Reserve extra capacity. This only grows capacity; requests to shrink are ignored.
189
+ // We assume that the passed-in value represents the number of items that the caller wants to
190
+ // store in the table. The passed-in value is adjusted to honor the following rules:
191
+ // - Hash tables must have a power-of-two capacity.
192
+ // - Hash tables grow when they exceed 3/4 capacity, not when they are full.
193
+ void reserve(int n) {
194
+ int newCapacity = SkNextPow2(n);
195
+ if (n * 4 > newCapacity * 3) {
196
+ newCapacity *= 2;
197
+ }
198
+
199
+ if (newCapacity > fCapacity) {
200
+ this->resize(newCapacity);
201
+ }
202
+ }
203
+
171
204
  // Call fn on every entry in the table. You may mutate the entries, but be very careful.
172
205
  template <typename Fn> // f(T*)
173
206
  void foreach(Fn&& fn) {
@@ -447,7 +480,9 @@ public:
447
480
  };
448
481
 
449
482
  THashMap(std::initializer_list<Pair> pairs) {
450
- fTable.resize(pairs.size() * 5 / 3);
483
+ int capacity = pairs.size() >= 4 ? SkNextPow2(pairs.size() * 4 / 3)
484
+ : 4;
485
+ fTable.resize(capacity);
451
486
  for (const Pair& p : pairs) {
452
487
  fTable.set(p);
453
488
  }
@@ -465,6 +500,13 @@ public:
465
500
  // Approximately how many bytes of memory do we use beyond sizeof(*this)?
466
501
  size_t approxBytesUsed() const { return fTable.approxBytesUsed(); }
467
502
 
503
+ // Reserve extra capacity.
504
+ void reserve(int n) { fTable.reserve(n); }
505
+
506
+ // Exchange two hash maps.
507
+ void swap(THashMap& that) { fTable.swap(that.fTable); }
508
+ void swap(THashMap&& that) { fTable.swap(std::move(that.fTable)); }
509
+
468
510
  // N.B. The pointers returned by set() and find() are valid only until the next call to set().
469
511
 
470
512
  // Set key to val in the table, replacing any previous value with the same key.
@@ -551,7 +593,9 @@ public:
551
593
 
552
594
  // Construct with an initializer list of Ts.
553
595
  THashSet(std::initializer_list<T> vals) {
554
- fTable.resize(vals.size() * 5 / 3);
596
+ int capacity = vals.size() >= 4 ? SkNextPow2(vals.size() * 4 / 3)
597
+ : 4;
598
+ fTable.resize(capacity);
555
599
  for (const T& val : vals) {
556
600
  fTable.set(val);
557
601
  }
@@ -569,6 +613,13 @@ public:
569
613
  // Approximately how many bytes of memory do we use beyond sizeof(*this)?
570
614
  size_t approxBytesUsed() const { return fTable.approxBytesUsed(); }
571
615
 
616
+ // Reserve extra capacity.
617
+ void reserve(int n) { fTable.reserve(n); }
618
+
619
+ // Exchange two hash sets.
620
+ void swap(THashSet& that) { fTable.swap(that.fTable); }
621
+ void swap(THashSet&& that) { fTable.swap(std::move(that.fTable)); }
622
+
572
623
  // Copy an item into the set.
573
624
  void add(T item) { fTable.set(std::move(item)); }
574
625
 
@@ -1155,4 +1155,7 @@
1155
1155
  #define GR_UNMASKED_VENDOR_WEBGL 0x9245
1156
1156
  #define GR_UNMASKED_RENDERER_WEBGL 0x9246
1157
1157
 
1158
+ /* GL_ANGLE_client_arrays */
1159
+ #define GR_GL_CLIENT_ARRAYS_ANGLE 0x93AA
1160
+
1158
1161
  #endif
@@ -67,6 +67,9 @@ public:
67
67
 
68
68
  std::shared_ptr<RNSkVideo> createVideo(const std::string &url) override;
69
69
 
70
+ std::shared_ptr<SkiaContext>
71
+ makeContextFromNativeSurface(void *surface, int width, int height) override;
72
+
70
73
  virtual void performStreamOperation(
71
74
  const std::string &sourceUri,
72
75
  const std::function<void(std::unique_ptr<SkStreamAsset>)> &op) override;
@@ -149,6 +149,13 @@ RNSkiOSPlatformContext::createVideo(const std::string &url) {
149
149
  return std::make_shared<RNSkiOSVideo>(url, this);
150
150
  }
151
151
 
152
+ std::shared_ptr<SkiaContext>
153
+ RNSkiOSPlatformContext::makeContextFromNativeSurface(void *surface, int width,
154
+ int height) {
155
+ return SkiaMetalSurfaceFactory::makeContext((__bridge CALayer *)surface,
156
+ width, height);
157
+ }
158
+
152
159
  void RNSkiOSPlatformContext::raiseError(const std::exception &err) {
153
160
  RCTFatal(RCTErrorWithMessage([NSString stringWithUTF8String:err.what()]));
154
161
  }