Version 2.80.0
SkiaSharp
A cross-platform 2D graphics API for .NET platforms based on Google's Skia Graphics Library. It provides a comprehensive 2D API that can be used across mobile, server and desktop models to render images.
Major Changes
- Brand new skia version: milestone 80
- All native changelogs here
- ARM64 support for Windows
- This includes both UWP and Win32 platforms
- ARM / ARM64 support for Linux
- This means Raspberry Pi!
- Alpine / musl support for Linux
- This includes both the standard and no-dependency builds
- WASM static library (experimental)
- This is just the native .a file for now that has to be manually (or using a framework tooling such as Uno) linked.
- There is a helper package
SkiaSharp.NativeAssets.WebAssembly
that will provide a path to the actual static library (#1389)
- Support for Vulkan backends [@tuccio] [@MarchingCube]
- Supported on Android, Windows and Linux
- New
GRVkBackendContext
,GRVkImageInfo
and more types
SKColorSpace
and related types have been reworked- New type for accessing transfer functions and ICC profiles
- Removing usage of
SKMatrix44
since it is going to be obsolete soon
- Text processing has been entirely re-written to use the new
SKFont
type under the hoodSKFont
is a text-related subset ofSKPaint
- APIs based on
Span<T>
for almost zero-allocation processing SKTextBlob
andSKTextBlobBuilder
now focus on glyphs and only expose convenience members for text
- Native libSkiaSharp for all platforms are no longer embedded in the dlls
- Improves build performance
- Allows for better control when excluding native assets
Changes
- Unifying some APIs
- Moving from
SKEncoding
toSKTextEncoding
- Moving away from
GRPixelConfig
toSKColorType
- Moving from
- Improved the way GPU types are created and used
GRContext
andGRGlInterface
have been streamlined
- Several color space related types have been deprecated in favor of improved types
SKCanvas.DrawTextOnPath
now has support for not warping characters [@Ziriax]- Native support was dropped in skia, but we now also have a better implementation
SKPaint
now supports getting and settingSKColorF
(with or without a color space)SKPath.ToWinding()
can be used to convert the current path to a path that has a winding fill type- .NET Framework apps now properly load the 32/64 bit libraries, as well as support ARM
- Several
SKImageFilter
factory methods now have additional overloads - Managed library now knows what version of the native library it supports, and will throw if an invalid library is used (#1252)
Maintainence
- Brand new images! Sharper than skia, if I say so myself...
- Minimum version of Windows for UWP is now 10.0.16299
- Minimum version of .NET Framework for is now 4.6.2
- Native artifacts for libSkiaSharp are no longer embedded into the managed .dlls
- Build performance improvement
- Easier to control
- Samples updated to more modern libraries and code
- Added code coverage to the build system
Known Issues
- Not quite an issue, but still something to be aware of: microsoft/microsoft-ui-xaml#1446
API __CxxFrameHandler4 in vcruntime140_1_app.dll is not supported for this application type. libGLESv2.dll calls this API.
API __CxxFrameHandler4 in vcruntime140_1_app.dll is not supported for this application type. libSkiaSharp.dll calls this API.
Links
NuGet | Code Diff | Project | Milestone | Changelog | CI | Release CI
SkiaSharp.Views
A set of pre-prepared UI views, panels and surfaces for drawing. One of these views can be added to the view hierarchy, and then be used for drawing without the need for complex setup. There is also a set of extension methods for converting to/from SkiaSharp and native types.
Changes
- None yet
Links
SkiaSharp.Views.Forms
A set of pre-prepared views for Xamarin.Forms, for fully cross-platform drawing code. There are views for both CPU and GPU backends, along with extension methods for converting to/from SkiaSharp and Xamarin.Forms types. Currently available for iOS, Android, UWP, macOS (preview) and Tizen (preview).
Changes
- Minimum version of Xamarin.Forms is now 4.5+
Links
HarfBuzzSharp
A library for text shaping, which is the process of converting Unicode text to glyph indices and positions.
Changes
- None
Links
SkiaSharp.HarfBuzz (preview)
Support for text shaping using the HarfBuzz text shaping library. This package adds the SKShaper
type that can shape a string, returning the codepoints and their positions.
This package also adds some extension methods to SKCanvas
to make drawing shaped text easier. These methods include DrawShapedText
and it's overloads.
Changes
- New overloads for
SKCanvas.DrawShapedText
to make simple cases easier
Links
SkiaSharp.Vulkan.SharpVk (preview)
Because working with pointers is not nice, especially when you have an already perfectly good Vulkan API from SharpVk, we have a package that provides a way to use that library with our library.
Changes
- Added
GRSharpVkBackendContext
to directly use SharpVk objects to construct theGRVkBackendContext
- Added extensions methods for
GRVkExtensions
to make initialization easier when using SharpVk objects
Links
Additional Platforms
Linux
Because we love everyone in the Linux world just as well as the Microsoft and the Xamarin worlds, we have also included some pre-built Linux native binaries in a new, separate package (see #312):
SkiaSharp.NativeAssets.Linux
If you happen to be on an environment that does not have the ability to install any of the required dependencies, such as FontConfig, you can also try out the build that does not have any dependencies other that the core system libraries:
SkiaSharp.NativeAssets.Linux.NoDependencies
At the current time, these packages support several platforms/architectures/distributions.
The base platforms are:
- Debian x64, ARM and ARM64
- Alpine x64
However, these binaries are known to work on many other platforms:
- Red Hat Enterprise Linux
- CentOS
- Raspberry Pi
- Many Musl distributions
- Most Debian-based distros
More builds can be requested by leaving a comment on #453, but you can easily build your own binaries by following this guide.
Windows Nano Server
We know the .NET Core containers are very cool to use, so we now have support for using the default Windows .NET Core Docker images (see #676):
SkiaSharp.NativeAssets.NanoServer
It is not quite perfect just yet, so the app project needs a little help (see NuGet/Home#8894):
<PackageReference Include="SkiaSharp" ExcludeAssets="native" />
<PackageReference Include="SkiaSharp.NativeAssets.NanoServer" />
Web Assembly (WASM)
Because the .NET platform and tooling for web assembly is still evolving, we can't yet commit to a final packaging format. However, this does not mean that we cannot at least help get you started.
To do this, we have pre-built a native static library for WASM that can be manually linked, or linked using a framework tooling such as Uno. This library can be found in a new package that provides a path to the actual static library (#1389):
SkiaSharp.NativeAssets.WebAssembly
Samples
There are a large set of samples that show many different features of SkiaSharp. They are broken up into two main groups:
- Basic - these are minimal samples that show just what is needed to use SkiaSharp
- Gallery - these are comprehensive samples that show off new, or exciting features of SkiaSharp
All the samples that have been built and tested for this version of SkiaSharp can be downloaded in the "Assets" links.