@shopify/react-native-skia 0.1.234 → 0.1.237
Sign up to get free protection for your applications and to get access to all the features.
- package/cpp/api/JsiSkApi.h +2 -0
- package/cpp/api/JsiSkCanvas.h +36 -0
- package/cpp/api/JsiSkRSXform.h +35 -7
- package/cpp/api/JsiSkTypefaceFactory.h +2 -1
- package/cpp/rnskia/dom/JsiDomApi.h +2 -0
- package/cpp/rnskia/dom/nodes/JsiAtlasNode.h +60 -0
- package/cpp/rnskia/dom/props/RSXformProp.h +52 -0
- package/cpp/rnskia/dom/props/RectProp.h +31 -0
- package/cpp/skia/include/android/AHardwareBufferUtils.h +23 -0
- package/cpp/skia/include/android/GrAHardwareBufferUtils.h +2 -0
- package/cpp/skia/include/android/graphite/SurfaceAndroid.h +59 -0
- package/cpp/skia/include/codec/SkAvifDecoder.h +1 -1
- package/cpp/skia/include/codec/SkBmpDecoder.h +1 -1
- package/cpp/skia/include/codec/SkCodec.h +21 -3
- package/cpp/skia/include/codec/SkGifDecoder.h +1 -1
- package/cpp/skia/include/codec/SkIcoDecoder.h +1 -1
- package/cpp/skia/include/codec/SkJpegDecoder.h +1 -1
- package/cpp/skia/include/codec/SkJpegxlDecoder.h +1 -1
- package/cpp/skia/include/codec/SkPngDecoder.h +1 -1
- package/cpp/skia/include/codec/SkRawDecoder.h +1 -1
- package/cpp/skia/include/codec/SkWbmpDecoder.h +1 -1
- package/cpp/skia/include/codec/SkWebpDecoder.h +1 -1
- package/cpp/skia/include/config/SkUserConfig.h +3 -1
- package/cpp/skia/include/core/SkCanvas.h +66 -37
- package/cpp/skia/include/core/SkColorFilter.h +5 -2
- package/cpp/skia/include/core/SkContourMeasure.h +1 -0
- package/cpp/skia/include/core/SkDocument.h +1 -0
- package/cpp/skia/include/core/SkFont.h +14 -24
- package/cpp/skia/include/core/SkFontArguments.h +1 -1
- package/cpp/skia/include/core/SkFontMetrics.h +1 -1
- package/cpp/skia/include/core/SkFontMgr.h +0 -7
- package/cpp/skia/include/core/SkGraphics.h +13 -0
- package/cpp/skia/include/core/SkMesh.h +9 -13
- package/cpp/skia/include/core/SkMilestone.h +1 -1
- package/cpp/skia/include/core/SkPathMeasure.h +2 -0
- package/cpp/skia/include/core/SkSerialProcs.h +29 -11
- package/cpp/skia/include/core/SkSize.h +3 -3
- package/cpp/skia/include/core/SkStream.h +3 -13
- package/cpp/skia/include/core/SkSurface.h +6 -3
- package/cpp/skia/include/core/SkSurfaceProps.h +2 -4
- package/cpp/skia/include/core/SkTraceMemoryDump.h +15 -0
- package/cpp/skia/include/core/SkTypeface.h +8 -56
- package/cpp/skia/include/core/SkTypes.h +8 -0
- package/cpp/skia/include/core/SkVertices.h +1 -1
- package/cpp/skia/include/docs/SkMultiPictureDocument.h +53 -0
- package/cpp/skia/include/docs/SkPDFDocument.h +11 -0
- package/cpp/skia/include/effects/SkGradientShader.h +9 -0
- package/cpp/skia/include/effects/SkRuntimeEffect.h +3 -7
- package/cpp/skia/include/gpu/GrBackendSemaphore.h +33 -47
- package/cpp/skia/include/gpu/GrBackendSurface.h +2 -3
- package/cpp/skia/include/gpu/GrContextOptions.h +0 -6
- package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +44 -28
- package/cpp/skia/include/gpu/GrDirectContext.h +12 -31
- package/cpp/skia/include/gpu/GrTypes.h +1 -16
- package/cpp/skia/include/gpu/MutableTextureState.h +35 -80
- package/cpp/skia/include/gpu/ShaderErrorHandler.h +11 -1
- package/cpp/skia/include/gpu/ganesh/SkImageGanesh.h +2 -2
- package/cpp/skia/include/gpu/ganesh/SkSurfaceGanesh.h +1 -1
- package/cpp/skia/include/gpu/ganesh/gl/GrGLDirectContext.h +3 -2
- package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSemaphore.h +20 -0
- package/cpp/skia/include/gpu/ganesh/vk/GrVkDirectContext.h +30 -0
- package/cpp/skia/include/gpu/gl/GrGLFunctions.h +1 -1
- package/cpp/skia/include/gpu/gl/GrGLInterface.h +2 -0
- package/cpp/skia/include/gpu/gl/glx/GrGLMakeGLXInterface.h +6 -0
- package/cpp/skia/include/gpu/graphite/BackendSemaphore.h +3 -3
- package/cpp/skia/include/gpu/graphite/BackendTexture.h +39 -27
- package/cpp/skia/include/gpu/graphite/Context.h +39 -13
- package/cpp/skia/include/gpu/graphite/ContextOptions.h +2 -0
- package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +2 -1
- package/cpp/skia/include/gpu/graphite/Image.h +106 -87
- package/cpp/skia/include/gpu/graphite/Recorder.h +24 -3
- package/cpp/skia/include/gpu/graphite/Surface.h +7 -2
- package/cpp/skia/include/gpu/graphite/dawn/DawnBackendContext.h +41 -2
- package/cpp/skia/include/gpu/graphite/dawn/DawnTypes.h +11 -6
- package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteTypes.h +1 -2
- package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +6 -6
- package/cpp/skia/include/gpu/mock/GrMockTypes.h +1 -0
- package/cpp/skia/include/gpu/vk/GrVkBackendContext.h +1 -1
- package/cpp/skia/include/gpu/vk/GrVkTypes.h +1 -44
- package/cpp/skia/include/gpu/vk/VulkanExtensions.h +1 -1
- package/cpp/skia/include/gpu/vk/VulkanMutableTextureState.h +25 -0
- package/cpp/skia/include/gpu/vk/VulkanTypes.h +44 -0
- package/cpp/skia/include/ports/SkFontConfigInterface.h +3 -6
- package/cpp/skia/include/private/SkEncodedInfo.h +5 -0
- package/cpp/skia/include/private/SkExif.h +102 -0
- package/cpp/skia/include/private/SkGainmapInfo.h +11 -1
- package/cpp/skia/include/private/base/SkAssert.h +16 -0
- package/cpp/skia/include/private/base/SkDeque.h +2 -7
- package/cpp/skia/include/private/base/SkLoadUserConfig.h +1 -1
- package/cpp/skia/include/private/base/SkTArray.h +69 -28
- package/cpp/skia/include/private/base/SkThreadAnnotations.h +18 -5
- package/cpp/skia/include/private/chromium/GrSurfaceCharacterization.h +26 -30
- package/cpp/skia/include/private/chromium/GrVkSecondaryCBDrawContext.h +4 -3
- package/cpp/skia/include/private/chromium/SkImageChromium.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +8 -6
- package/cpp/skia/include/private/gpu/graphite/ContextOptionsPriv.h +29 -0
- package/cpp/skia/include/private/gpu/graphite/DawnTypesPriv.h +12 -9
- package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +16 -11
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_platform.h +2 -2
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h264std.h +312 -0
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h264std_decode.h +77 -0
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h265std.h +446 -0
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codec_h265std_decode.h +67 -0
- package/cpp/skia/include/third_party/vulkan/vulkan/vk_video/vulkan_video_codecs_common.h +36 -0
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan.h +9 -2
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_android.h +31 -3
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_core.h +10624 -5716
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_ios.h +2 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_macos.h +2 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_win32.h +28 -1
- package/cpp/skia/include/third_party/vulkan/vulkan/vulkan_xcb.h +2 -1
- package/cpp/skia/include/utils/mac/SkCGUtils.h +23 -11
- package/cpp/skia/modules/skcms/skcms.h +2 -410
- package/cpp/skia/modules/skcms/src/Transform_inl.h +831 -704
- package/cpp/skia/modules/skcms/src/skcms_Transform.h +161 -0
- package/cpp/skia/modules/skcms/src/skcms_internals.h +136 -0
- package/cpp/skia/modules/skcms/src/skcms_public.h +404 -0
- package/cpp/skia/modules/skparagraph/include/FontArguments.h +1 -1
- package/cpp/skia/modules/skparagraph/include/FontCollection.h +2 -0
- package/cpp/skia/modules/skparagraph/include/Paragraph.h +2 -2
- package/cpp/skia/modules/skparagraph/include/TextStyle.h +4 -3
- package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +1 -3
- package/cpp/skia/modules/skresources/include/SkResources.h +28 -17
- package/cpp/skia/modules/skunicode/include/SkUnicode.h +12 -0
- package/cpp/skia/modules/svg/include/SkSVGDOM.h +4 -1
- package/cpp/skia/modules/svg/include/SkSVGRenderContext.h +4 -1
- package/cpp/skia/src/base/SkUTF.h +7 -0
- package/cpp/skia/src/core/SkTHash.h +20 -8
- package/lib/commonjs/dom/nodes/JsiSkDOM.d.ts +5 -3
- package/lib/commonjs/dom/nodes/JsiSkDOM.js +60 -57
- package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +1 -1
- package/lib/commonjs/dom/nodes/drawings/AtlasNode.d.ts +8 -0
- package/lib/commonjs/dom/nodes/drawings/AtlasNode.js +47 -0
- package/lib/commonjs/dom/nodes/drawings/AtlasNode.js.map +1 -0
- package/lib/commonjs/dom/nodes/drawings/index.d.ts +1 -0
- package/lib/commonjs/dom/nodes/drawings/index.js +13 -0
- package/lib/commonjs/dom/nodes/drawings/index.js.map +1 -1
- package/lib/commonjs/dom/types/Drawings.d.ts +7 -1
- package/lib/commonjs/dom/types/Drawings.js.map +1 -1
- package/lib/commonjs/dom/types/NodeType.d.ts +1 -0
- package/lib/commonjs/dom/types/NodeType.js +1 -0
- package/lib/commonjs/dom/types/NodeType.js.map +1 -1
- package/lib/commonjs/dom/types/SkDOM.d.ts +2 -1
- package/lib/commonjs/dom/types/SkDOM.js.map +1 -1
- package/lib/commonjs/external/reanimated/buffers.d.ts +5 -0
- package/lib/commonjs/external/reanimated/buffers.js +48 -0
- package/lib/commonjs/external/reanimated/buffers.js.map +1 -0
- package/lib/commonjs/external/reanimated/index.d.ts +2 -0
- package/lib/commonjs/external/reanimated/index.js +26 -0
- package/lib/commonjs/external/reanimated/index.js.map +1 -1
- package/lib/commonjs/external/reanimated/interpolators.js +13 -1
- package/lib/commonjs/external/reanimated/interpolators.js.map +1 -1
- package/lib/commonjs/external/reanimated/moduleWrapper.d.ts +1 -0
- package/lib/commonjs/external/reanimated/moduleWrapper.js +5 -3
- package/lib/commonjs/external/reanimated/moduleWrapper.js.map +1 -1
- package/lib/commonjs/external/reanimated/textures.d.ts +5 -0
- package/lib/commonjs/external/reanimated/textures.js +38 -0
- package/lib/commonjs/external/reanimated/textures.js.map +1 -0
- package/lib/commonjs/external/reanimated/useAnimatedImageValue.js +8 -1
- package/lib/commonjs/external/reanimated/useAnimatedImageValue.js.map +1 -1
- package/lib/commonjs/headless/index.js +1 -1
- package/lib/commonjs/headless/index.js.map +1 -1
- package/lib/commonjs/mock/index.js +8 -0
- package/lib/commonjs/mock/index.js.map +1 -1
- package/lib/commonjs/renderer/Canvas.js +1 -1
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/renderer/Container.d.ts +1 -1
- package/lib/commonjs/renderer/Container.js +2 -1
- package/lib/commonjs/renderer/Container.js.map +1 -1
- package/lib/commonjs/renderer/HostComponents.d.ts +3 -1
- package/lib/commonjs/renderer/HostComponents.js +3 -0
- package/lib/commonjs/renderer/HostComponents.js.map +1 -1
- package/lib/commonjs/renderer/Offscreen.d.ts +4 -1
- package/lib/commonjs/renderer/Offscreen.js +28 -10
- package/lib/commonjs/renderer/Offscreen.js.map +1 -1
- package/lib/commonjs/renderer/Reconciler.d.ts +1 -1
- package/lib/commonjs/renderer/Reconciler.js +7 -4
- package/lib/commonjs/renderer/Reconciler.js.map +1 -1
- package/lib/commonjs/renderer/components/shapes/Atlas.d.ts +4 -0
- package/lib/commonjs/renderer/components/shapes/Atlas.js +17 -0
- package/lib/commonjs/renderer/components/shapes/Atlas.js.map +1 -0
- package/lib/commonjs/renderer/components/shapes/index.d.ts +1 -0
- package/lib/commonjs/renderer/components/shapes/index.js +13 -0
- package/lib/commonjs/renderer/components/shapes/index.js.map +1 -1
- package/lib/commonjs/skia/core/AnimatedImage.d.ts +1 -1
- package/lib/commonjs/skia/core/AnimatedImage.js +4 -1
- package/lib/commonjs/skia/core/AnimatedImage.js.map +1 -1
- package/lib/commonjs/skia/core/Data.d.ts +1 -1
- package/lib/commonjs/skia/core/Data.js +11 -4
- package/lib/commonjs/skia/core/Data.js.map +1 -1
- package/lib/commonjs/skia/core/Rect.d.ts +2 -2
- package/lib/commonjs/skia/types/Canvas.d.ts +16 -1
- package/lib/commonjs/skia/types/Canvas.js.map +1 -1
- package/lib/commonjs/skia/types/Image/Image.d.ts +8 -0
- package/lib/commonjs/skia/types/Image/Image.js.map +1 -1
- package/lib/commonjs/skia/types/Matrix4.d.ts +2 -2
- package/lib/commonjs/skia/types/Matrix4.js.map +1 -1
- package/lib/commonjs/skia/types/RSXform.d.ts +7 -1
- package/lib/commonjs/skia/types/RSXform.js.map +1 -1
- package/lib/commonjs/skia/types/Rect.d.ts +4 -0
- package/lib/commonjs/skia/types/Rect.js.map +1 -1
- package/lib/commonjs/skia/types/Shader/Shader.d.ts +1 -1
- package/lib/commonjs/skia/types/Shader/Shader.js.map +1 -1
- package/lib/commonjs/skia/types/Skia.d.ts +3 -2
- package/lib/commonjs/skia/types/Skia.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkCanvas.d.ts +2 -1
- package/lib/commonjs/skia/web/JsiSkCanvas.js +19 -0
- package/lib/commonjs/skia/web/JsiSkCanvas.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkRSXform.d.ts +8 -2
- package/lib/commonjs/skia/web/JsiSkRSXform.js +33 -2
- package/lib/commonjs/skia/web/JsiSkRSXform.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkRect.d.ts +3 -2
- package/lib/commonjs/skia/web/JsiSkRect.js +7 -0
- package/lib/commonjs/skia/web/JsiSkRect.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkTextBlobFactory.js +2 -1
- package/lib/commonjs/skia/web/JsiSkTextBlobFactory.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkia.js +5 -0
- package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
- package/lib/module/dom/nodes/JsiSkDOM.d.ts +5 -3
- package/lib/module/dom/nodes/JsiSkDOM.js +61 -57
- package/lib/module/dom/nodes/JsiSkDOM.js.map +1 -1
- package/lib/module/dom/nodes/drawings/AtlasNode.d.ts +8 -0
- package/lib/module/dom/nodes/drawings/AtlasNode.js +34 -0
- package/lib/module/dom/nodes/drawings/AtlasNode.js.map +1 -0
- package/lib/module/dom/nodes/drawings/index.d.ts +1 -0
- package/lib/module/dom/nodes/drawings/index.js +1 -0
- package/lib/module/dom/nodes/drawings/index.js.map +1 -1
- package/lib/module/dom/types/Drawings.d.ts +7 -1
- package/lib/module/dom/types/Drawings.js.map +1 -1
- package/lib/module/dom/types/NodeType.d.ts +1 -0
- package/lib/module/dom/types/NodeType.js +1 -0
- package/lib/module/dom/types/NodeType.js.map +1 -1
- package/lib/module/dom/types/SkDOM.d.ts +2 -1
- package/lib/module/dom/types/SkDOM.js.map +1 -1
- package/lib/module/external/reanimated/buffers.d.ts +5 -0
- package/lib/module/external/reanimated/buffers.js +27 -0
- package/lib/module/external/reanimated/buffers.js.map +1 -0
- package/lib/module/external/reanimated/index.d.ts +2 -0
- package/lib/module/external/reanimated/index.js +2 -0
- package/lib/module/external/reanimated/index.js.map +1 -1
- package/lib/module/external/reanimated/interpolators.js +13 -1
- package/lib/module/external/reanimated/interpolators.js.map +1 -1
- package/lib/module/external/reanimated/moduleWrapper.d.ts +1 -0
- package/lib/module/external/reanimated/moduleWrapper.js +3 -2
- package/lib/module/external/reanimated/moduleWrapper.js.map +1 -1
- package/lib/module/external/reanimated/textures.d.ts +5 -0
- package/lib/module/external/reanimated/textures.js +24 -0
- package/lib/module/external/reanimated/textures.js.map +1 -0
- package/lib/module/external/reanimated/useAnimatedImageValue.js +7 -1
- package/lib/module/external/reanimated/useAnimatedImageValue.js.map +1 -1
- package/lib/module/headless/index.js +1 -1
- package/lib/module/headless/index.js.map +1 -1
- package/lib/module/mock/index.js +8 -0
- package/lib/module/mock/index.js.map +1 -1
- package/lib/module/renderer/Canvas.js +1 -1
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/renderer/Container.d.ts +1 -1
- package/lib/module/renderer/Container.js +2 -1
- package/lib/module/renderer/Container.js.map +1 -1
- package/lib/module/renderer/HostComponents.d.ts +3 -1
- package/lib/module/renderer/HostComponents.js +3 -0
- package/lib/module/renderer/HostComponents.js.map +1 -1
- package/lib/module/renderer/Offscreen.d.ts +4 -1
- package/lib/module/renderer/Offscreen.js +19 -9
- package/lib/module/renderer/Offscreen.js.map +1 -1
- package/lib/module/renderer/Reconciler.d.ts +1 -1
- package/lib/module/renderer/Reconciler.js +7 -4
- package/lib/module/renderer/Reconciler.js.map +1 -1
- package/lib/module/renderer/components/shapes/Atlas.d.ts +4 -0
- package/lib/module/renderer/components/shapes/Atlas.js +5 -0
- package/lib/module/renderer/components/shapes/Atlas.js.map +1 -0
- package/lib/module/renderer/components/shapes/index.d.ts +1 -0
- package/lib/module/renderer/components/shapes/index.js +1 -0
- package/lib/module/renderer/components/shapes/index.js.map +1 -1
- package/lib/module/skia/core/AnimatedImage.d.ts +1 -1
- package/lib/module/skia/core/AnimatedImage.js +4 -1
- package/lib/module/skia/core/AnimatedImage.js.map +1 -1
- package/lib/module/skia/core/Data.d.ts +1 -1
- package/lib/module/skia/core/Data.js +11 -4
- package/lib/module/skia/core/Data.js.map +1 -1
- package/lib/module/skia/core/Rect.d.ts +2 -2
- package/lib/module/skia/types/Canvas.d.ts +16 -1
- package/lib/module/skia/types/Canvas.js.map +1 -1
- package/lib/module/skia/types/Image/Image.d.ts +8 -0
- package/lib/module/skia/types/Image/Image.js.map +1 -1
- package/lib/module/skia/types/Matrix4.d.ts +2 -2
- package/lib/module/skia/types/Matrix4.js.map +1 -1
- package/lib/module/skia/types/RSXform.d.ts +7 -1
- package/lib/module/skia/types/RSXform.js.map +1 -1
- package/lib/module/skia/types/Rect.d.ts +4 -0
- package/lib/module/skia/types/Rect.js.map +1 -1
- package/lib/module/skia/types/Shader/Shader.d.ts +1 -1
- package/lib/module/skia/types/Shader/Shader.js.map +1 -1
- package/lib/module/skia/types/Skia.d.ts +3 -2
- package/lib/module/skia/types/Skia.js.map +1 -1
- package/lib/module/skia/web/JsiSkCanvas.d.ts +2 -1
- package/lib/module/skia/web/JsiSkCanvas.js +18 -0
- package/lib/module/skia/web/JsiSkCanvas.js.map +1 -1
- package/lib/module/skia/web/JsiSkRSXform.d.ts +8 -2
- package/lib/module/skia/web/JsiSkRSXform.js +34 -3
- package/lib/module/skia/web/JsiSkRSXform.js.map +1 -1
- package/lib/module/skia/web/JsiSkRect.d.ts +3 -2
- package/lib/module/skia/web/JsiSkRect.js +7 -0
- package/lib/module/skia/web/JsiSkRect.js.map +1 -1
- package/lib/module/skia/web/JsiSkTextBlobFactory.js +2 -1
- package/lib/module/skia/web/JsiSkTextBlobFactory.js.map +1 -1
- package/lib/module/skia/web/JsiSkia.js +5 -0
- package/lib/module/skia/web/JsiSkia.js.map +1 -1
- package/lib/typescript/src/dom/nodes/JsiSkDOM.d.ts +5 -3
- package/lib/typescript/src/dom/nodes/drawings/AtlasNode.d.ts +8 -0
- package/lib/typescript/src/dom/nodes/drawings/index.d.ts +1 -0
- package/lib/typescript/src/dom/types/Drawings.d.ts +7 -1
- package/lib/typescript/src/dom/types/NodeType.d.ts +1 -0
- package/lib/typescript/src/dom/types/SkDOM.d.ts +2 -1
- package/lib/typescript/src/external/reanimated/buffers.d.ts +5 -0
- package/lib/typescript/src/external/reanimated/index.d.ts +2 -0
- package/lib/typescript/src/external/reanimated/moduleWrapper.d.ts +1 -0
- package/lib/typescript/src/external/reanimated/textures.d.ts +5 -0
- package/lib/typescript/src/renderer/Container.d.ts +1 -1
- package/lib/typescript/src/renderer/HostComponents.d.ts +3 -1
- package/lib/typescript/src/renderer/Offscreen.d.ts +4 -1
- package/lib/typescript/src/renderer/Reconciler.d.ts +1 -1
- package/lib/typescript/src/renderer/components/shapes/Atlas.d.ts +4 -0
- package/lib/typescript/src/renderer/components/shapes/index.d.ts +1 -0
- package/lib/typescript/src/skia/core/AnimatedImage.d.ts +1 -1
- package/lib/typescript/src/skia/core/Data.d.ts +1 -1
- package/lib/typescript/src/skia/core/Rect.d.ts +2 -2
- package/lib/typescript/src/skia/types/Canvas.d.ts +16 -1
- package/lib/typescript/src/skia/types/Image/Image.d.ts +8 -0
- package/lib/typescript/src/skia/types/Matrix4.d.ts +2 -2
- package/lib/typescript/src/skia/types/RSXform.d.ts +7 -1
- package/lib/typescript/src/skia/types/Rect.d.ts +4 -0
- package/lib/typescript/src/skia/types/Shader/Shader.d.ts +1 -1
- package/lib/typescript/src/skia/types/Skia.d.ts +3 -2
- package/lib/typescript/src/skia/web/JsiSkCanvas.d.ts +2 -1
- package/lib/typescript/src/skia/web/JsiSkRSXform.d.ts +8 -2
- package/lib/typescript/src/skia/web/JsiSkRect.d.ts +3 -2
- package/libs/android/arm64-v8a/libskia.a +0 -0
- package/libs/android/arm64-v8a/libskottie.a +0 -0
- package/libs/android/arm64-v8a/libskparagraph.a +0 -0
- package/libs/android/arm64-v8a/libsksg.a +0 -0
- package/libs/android/arm64-v8a/libskshaper.a +0 -0
- package/libs/android/arm64-v8a/libskunicode.a +0 -0
- package/libs/android/arm64-v8a/libsvg.a +0 -0
- package/libs/android/armeabi-v7a/libskia.a +0 -0
- package/libs/android/armeabi-v7a/libskottie.a +0 -0
- package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
- package/libs/android/armeabi-v7a/libsksg.a +0 -0
- package/libs/android/armeabi-v7a/libskshaper.a +0 -0
- package/libs/android/armeabi-v7a/libskunicode.a +0 -0
- package/libs/android/armeabi-v7a/libsvg.a +0 -0
- package/libs/android/x86/libskia.a +0 -0
- package/libs/android/x86/libskottie.a +0 -0
- package/libs/android/x86/libskparagraph.a +0 -0
- package/libs/android/x86/libsksg.a +0 -0
- package/libs/android/x86/libskshaper.a +0 -0
- package/libs/android/x86/libskunicode.a +0 -0
- package/libs/android/x86/libsvg.a +0 -0
- package/libs/android/x86_64/libskia.a +0 -0
- package/libs/android/x86_64/libskottie.a +0 -0
- package/libs/android/x86_64/libskparagraph.a +0 -0
- package/libs/android/x86_64/libsksg.a +0 -0
- package/libs/android/x86_64/libskshaper.a +0 -0
- package/libs/android/x86_64/libskunicode.a +0 -0
- package/libs/android/x86_64/libsvg.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
- package/libs/ios/libskshaper.xcframework/Info.plist +5 -5
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
- package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
- package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
- package/libs/ios/libsvg.xcframework/Info.plist +5 -5
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
- package/package.json +1 -1
- package/src/dom/nodes/JsiSkDOM.ts +63 -56
- package/src/dom/nodes/drawings/AtlasNode.ts +24 -0
- package/src/dom/nodes/drawings/index.ts +1 -0
- package/src/dom/types/Drawings.ts +9 -0
- package/src/dom/types/NodeType.ts +1 -0
- package/src/dom/types/SkDOM.ts +2 -0
- package/src/external/reanimated/buffers.ts +53 -0
- package/src/external/reanimated/index.ts +2 -0
- package/src/external/reanimated/interpolators.ts +15 -2
- package/src/external/reanimated/moduleWrapper.ts +1 -0
- package/src/external/reanimated/textures.tsx +38 -0
- package/src/external/reanimated/useAnimatedImageValue.ts +15 -4
- package/src/headless/index.ts +1 -1
- package/src/mock/index.ts +8 -0
- package/src/renderer/Canvas.tsx +1 -1
- package/src/renderer/Container.tsx +3 -2
- package/src/renderer/HostComponents.ts +6 -1
- package/src/renderer/Offscreen.tsx +24 -11
- package/src/renderer/Reconciler.tsx +5 -2
- package/src/renderer/components/shapes/Atlas.tsx +8 -0
- package/src/renderer/components/shapes/index.ts +1 -0
- package/src/skia/core/AnimatedImage.ts +3 -2
- package/src/skia/core/Data.ts +8 -4
- package/src/skia/types/Canvas.ts +32 -1
- package/src/skia/types/Image/Image.ts +10 -0
- package/src/skia/types/Matrix4.ts +2 -2
- package/src/skia/types/RSXform.ts +7 -1
- package/src/skia/types/Rect.ts +6 -0
- package/src/skia/types/Shader/Shader.ts +6 -1
- package/src/skia/types/Skia.ts +10 -2
- package/src/skia/web/JsiSkCanvas.ts +60 -23
- package/src/skia/web/JsiSkRSXform.ts +28 -4
- package/src/skia/web/JsiSkRect.ts +12 -2
- package/src/skia/web/JsiSkTextBlobFactory.ts +5 -5
- package/src/skia/web/JsiSkia.ts +15 -0
- package/cpp/skia/include/gpu/GrSurfaceInfo.h +0 -142
- package/cpp/skia/include/private/gpu/ganesh/GrGLTypesPriv.h +0 -107
- package/cpp/skia/include/private/gpu/ganesh/GrMockTypesPriv.h +0 -32
- package/cpp/skia/include/private/gpu/ganesh/GrMtlTypesPriv.h +0 -83
- package/cpp/skia/include/private/gpu/ganesh/GrVkTypesPriv.h +0 -47
- package/cpp/skia/include/private/gpu/vk/VulkanTypesPriv.h +0 -57
- package/cpp/skia/include/utils/SkBase64.h +0 -53
- package/cpp/skia/modules/skcms/skcms_internal.h +0 -56
@@ -0,0 +1,161 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2018 Google LLC
|
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
|
+
#pragma once
|
9
|
+
|
10
|
+
#include <stddef.h>
|
11
|
+
#include <stdint.h>
|
12
|
+
|
13
|
+
// skcms_Transform.h contains skcms implementation details.
|
14
|
+
// Please don't use this header from outside the skcms repo.
|
15
|
+
|
16
|
+
namespace skcms_private {
|
17
|
+
|
18
|
+
/** All transform ops */
|
19
|
+
|
20
|
+
#define SKCMS_WORK_OPS(M) \
|
21
|
+
M(load_a8) \
|
22
|
+
M(load_g8) \
|
23
|
+
M(load_4444) \
|
24
|
+
M(load_565) \
|
25
|
+
M(load_888) \
|
26
|
+
M(load_8888) \
|
27
|
+
M(load_1010102) \
|
28
|
+
M(load_101010x_XR) \
|
29
|
+
M(load_161616LE) \
|
30
|
+
M(load_16161616LE) \
|
31
|
+
M(load_161616BE) \
|
32
|
+
M(load_16161616BE) \
|
33
|
+
M(load_hhh) \
|
34
|
+
M(load_hhhh) \
|
35
|
+
M(load_fff) \
|
36
|
+
M(load_ffff) \
|
37
|
+
\
|
38
|
+
M(swap_rb) \
|
39
|
+
M(clamp) \
|
40
|
+
M(invert) \
|
41
|
+
M(force_opaque) \
|
42
|
+
M(premul) \
|
43
|
+
M(unpremul) \
|
44
|
+
M(matrix_3x3) \
|
45
|
+
M(matrix_3x4) \
|
46
|
+
\
|
47
|
+
M(lab_to_xyz) \
|
48
|
+
M(xyz_to_lab) \
|
49
|
+
\
|
50
|
+
M(gamma_r) \
|
51
|
+
M(gamma_g) \
|
52
|
+
M(gamma_b) \
|
53
|
+
M(gamma_a) \
|
54
|
+
M(gamma_rgb) \
|
55
|
+
\
|
56
|
+
M(tf_r) \
|
57
|
+
M(tf_g) \
|
58
|
+
M(tf_b) \
|
59
|
+
M(tf_a) \
|
60
|
+
M(tf_rgb) \
|
61
|
+
\
|
62
|
+
M(pq_r) \
|
63
|
+
M(pq_g) \
|
64
|
+
M(pq_b) \
|
65
|
+
M(pq_a) \
|
66
|
+
M(pq_rgb) \
|
67
|
+
\
|
68
|
+
M(hlg_r) \
|
69
|
+
M(hlg_g) \
|
70
|
+
M(hlg_b) \
|
71
|
+
M(hlg_a) \
|
72
|
+
M(hlg_rgb) \
|
73
|
+
\
|
74
|
+
M(hlginv_r) \
|
75
|
+
M(hlginv_g) \
|
76
|
+
M(hlginv_b) \
|
77
|
+
M(hlginv_a) \
|
78
|
+
M(hlginv_rgb) \
|
79
|
+
\
|
80
|
+
M(table_r) \
|
81
|
+
M(table_g) \
|
82
|
+
M(table_b) \
|
83
|
+
M(table_a) \
|
84
|
+
\
|
85
|
+
M(clut_A2B) \
|
86
|
+
M(clut_B2A)
|
87
|
+
|
88
|
+
#define SKCMS_STORE_OPS(M) \
|
89
|
+
M(store_a8) \
|
90
|
+
M(store_g8) \
|
91
|
+
M(store_4444) \
|
92
|
+
M(store_565) \
|
93
|
+
M(store_888) \
|
94
|
+
M(store_8888) \
|
95
|
+
M(store_1010102) \
|
96
|
+
M(store_161616LE) \
|
97
|
+
M(store_16161616LE) \
|
98
|
+
M(store_161616BE) \
|
99
|
+
M(store_16161616BE) \
|
100
|
+
M(store_101010x_XR) \
|
101
|
+
M(store_hhh) \
|
102
|
+
M(store_hhhh) \
|
103
|
+
M(store_fff) \
|
104
|
+
M(store_ffff)
|
105
|
+
|
106
|
+
enum class Op : int {
|
107
|
+
#define M(op) op,
|
108
|
+
SKCMS_WORK_OPS(M)
|
109
|
+
SKCMS_STORE_OPS(M)
|
110
|
+
#undef M
|
111
|
+
};
|
112
|
+
|
113
|
+
/** Constants */
|
114
|
+
|
115
|
+
#if defined(__clang__) || defined(__GNUC__)
|
116
|
+
static constexpr float INFINITY_ = __builtin_inff();
|
117
|
+
#else
|
118
|
+
static const union {
|
119
|
+
uint32_t bits;
|
120
|
+
float f;
|
121
|
+
} inf_ = { 0x7f800000 };
|
122
|
+
#define INFINITY_ inf_.f
|
123
|
+
#endif
|
124
|
+
|
125
|
+
/** Vector type */
|
126
|
+
|
127
|
+
#if defined(__clang__)
|
128
|
+
template <int N, typename T> using Vec = T __attribute__((ext_vector_type(N)));
|
129
|
+
#elif defined(__GNUC__)
|
130
|
+
// Unfortunately, GCC does not allow us to omit the struct. This will not compile:
|
131
|
+
// template <int N, typename T> using Vec = T __attribute__((vector_size(N*sizeof(T))));
|
132
|
+
template <int N, typename T> struct VecHelper {
|
133
|
+
typedef T __attribute__((vector_size(N * sizeof(T)))) V;
|
134
|
+
};
|
135
|
+
template <int N, typename T> using Vec = typename VecHelper<N, T>::V;
|
136
|
+
#endif
|
137
|
+
|
138
|
+
/** Interface */
|
139
|
+
|
140
|
+
namespace baseline {
|
141
|
+
|
142
|
+
void run_program(const Op* program, const void** contexts, ptrdiff_t programSize,
|
143
|
+
const char* src, char* dst, int n,
|
144
|
+
const size_t src_bpp, const size_t dst_bpp);
|
145
|
+
|
146
|
+
}
|
147
|
+
namespace hsw {
|
148
|
+
|
149
|
+
void run_program(const Op* program, const void** contexts, ptrdiff_t programSize,
|
150
|
+
const char* src, char* dst, int n,
|
151
|
+
const size_t src_bpp, const size_t dst_bpp);
|
152
|
+
|
153
|
+
}
|
154
|
+
namespace skx {
|
155
|
+
|
156
|
+
void run_program(const Op* program, const void** contexts, ptrdiff_t programSize,
|
157
|
+
const char* src, char* dst, int n,
|
158
|
+
const size_t src_bpp, const size_t dst_bpp);
|
159
|
+
|
160
|
+
}
|
161
|
+
} // namespace skcms_private
|
@@ -0,0 +1,136 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2018 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
|
+
#pragma once
|
9
|
+
|
10
|
+
// skcms_internals.h contains APIs shared by skcms' internals and its test tools.
|
11
|
+
// Please don't use this header from outside the skcms repo.
|
12
|
+
|
13
|
+
#include <stdbool.h>
|
14
|
+
#include <stdint.h>
|
15
|
+
|
16
|
+
#ifdef __cplusplus
|
17
|
+
extern "C" {
|
18
|
+
#endif
|
19
|
+
|
20
|
+
// ~~~~ General Helper Macros ~~~~
|
21
|
+
// skcms can leverage some C++ extensions when they are present.
|
22
|
+
#define ARRAY_COUNT(arr) (int)(sizeof((arr)) / sizeof(*(arr)))
|
23
|
+
|
24
|
+
#if defined(__clang__) && defined(__has_cpp_attribute)
|
25
|
+
#if __has_cpp_attribute(clang::fallthrough)
|
26
|
+
#define SKCMS_FALLTHROUGH [[clang::fallthrough]]
|
27
|
+
#endif
|
28
|
+
|
29
|
+
#ifndef SKCMS_HAS_MUSTTAIL
|
30
|
+
// [[clang::musttail]] is great for performance, but it's not well supported and we run into
|
31
|
+
// a variety of problems when we use it. Fortunately, it's an optional feature that doesn't
|
32
|
+
// affect correctness, and usually the compiler will generate a tail-call even for us
|
33
|
+
// whether or not we force it to do so.
|
34
|
+
//
|
35
|
+
// Known limitations:
|
36
|
+
// - Sanitizers do not work well with [[clang::musttail]], and corrupt src/dst pointers.
|
37
|
+
// (https://github.com/llvm/llvm-project/issues/70849)
|
38
|
+
// - Wasm tail-calls were only introduced in 2023 and aren't a mainstream feature yet.
|
39
|
+
// - Clang 18 runs into an ICE on armv7/androideabi with [[clang::musttail]].
|
40
|
+
// (http://crbug.com/1504548)
|
41
|
+
// - Android RISC-V also runs into an ICE (b/314692534)
|
42
|
+
// - Windows builds generate incorrect code with [[clang::musttail]] and crash mysteriously.
|
43
|
+
// (http://crbug.com/1505442)
|
44
|
+
#if __has_cpp_attribute(clang::musttail) && !__has_feature(memory_sanitizer) \
|
45
|
+
&& !__has_feature(address_sanitizer) \
|
46
|
+
&& !defined(__EMSCRIPTEN__) \
|
47
|
+
&& !defined(__arm__) \
|
48
|
+
&& !defined(__riscv) \
|
49
|
+
&& !defined(_WIN32) && !defined(__SYMBIAN32__)
|
50
|
+
#define SKCMS_HAS_MUSTTAIL 1
|
51
|
+
#endif
|
52
|
+
#endif
|
53
|
+
#endif
|
54
|
+
|
55
|
+
#ifndef SKCMS_FALLTHROUGH
|
56
|
+
#define SKCMS_FALLTHROUGH
|
57
|
+
#endif
|
58
|
+
#ifndef SKCMS_HAS_MUSTTAIL
|
59
|
+
#define SKCMS_HAS_MUSTTAIL 0
|
60
|
+
#endif
|
61
|
+
|
62
|
+
#if defined(__clang__)
|
63
|
+
#define SKCMS_MAYBE_UNUSED __attribute__((unused))
|
64
|
+
#pragma clang diagnostic ignored "-Wused-but-marked-unused"
|
65
|
+
#elif defined(__GNUC__)
|
66
|
+
#define SKCMS_MAYBE_UNUSED __attribute__((unused))
|
67
|
+
#elif defined(_MSC_VER)
|
68
|
+
#define SKCMS_MAYBE_UNUSED __pragma(warning(suppress:4100))
|
69
|
+
#else
|
70
|
+
#define SKCMS_MAYBE_UNUSED
|
71
|
+
#endif
|
72
|
+
|
73
|
+
// sizeof(x) will return size_t, which is 32-bit on some machines and 64-bit on others.
|
74
|
+
// We have better testing on 64-bit machines, so force 32-bit machines to behave like 64-bit.
|
75
|
+
//
|
76
|
+
// Please do not use sizeof() directly, and size_t only when required.
|
77
|
+
// (We have no way of enforcing these requests...)
|
78
|
+
#define SAFE_SIZEOF(x) ((uint64_t)sizeof(x))
|
79
|
+
|
80
|
+
// Same sort of thing for _Layout structs with a variable sized array at the end (named "variable").
|
81
|
+
#define SAFE_FIXED_SIZE(type) ((uint64_t)offsetof(type, variable))
|
82
|
+
|
83
|
+
// If this isn't Clang, GCC, or Emscripten with SIMD support, we are in SKCMS_PORTABLE mode.
|
84
|
+
#if !defined(SKCMS_PORTABLE) && !(defined(__clang__) || \
|
85
|
+
defined(__GNUC__) || \
|
86
|
+
(defined(__EMSCRIPTEN__) && defined(__wasm_simd128__)))
|
87
|
+
#define SKCMS_PORTABLE 1
|
88
|
+
#endif
|
89
|
+
|
90
|
+
// If we are in SKCMS_PORTABLE mode or running on a non-x86-64 platform, we can't enable HSW or SKX.
|
91
|
+
// We also disable HSW/SKX on Android, even if it's Android on x64, since it's unlikely to benefit.
|
92
|
+
#if defined(SKCMS_PORTABLE) || !defined(__x86_64__) || defined(ANDROID) || defined(__ANDROID__)
|
93
|
+
#undef SKCMS_FORCE_HSW
|
94
|
+
#if !defined(SKCMS_DISABLE_HSW)
|
95
|
+
#define SKCMS_DISABLE_HSW 1
|
96
|
+
#endif
|
97
|
+
|
98
|
+
#undef SKCMS_FORCE_SKX
|
99
|
+
#if !defined(SKCMS_DISABLE_SKX)
|
100
|
+
#define SKCMS_DISABLE_SKX 1
|
101
|
+
#endif
|
102
|
+
#endif
|
103
|
+
|
104
|
+
// ~~~~ Shared ~~~~
|
105
|
+
typedef struct skcms_ICCTag {
|
106
|
+
uint32_t signature;
|
107
|
+
uint32_t type;
|
108
|
+
uint32_t size;
|
109
|
+
const uint8_t* buf;
|
110
|
+
} skcms_ICCTag;
|
111
|
+
|
112
|
+
typedef struct skcms_ICCProfile skcms_ICCProfile;
|
113
|
+
typedef struct skcms_TransferFunction skcms_TransferFunction;
|
114
|
+
typedef union skcms_Curve skcms_Curve;
|
115
|
+
|
116
|
+
void skcms_GetTagByIndex (const skcms_ICCProfile*, uint32_t idx, skcms_ICCTag*);
|
117
|
+
bool skcms_GetTagBySignature(const skcms_ICCProfile*, uint32_t sig, skcms_ICCTag*);
|
118
|
+
|
119
|
+
float skcms_MaxRoundtripError(const skcms_Curve* curve, const skcms_TransferFunction* inv_tf);
|
120
|
+
|
121
|
+
// 252 of a random shuffle of all possible bytes.
|
122
|
+
// 252 is evenly divisible by 3 and 4. Only 192, 10, 241, and 43 are missing.
|
123
|
+
// Used for ICC profile equivalence testing.
|
124
|
+
extern const uint8_t skcms_252_random_bytes[252];
|
125
|
+
|
126
|
+
// ~~~~ Portable Math ~~~~
|
127
|
+
static inline float floorf_(float x) {
|
128
|
+
float roundtrip = (float)((int)x);
|
129
|
+
return roundtrip > x ? roundtrip - 1 : roundtrip;
|
130
|
+
}
|
131
|
+
static inline float fabsf_(float x) { return x < 0 ? -x : x; }
|
132
|
+
float powf_(float, float);
|
133
|
+
|
134
|
+
#ifdef __cplusplus
|
135
|
+
}
|
136
|
+
#endif
|
@@ -0,0 +1,404 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2018 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
|
+
#pragma once
|
9
|
+
|
10
|
+
// skcms_public.h contains the entire public API for skcms.
|
11
|
+
|
12
|
+
#ifndef SKCMS_API
|
13
|
+
#define SKCMS_API
|
14
|
+
#endif
|
15
|
+
|
16
|
+
#include <stdbool.h>
|
17
|
+
#include <stddef.h>
|
18
|
+
#include <stdint.h>
|
19
|
+
#include <string.h>
|
20
|
+
|
21
|
+
#ifdef __cplusplus
|
22
|
+
extern "C" {
|
23
|
+
#endif
|
24
|
+
|
25
|
+
// A row-major 3x3 matrix (ie vals[row][col])
|
26
|
+
typedef struct skcms_Matrix3x3 {
|
27
|
+
float vals[3][3];
|
28
|
+
} skcms_Matrix3x3;
|
29
|
+
|
30
|
+
// It is _not_ safe to alias the pointers to invert in-place.
|
31
|
+
SKCMS_API bool skcms_Matrix3x3_invert(const skcms_Matrix3x3*, skcms_Matrix3x3*);
|
32
|
+
SKCMS_API skcms_Matrix3x3 skcms_Matrix3x3_concat(const skcms_Matrix3x3*, const skcms_Matrix3x3*);
|
33
|
+
|
34
|
+
// A row-major 3x4 matrix (ie vals[row][col])
|
35
|
+
typedef struct skcms_Matrix3x4 {
|
36
|
+
float vals[3][4];
|
37
|
+
} skcms_Matrix3x4;
|
38
|
+
|
39
|
+
// A transfer function mapping encoded values to linear values,
|
40
|
+
// represented by this 7-parameter piecewise function:
|
41
|
+
//
|
42
|
+
// linear = sign(encoded) * (c*|encoded| + f) , 0 <= |encoded| < d
|
43
|
+
// = sign(encoded) * ((a*|encoded| + b)^g + e), d <= |encoded|
|
44
|
+
//
|
45
|
+
// (A simple gamma transfer function sets g to gamma and a to 1.)
|
46
|
+
typedef struct skcms_TransferFunction {
|
47
|
+
float g, a,b,c,d,e,f;
|
48
|
+
} skcms_TransferFunction;
|
49
|
+
|
50
|
+
SKCMS_API float skcms_TransferFunction_eval (const skcms_TransferFunction*, float);
|
51
|
+
SKCMS_API bool skcms_TransferFunction_invert(const skcms_TransferFunction*,
|
52
|
+
skcms_TransferFunction*);
|
53
|
+
|
54
|
+
typedef enum skcms_TFType {
|
55
|
+
skcms_TFType_Invalid,
|
56
|
+
skcms_TFType_sRGBish,
|
57
|
+
skcms_TFType_PQish,
|
58
|
+
skcms_TFType_HLGish,
|
59
|
+
skcms_TFType_HLGinvish,
|
60
|
+
} skcms_TFType;
|
61
|
+
|
62
|
+
// Identify which kind of transfer function is encoded in an skcms_TransferFunction
|
63
|
+
SKCMS_API skcms_TFType skcms_TransferFunction_getType(const skcms_TransferFunction*);
|
64
|
+
|
65
|
+
// We can jam a couple alternate transfer function forms into skcms_TransferFunction,
|
66
|
+
// including those matching the general forms of the SMPTE ST 2084 PQ function or HLG.
|
67
|
+
//
|
68
|
+
// PQish:
|
69
|
+
// max(A + B|encoded|^C, 0)
|
70
|
+
// linear = sign(encoded) * (------------------------) ^ F
|
71
|
+
// D + E|encoded|^C
|
72
|
+
SKCMS_API bool skcms_TransferFunction_makePQish(skcms_TransferFunction*,
|
73
|
+
float A, float B, float C,
|
74
|
+
float D, float E, float F);
|
75
|
+
// HLGish:
|
76
|
+
// { K * sign(encoded) * ( (R|encoded|)^G ) when 0 <= |encoded| <= 1/R
|
77
|
+
// linear = { K * sign(encoded) * ( e^(a(|encoded|-c)) + b ) when 1/R < |encoded|
|
78
|
+
SKCMS_API bool skcms_TransferFunction_makeScaledHLGish(skcms_TransferFunction*,
|
79
|
+
float K, float R, float G,
|
80
|
+
float a, float b, float c);
|
81
|
+
|
82
|
+
// Compatibility shim with K=1 for old callers.
|
83
|
+
static inline bool skcms_TransferFunction_makeHLGish(skcms_TransferFunction* fn,
|
84
|
+
float R, float G,
|
85
|
+
float a, float b, float c) {
|
86
|
+
return skcms_TransferFunction_makeScaledHLGish(fn, 1.0f, R,G, a,b,c);
|
87
|
+
}
|
88
|
+
|
89
|
+
// PQ mapping encoded [0,1] to linear [0,1].
|
90
|
+
static inline bool skcms_TransferFunction_makePQ(skcms_TransferFunction* tf) {
|
91
|
+
return skcms_TransferFunction_makePQish(tf, -107/128.0f, 1.0f, 32/2523.0f
|
92
|
+
, 2413/128.0f, -2392/128.0f, 8192/1305.0f);
|
93
|
+
}
|
94
|
+
// HLG mapping encoded [0,1] to linear [0,12].
|
95
|
+
static inline bool skcms_TransferFunction_makeHLG(skcms_TransferFunction* tf) {
|
96
|
+
return skcms_TransferFunction_makeHLGish(tf, 2.0f, 2.0f
|
97
|
+
, 1/0.17883277f, 0.28466892f, 0.55991073f);
|
98
|
+
}
|
99
|
+
|
100
|
+
// Is this an ordinary sRGB-ish transfer function, or one of the HDR forms we support?
|
101
|
+
SKCMS_API bool skcms_TransferFunction_isSRGBish(const skcms_TransferFunction*);
|
102
|
+
SKCMS_API bool skcms_TransferFunction_isPQish (const skcms_TransferFunction*);
|
103
|
+
SKCMS_API bool skcms_TransferFunction_isHLGish (const skcms_TransferFunction*);
|
104
|
+
|
105
|
+
// Unified representation of 'curv' or 'para' tag data, or a 1D table from 'mft1' or 'mft2'
|
106
|
+
typedef union skcms_Curve {
|
107
|
+
struct {
|
108
|
+
uint32_t alias_of_table_entries;
|
109
|
+
skcms_TransferFunction parametric;
|
110
|
+
};
|
111
|
+
struct {
|
112
|
+
uint32_t table_entries;
|
113
|
+
const uint8_t* table_8;
|
114
|
+
const uint8_t* table_16;
|
115
|
+
};
|
116
|
+
} skcms_Curve;
|
117
|
+
|
118
|
+
// Complex transforms between device space (A) and profile connection space (B):
|
119
|
+
// A2B: device -> [ "A" curves -> CLUT ] -> [ "M" curves -> matrix ] -> "B" curves -> PCS
|
120
|
+
// B2A: device <- [ "A" curves <- CLUT ] <- [ "M" curves <- matrix ] <- "B" curves <- PCS
|
121
|
+
|
122
|
+
typedef struct skcms_A2B {
|
123
|
+
// Optional: N 1D "A" curves, followed by an N-dimensional CLUT.
|
124
|
+
// If input_channels == 0, these curves and CLUT are skipped,
|
125
|
+
// Otherwise, input_channels must be in [1, 4].
|
126
|
+
uint32_t input_channels;
|
127
|
+
skcms_Curve input_curves[4];
|
128
|
+
uint8_t grid_points[4];
|
129
|
+
const uint8_t* grid_8;
|
130
|
+
const uint8_t* grid_16;
|
131
|
+
|
132
|
+
// Optional: 3 1D "M" curves, followed by a color matrix.
|
133
|
+
// If matrix_channels == 0, these curves and matrix are skipped,
|
134
|
+
// Otherwise, matrix_channels must be 3.
|
135
|
+
uint32_t matrix_channels;
|
136
|
+
skcms_Curve matrix_curves[3];
|
137
|
+
skcms_Matrix3x4 matrix;
|
138
|
+
|
139
|
+
// Required: 3 1D "B" curves. Always present, and output_channels must be 3.
|
140
|
+
uint32_t output_channels;
|
141
|
+
skcms_Curve output_curves[3];
|
142
|
+
} skcms_A2B;
|
143
|
+
|
144
|
+
typedef struct skcms_B2A {
|
145
|
+
// Required: 3 1D "B" curves. Always present, and input_channels must be 3.
|
146
|
+
uint32_t input_channels;
|
147
|
+
skcms_Curve input_curves[3];
|
148
|
+
|
149
|
+
// Optional: a color matrix, followed by 3 1D "M" curves.
|
150
|
+
// If matrix_channels == 0, this matrix and these curves are skipped,
|
151
|
+
// Otherwise, matrix_channels must be 3.
|
152
|
+
uint32_t matrix_channels;
|
153
|
+
skcms_Matrix3x4 matrix;
|
154
|
+
skcms_Curve matrix_curves[3];
|
155
|
+
|
156
|
+
// Optional: an N-dimensional CLUT, followed by N 1D "A" curves.
|
157
|
+
// If output_channels == 0, this CLUT and these curves are skipped,
|
158
|
+
// Otherwise, output_channels must be in [1, 4].
|
159
|
+
uint32_t output_channels;
|
160
|
+
uint8_t grid_points[4];
|
161
|
+
const uint8_t* grid_8;
|
162
|
+
const uint8_t* grid_16;
|
163
|
+
skcms_Curve output_curves[4];
|
164
|
+
} skcms_B2A;
|
165
|
+
|
166
|
+
typedef struct skcms_CICP {
|
167
|
+
uint8_t color_primaries;
|
168
|
+
uint8_t transfer_characteristics;
|
169
|
+
uint8_t matrix_coefficients;
|
170
|
+
uint8_t video_full_range_flag;
|
171
|
+
} skcms_CICP;
|
172
|
+
|
173
|
+
typedef struct skcms_ICCProfile {
|
174
|
+
const uint8_t* buffer;
|
175
|
+
|
176
|
+
uint32_t size;
|
177
|
+
uint32_t data_color_space;
|
178
|
+
uint32_t pcs;
|
179
|
+
uint32_t tag_count;
|
180
|
+
|
181
|
+
// skcms_Parse() will set commonly-used fields for you when possible:
|
182
|
+
|
183
|
+
// If we can parse red, green and blue transfer curves from the profile,
|
184
|
+
// trc will be set to those three curves, and has_trc will be true.
|
185
|
+
bool has_trc;
|
186
|
+
skcms_Curve trc[3];
|
187
|
+
|
188
|
+
// If this profile's gamut can be represented by a 3x3 transform to XYZD50,
|
189
|
+
// skcms_Parse() sets toXYZD50 to that transform and has_toXYZD50 to true.
|
190
|
+
bool has_toXYZD50;
|
191
|
+
skcms_Matrix3x3 toXYZD50;
|
192
|
+
|
193
|
+
// If the profile has a valid A2B0 or A2B1 tag, skcms_Parse() sets A2B to
|
194
|
+
// that data, and has_A2B to true. skcms_ParseWithA2BPriority() does the
|
195
|
+
// same following any user-provided prioritization of A2B0, A2B1, or A2B2.
|
196
|
+
bool has_A2B;
|
197
|
+
skcms_A2B A2B;
|
198
|
+
|
199
|
+
// If the profile has a valid B2A0 or B2A1 tag, skcms_Parse() sets B2A to
|
200
|
+
// that data, and has_B2A to true. skcms_ParseWithA2BPriority() does the
|
201
|
+
// same following any user-provided prioritization of B2A0, B2A1, or B2A2.
|
202
|
+
bool has_B2A;
|
203
|
+
skcms_B2A B2A;
|
204
|
+
|
205
|
+
// If the profile has a valid CICP tag, skcms_Parse() sets CICP to that data,
|
206
|
+
// and has_CICP to true.
|
207
|
+
bool has_CICP;
|
208
|
+
skcms_CICP CICP;
|
209
|
+
} skcms_ICCProfile;
|
210
|
+
|
211
|
+
// The sRGB color profile is so commonly used that we offer a canonical skcms_ICCProfile for it.
|
212
|
+
SKCMS_API const skcms_ICCProfile* skcms_sRGB_profile(void);
|
213
|
+
// Ditto for XYZD50, the most common profile connection space.
|
214
|
+
SKCMS_API const skcms_ICCProfile* skcms_XYZD50_profile(void);
|
215
|
+
|
216
|
+
SKCMS_API const skcms_TransferFunction* skcms_sRGB_TransferFunction(void);
|
217
|
+
SKCMS_API const skcms_TransferFunction* skcms_sRGB_Inverse_TransferFunction(void);
|
218
|
+
SKCMS_API const skcms_TransferFunction* skcms_Identity_TransferFunction(void);
|
219
|
+
|
220
|
+
// Practical equality test for two skcms_ICCProfiles.
|
221
|
+
// The implementation is subject to change, but it will always try to answer
|
222
|
+
// "can I substitute A for B?" and "can I skip transforming from A to B?".
|
223
|
+
SKCMS_API bool skcms_ApproximatelyEqualProfiles(const skcms_ICCProfile* A,
|
224
|
+
const skcms_ICCProfile* B);
|
225
|
+
|
226
|
+
// Practical test that answers: Is curve roughly the inverse of inv_tf? Typically used by passing
|
227
|
+
// the inverse of a known parametric transfer function (like sRGB), to determine if a particular
|
228
|
+
// curve is very close to sRGB.
|
229
|
+
SKCMS_API bool skcms_AreApproximateInverses(const skcms_Curve* curve,
|
230
|
+
const skcms_TransferFunction* inv_tf);
|
231
|
+
|
232
|
+
// Similar to above, answering the question for all three TRC curves of the given profile. Again,
|
233
|
+
// passing skcms_sRGB_InverseTransferFunction as inv_tf will answer the question:
|
234
|
+
// "Does this profile have a transfer function that is very close to sRGB?"
|
235
|
+
SKCMS_API bool skcms_TRCs_AreApproximateInverse(const skcms_ICCProfile* profile,
|
236
|
+
const skcms_TransferFunction* inv_tf);
|
237
|
+
|
238
|
+
// Parse an ICC profile and return true if possible, otherwise return false.
|
239
|
+
// Selects an A2B profile (if present) according to priority list (each entry 0-2).
|
240
|
+
// The buffer is not copied; it must remain valid as long as the skcms_ICCProfile will be used.
|
241
|
+
SKCMS_API bool skcms_ParseWithA2BPriority(const void*, size_t,
|
242
|
+
const int priority[], int priorities,
|
243
|
+
skcms_ICCProfile*);
|
244
|
+
|
245
|
+
static inline bool skcms_Parse(const void* buf, size_t len, skcms_ICCProfile* profile) {
|
246
|
+
// For continuity of existing user expectations,
|
247
|
+
// prefer A2B0 (perceptual) over A2B1 (relative colormetric), and ignore A2B2 (saturation).
|
248
|
+
const int priority[] = {0,1};
|
249
|
+
return skcms_ParseWithA2BPriority(buf, len,
|
250
|
+
priority, sizeof(priority)/sizeof(*priority),
|
251
|
+
profile);
|
252
|
+
}
|
253
|
+
|
254
|
+
SKCMS_API bool skcms_ApproximateCurve(const skcms_Curve* curve,
|
255
|
+
skcms_TransferFunction* approx,
|
256
|
+
float* max_error);
|
257
|
+
|
258
|
+
SKCMS_API bool skcms_GetCHAD(const skcms_ICCProfile*, skcms_Matrix3x3*);
|
259
|
+
SKCMS_API bool skcms_GetWTPT(const skcms_ICCProfile*, float xyz[3]);
|
260
|
+
|
261
|
+
// These are common ICC signature values
|
262
|
+
enum {
|
263
|
+
// data_color_space
|
264
|
+
skcms_Signature_CMYK = 0x434D594B,
|
265
|
+
skcms_Signature_Gray = 0x47524159,
|
266
|
+
skcms_Signature_RGB = 0x52474220,
|
267
|
+
|
268
|
+
// pcs
|
269
|
+
skcms_Signature_Lab = 0x4C616220,
|
270
|
+
skcms_Signature_XYZ = 0x58595A20,
|
271
|
+
};
|
272
|
+
|
273
|
+
typedef enum skcms_PixelFormat {
|
274
|
+
skcms_PixelFormat_A_8,
|
275
|
+
skcms_PixelFormat_A_8_,
|
276
|
+
skcms_PixelFormat_G_8,
|
277
|
+
skcms_PixelFormat_G_8_,
|
278
|
+
|
279
|
+
skcms_PixelFormat_RGB_565,
|
280
|
+
skcms_PixelFormat_BGR_565,
|
281
|
+
|
282
|
+
skcms_PixelFormat_ABGR_4444,
|
283
|
+
skcms_PixelFormat_ARGB_4444,
|
284
|
+
|
285
|
+
skcms_PixelFormat_RGB_888,
|
286
|
+
skcms_PixelFormat_BGR_888,
|
287
|
+
skcms_PixelFormat_RGBA_8888,
|
288
|
+
skcms_PixelFormat_BGRA_8888,
|
289
|
+
skcms_PixelFormat_RGBA_8888_sRGB, // Automatic sRGB encoding / decoding.
|
290
|
+
skcms_PixelFormat_BGRA_8888_sRGB, // (Generally used with linear transfer functions.)
|
291
|
+
|
292
|
+
skcms_PixelFormat_RGBA_1010102,
|
293
|
+
skcms_PixelFormat_BGRA_1010102,
|
294
|
+
|
295
|
+
skcms_PixelFormat_RGB_161616LE, // Little-endian. Pointers must be 16-bit aligned.
|
296
|
+
skcms_PixelFormat_BGR_161616LE,
|
297
|
+
skcms_PixelFormat_RGBA_16161616LE,
|
298
|
+
skcms_PixelFormat_BGRA_16161616LE,
|
299
|
+
|
300
|
+
skcms_PixelFormat_RGB_161616BE, // Big-endian. Pointers must be 16-bit aligned.
|
301
|
+
skcms_PixelFormat_BGR_161616BE,
|
302
|
+
skcms_PixelFormat_RGBA_16161616BE,
|
303
|
+
skcms_PixelFormat_BGRA_16161616BE,
|
304
|
+
|
305
|
+
skcms_PixelFormat_RGB_hhh_Norm, // 1-5-10 half-precision float in [0,1]
|
306
|
+
skcms_PixelFormat_BGR_hhh_Norm, // Pointers must be 16-bit aligned.
|
307
|
+
skcms_PixelFormat_RGBA_hhhh_Norm,
|
308
|
+
skcms_PixelFormat_BGRA_hhhh_Norm,
|
309
|
+
|
310
|
+
skcms_PixelFormat_RGB_hhh, // 1-5-10 half-precision float.
|
311
|
+
skcms_PixelFormat_BGR_hhh, // Pointers must be 16-bit aligned.
|
312
|
+
skcms_PixelFormat_RGBA_hhhh,
|
313
|
+
skcms_PixelFormat_BGRA_hhhh,
|
314
|
+
|
315
|
+
skcms_PixelFormat_RGB_fff, // 1-8-23 single-precision float (the normal kind).
|
316
|
+
skcms_PixelFormat_BGR_fff, // Pointers must be 32-bit aligned.
|
317
|
+
skcms_PixelFormat_RGBA_ffff,
|
318
|
+
skcms_PixelFormat_BGRA_ffff,
|
319
|
+
|
320
|
+
skcms_PixelFormat_RGB_101010x_XR, // Note: This is located here to signal no clamping.
|
321
|
+
skcms_PixelFormat_BGR_101010x_XR, // Compatible with MTLPixelFormatBGR10_XR.
|
322
|
+
} skcms_PixelFormat;
|
323
|
+
|
324
|
+
// We always store any alpha channel linearly. In the chart below, tf-1() is the inverse
|
325
|
+
// transfer function for the given color profile (applying the transfer function linearizes).
|
326
|
+
|
327
|
+
// We treat opaque as a strong requirement, not just a performance hint: we will ignore
|
328
|
+
// any source alpha and treat it as 1.0, and will make sure that any destination alpha
|
329
|
+
// channel is filled with the equivalent of 1.0.
|
330
|
+
|
331
|
+
// We used to offer multiple types of premultiplication, but now just one, PremulAsEncoded.
|
332
|
+
// This is the premul you're probably used to working with.
|
333
|
+
|
334
|
+
typedef enum skcms_AlphaFormat {
|
335
|
+
skcms_AlphaFormat_Opaque, // alpha is always opaque
|
336
|
+
// tf-1(r), tf-1(g), tf-1(b), 1.0
|
337
|
+
skcms_AlphaFormat_Unpremul, // alpha and color are unassociated
|
338
|
+
// tf-1(r), tf-1(g), tf-1(b), a
|
339
|
+
skcms_AlphaFormat_PremulAsEncoded, // premultiplied while encoded
|
340
|
+
// tf-1(r)*a, tf-1(g)*a, tf-1(b)*a, a
|
341
|
+
} skcms_AlphaFormat;
|
342
|
+
|
343
|
+
// Convert npixels pixels from src format and color profile to dst format and color profile
|
344
|
+
// and return true, otherwise return false. It is safe to alias dst == src if dstFmt == srcFmt.
|
345
|
+
SKCMS_API bool skcms_Transform(const void* src,
|
346
|
+
skcms_PixelFormat srcFmt,
|
347
|
+
skcms_AlphaFormat srcAlpha,
|
348
|
+
const skcms_ICCProfile* srcProfile,
|
349
|
+
void* dst,
|
350
|
+
skcms_PixelFormat dstFmt,
|
351
|
+
skcms_AlphaFormat dstAlpha,
|
352
|
+
const skcms_ICCProfile* dstProfile,
|
353
|
+
size_t npixels);
|
354
|
+
|
355
|
+
// If profile can be used as a destination in skcms_Transform, return true. Otherwise, attempt to
|
356
|
+
// rewrite it with approximations where reasonable. If successful, return true. If no reasonable
|
357
|
+
// approximation exists, leave the profile unchanged and return false.
|
358
|
+
SKCMS_API bool skcms_MakeUsableAsDestination(skcms_ICCProfile* profile);
|
359
|
+
|
360
|
+
// If profile can be used as a destination with a single parametric transfer function (ie for
|
361
|
+
// rasterization), return true. Otherwise, attempt to rewrite it with approximations where
|
362
|
+
// reasonable. If successful, return true. If no reasonable approximation exists, leave the
|
363
|
+
// profile unchanged and return false.
|
364
|
+
SKCMS_API bool skcms_MakeUsableAsDestinationWithSingleCurve(skcms_ICCProfile* profile);
|
365
|
+
|
366
|
+
// Returns a matrix to adapt XYZ color from given the whitepoint to D50.
|
367
|
+
SKCMS_API bool skcms_AdaptToXYZD50(float wx, float wy,
|
368
|
+
skcms_Matrix3x3* toXYZD50);
|
369
|
+
|
370
|
+
// Returns a matrix to convert RGB color into XYZ adapted to D50, given the
|
371
|
+
// primaries and whitepoint of the RGB model.
|
372
|
+
SKCMS_API bool skcms_PrimariesToXYZD50(float rx, float ry,
|
373
|
+
float gx, float gy,
|
374
|
+
float bx, float by,
|
375
|
+
float wx, float wy,
|
376
|
+
skcms_Matrix3x3* toXYZD50);
|
377
|
+
|
378
|
+
// Call before your first call to skcms_Transform() to skip runtime CPU detection.
|
379
|
+
SKCMS_API void skcms_DisableRuntimeCPUDetection(void);
|
380
|
+
|
381
|
+
// Utilities for programmatically constructing profiles
|
382
|
+
static inline void skcms_Init(skcms_ICCProfile* p) {
|
383
|
+
memset(p, 0, sizeof(*p));
|
384
|
+
p->data_color_space = skcms_Signature_RGB;
|
385
|
+
p->pcs = skcms_Signature_XYZ;
|
386
|
+
}
|
387
|
+
|
388
|
+
static inline void skcms_SetTransferFunction(skcms_ICCProfile* p,
|
389
|
+
const skcms_TransferFunction* tf) {
|
390
|
+
p->has_trc = true;
|
391
|
+
for (int i = 0; i < 3; ++i) {
|
392
|
+
p->trc[i].table_entries = 0;
|
393
|
+
p->trc[i].parametric = *tf;
|
394
|
+
}
|
395
|
+
}
|
396
|
+
|
397
|
+
static inline void skcms_SetXYZD50(skcms_ICCProfile* p, const skcms_Matrix3x3* m) {
|
398
|
+
p->has_toXYZD50 = true;
|
399
|
+
p->toXYZD50 = *m;
|
400
|
+
}
|
401
|
+
|
402
|
+
#ifdef __cplusplus
|
403
|
+
}
|
404
|
+
#endif
|