c13cd6479d
This is a reland of ecac712bec
Changes (best viewed comparing PS1 to latest)
- Use emsdk 3.1.3 which includes important bug fixes
- Remove unnecessary steps in compile.sh
- Fix use of various gn args.
- Avoid conflicts with Flutter's GN symbols
- Add/update docs
- Make activate-emsdk script compatible with our infra.
Original change's description:
> Build CanvasKit using GN/Ninja
>
> Build with
>
> ./bin/gn gen out/wasm_debug '--args=target_cpu="wasm"'
>
> or
>
> ./bin/gn gen out/wasm_release '--args=target_cpu="wasm" is_debug=false'
>
> Change-Id: Ib74586bf8397d57064a3899eaa6da76f9bce9049
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/502036
> Reviewed-by: Kevin Lubick <kjlubick@google.com>
> Reviewed-by: Ben Wagner <bungeman@google.com>
Change-Id: I601712a8953c2799fa029e782e097905b95e6b59
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/507717
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
46 KiB
46 KiB
CanvasKit Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Breaking
SkRuntimeEffect.makeShader
andSkRuntimeEffect.makeShaderWithChildren
no longer accept anisOpaque
parameter. These functions will now make a best effort to determine if your shader always produces opaque output, and optimize accordingly. If you definitely want your shader to produce opaque output, do so in the shader's SkSL code.
Added
SkPicture.makeShader
- Skia now has a GN toolchain that is used to compile CanvasKit. Ideally, all settings should be the same, but there may be some subtle differences in practice. This changes the setup to build CanvasKit (users no longer need to download emsdk themselves).
Changed
- If an invalid matrix type is passed in (e.g. not an array, TypedArray, or DOMMatrix), CanvasKit will throw instead of drawing incorrectly.
[0.33.0] - 2022-02-03
Added
Surface.updateTextureFromSource
prevents flickering on some platforms by re-using the texture for a givenImage
instead of needing to always create a new one viaSurface.makeImageFromTextureSource
. (skbug.com/12723)ParagraphBuilder.reset
allows re-use of the underlying memory.PathEffect.MakePath2D
,PathEffect.MakePath1D
andPathEffect.MakeLine2D
.
Changed
- Surface factories always produce a surface with an attached color space. Specifying
null
toCanvasKit.MakeWebGLCanvasSurface
or calling any factory that does not take a color space will now create a surface with a color space ofCanvasKit.ColorSpace.SRGB
. - We now build/ship with emscripten 3.1.3.
- Internal calls no longer use dynamic dispatch (skbug.com/12795).
- JPEG and WEBP encoding are turned on by default in full version (in /bin/full/).
Fixed
- Supplying textures via
Surface.makeImageFromTextureSource
should not cause issues with Mipmaps or other places where Skia needs to create textures (skbug.com/12797) CanvasKit.MakeRenderTarget
correctly takes 2 or 3 params, as per the documentation.CanvasKit.MakeOnScreenGLSurface
and other gpu surface constructors correctly adjust the underlying WebGL context, avoiding corruption and mismatched textures (https://github.com/flutter/flutter/issues/95259).
[0.32.0] - 2021-12-15
Breaking
Canvas.drawVertices
andCanvas.drawPatch
treat the default blend mode differently. See https://bugs.chromium.org/p/skia/issues/detail?id=12662.Canvas.markCTM
andCanvas.findMarkedCTM
have been removed. They were effectively no-ops.
Added
- Rough implementation of
measureText
to Canvas2D emulation layer. For accurate numbers, clients should use a real shaping library, like SkParagraph. AnimatedImage.currentFrameDuration
has been added, as well as some clarifying documentation.
Fixed
- Drawing images created from MakeLazyImageFromTextureSource should no longer cause a draw to only partially show up on some frames https://crbug.com/skia/12740.
[0.31.0] - 2021-11-16
Added
CanvasKit.MakeLazyImageFromTextureSource
, which is similar toSurface.makeImageFromTextureSource
, but can be re-used across different WebGL contexts.
Breaking
Surface.makeImageFromTextureSource
now takes an optional ImageInfo or PartialImageInfo instead of optional width and height. Sensible defaults will be used if not supplied.
Fixed
- Some
Surface
methods would not properly switch to the right WebGL context. - Warnings about
INVALID_ENUM: enable: invalid capability
should be reduced/eliminated.
Removed
FontMgr.MakeTypefaceFromData
andFontMgr.RefDefault
have been removed in favor ofTypeface.MakeFreeTypeFaceFromData
Changed
make release
,make debug
, and variants put the output in a different location (./build).- Example .html files load CanvasKit from the new location (./build).
Type Changes (index.d.ts)
Surface.requestAnimationFrame
andSurface.drawOnce
are properly documented.- Fixed typo in TextStyle (decrationStyle => decorationStyle)
[0.30.0] - 2021-09-15
Removed
Surface.grContext
andSurface.openGLversion
- these had been undocumented and are no longer exposed.CanvasKit.setCurrentContext
andCanvasKit.currentContext
. Existing calls can be deleted.
Changed
- CanvasKit APIs now handle switching between WebGL contexts automatically.
- Reduced overhead when switching between WebGL contexts.
Type Changes (index.d.ts)
Canvas.drawImage*
calls are correctly documented as accepting an optionalPaint
or null.
[0.29.0] - 2021-08-06
Added
Path.makeAsWinding
has been added to convert paths with an EvenOdd FillType to the equivalent area using the Winding FillType.
Breaking
Paint.getBlendMode()
has been removed.Canvas.drawImageAtCurrentFrame()
has been removed.- FilterQuality enum removed -- pass
FilterOptions
|CubicResampler
instead.
Type Changes (index.d.ts)
- Replaced all
object
with actual types, includingAnimationMarker
.
[0.28.1] - 2021-06-28
Added
Typeface.MakeFreeTypeFaceFromData
as a more convenient way to create a Typeface from the bytes of a .ttf, .woff, or .woff2 file.Typeface.getGlyphIDs
- provides the same functionality asFont.getGlyphIDs
.
Changed
- ICU has been updated from v65 to v69.
- Freetype has been updated from f9350be to ff40776.
Fixed
- We should no longer have to decode the same font multiple times (skbug.com/12112)
Font.getGlyphIDs
had the wrong type for the third argument. It is now correctly a Uint16Array.
Deprecated
FontMgr.MakeTypefaceFromData
will be removed in favor ofTypeface.MakeFreeTypeFaceFromData
FontMgr.RefDefault
will be removed in an upcoming version. It's only real use was forFontMgr.MakeTypefaceFromData
.
[0.28.0] - 2021-06-17
Added
Surface.makeImageFromTexture
andSurface.makeImageFromTextureSource
as easy ways to provide CanvasKit with a WebGL texture and interact with WebGL texture sources (e.g. <video>)
Changed
- We now build/ship with emscripten 2.0.20.
Breaking
Path.toCmds()
returns a flattened Float32Array instead of a 2D Array.Canvaskit.Path.MakeFromCmds
no longer accepts a 2D Array. Inputs must be flattened, but can be an array, a TypedArray, or a MallocObj.CanvasKit.*Builder
have all been removed. Clients should use Malloc instead.
Removed
CanvasKit.Shader.MakeLerp
, the same effect can be easily generated withRuntimeEffect
Known Bugs
- On legacy (non-ANGLE) SwiftShader, certain paths that require tessellation may not be drawn correctly when using a WebGL-backed surface. (skbug.com/11965)
[0.27.0] - 2021-05-20
Added
Font.getGlyphIntercepts()
Fixed
- Bug with images using certain exif metadata. (skbug.com/11968)
Removed
Canvas.flush
, which had been previously deprecated.Surface.flush
is the preferred method.AnimatedImage.getCurrentFrame
, which had been previously deprecated.AnimatedImage.makeImageAtCurrentFrame
is the replacement, which behaves exactly the same.
[0.26.0] - 2021-04-23
Added
- Add 'isEmbolden, setEmbolden' to 'Font'
- Add 'drawGlyphs' to 'Canvas'
- Add
drawPatch
toCanvas
. - Add
Strut
as aRectHeightStyle
enum. CanvasKit.RuntimeEffect
now supports integer uniforms in the SkSL. These are still passed toRuntimeEffect.makeShader
as floats (like all other uniforms), and will be converted to integers internally, to match the expectations of the shader.- Add 'halfLeading' to
TextStyle
andStrutStyle
. ParagraphStyle
now accepts textHeightBehavior.
Removed
Picture.saveAsFile()
, in favor ofPicture.serialize()
where clients can control how to store/encode the bytes.
[0.25.1] - 2021-03-30
Added
- Skottie accessors for dynamic text properties (text string, font size).
- Optional sampling parameter to drawAtlas (paint filter-quality is ignored/deprecated)
Fixed
- Fonts should not be leaked https://bugs.chromium.org/p/skia/issues/detail?id=11778
[0.25.0] - 2021-03-02
Added
- A full build of CanvasKit is now in /bin/full.
CanvasKit.rt_effect
to test if the RuntimeEffect code was compiled in.
Breaking
- The
ShapedText
type has been removed. Clients who want ShapedText should use the Paragraph APIs.
Removed
Font.measureText
, which had been previously deprecated. Clients should use either Paragraph APIs orFont.getGlyphWidths
instead (the latter does no shaping).Font.getWidths
, which had been previously deprecated. Clients should useFont.getGlyphWidths
.
Type Changes (index.d.ts)
- Documentation added for
managed_skottie
,particles
, andskottie
feature constants.
[0.24.0] - 2021-02-18
Added
- The Skottie factory (MakeManagedAnimation) now accepts an optional logger object.
Breaking
CanvasKit.getDataBytes
has been removed, as has the Data type. The 2 APIS that returned Data now return Uint8Array containing the bytes directly. These areImage.encodeToData
(now namedImage.encodeToBytes
) andSkPicture.serialize
. These APIs return null if the encoding or serialization failed.
Type Changes (index.d.ts)
Image.encodeToDataWithFormat
was incorrectly documented as its own thing.
[0.23.0] - 2021-02-04
Added
- Constants for the shadow flags. Of note, some of these values can be used on previous releases.
getShadowLocalBounds()
to estimate the bounds of the shadows drawn byCanvas.drawShadow
.- compile.sh now takes "no_matrix", which will omit the helper JS to deal with 3x3, 4x4 and SkColorMatrix (in case clients have logic to deal with that themselves).
CanvasKit.RuntimeEffect.Make
now takes an optional callback function that will be called with any compilation error.CanvasKit.RuntimeEffect
now exposes uniforms. The number, dimensions, and name of each uniform can be queried, usingRuntimeEffect.getUniformCount
,RuntimeEffect.getUniform
, andRuntimeEffect.getUniformName
. The total number of floats across all uniforms (that must be passed toRuntimeEffect.makeShader
) can be queried withRuntimeEffect.getUniformFloatCount
.
Breaking
MakeImprovedNoise
is removed.- Particles now use a single code string containing both Effect and Particle code. Uniform APIs are
now shared between Effect and Particle programs, and are no longer prefixed with
Effect
orParticle
. For example, instead ofParticleEffect.getEffectUniform
andParticleEffect.getParticleUniform
, there is now just:ParticleEffect.getUniform
.
Changed
Path.getPoint()
andSkottieAnimation.size()
now return a TypedArray instead of a normal array. Additionally, they take an optional parameter to allow the result to be copied into that provided TypedArray instead of a new one being allocated.- APIs that passed in points should have less overhead (and now can accept a TypedArray).
Canvas.drawShadow()
now accepts zPlaneParams and lightPos as Malloc'ed and regular Float32Arrays.getShadowLocalBounds()
does as well.ContourMeasure.getPosTan
returns a Float32Array instead of a normal array. Additionally, this method takes an optional parameter to allow the result to be copied into that provided Float32Array instead of a new one being allocated.
Fixed
- Improper error returned when a WebGL context could not be used.
- 4x4 matrices are "downsampled" properly if necessary to 3x3 matrices by removing the third column and the third row.
SkottieAnimation.size()
was incorrectly returning an object. It now returns a TypedArray of length 2 (w, h).
Deprecated
Canvas.drawImageRect
,Canvas.drawImage
,Canvas.drawAtlas
, These rely on the Paint's FilterQuality, which is going away. Pass sampling options explicitly.
Removed
PathMeasure
, which was deprecated and replaced withContourMeasure
.
[0.22.0] - 2020-12-17
Added
Canvas.drawImageCubic
,Canvas.drawImageOptions
,Canvas.drawImageRectCubic
,Canvas.drawImageRectOptions
to replace functionality that previously required FilterQuality.- A copy of this changelog is published in NPM releases for easier discovery.
Breaking
Canvas.drawImageNine
now takes a required FilterMode (the Paint still is optional).
[0.21.0] - 2020-12-16
Added
getImageInfo()
andgetColorSpace()
to theImage
type.CanvasKit.deleteContext()
for deleting WebGL contexts when done with them, resizing, etc.Image.makeCopyWithDefaultMipmaps()
for use withImage.makeShaderOptions
; necessary if choosing aMipmapMode
that is notNone
.
Breaking
Path.addPoly()
no longer accepts a 2d array of points, but a flattened 1d array.MakeVertices()
no longer accepts 2d arrays of points or texture coordinates, but flattened 1d arrays in both places.Paint.setFilterQuality
,Paint.getFilterQuality
,Image.makeShader
have been removed. The new way to specify interpolation settings is with the newly addedImage.makeShader*
methods.Image.makeShaderCubic
is a replacement for high quality;Image.makeShaderOptions
is for medium/low.
Changed
MakeImage
is now documented in the Typescript types (index.d.ts). The parameters have been streamlined to align with other, similar APIs.MakeAnimatedImageFromEncoded
respects Exif metadata.MakeImageFromEncoded
already did so (and continues to do so).- The Canvas2D emulation layer always uses high quality image smoothing (this drastically simplifies the underlying code).
- We now compile CanvasKit with emsdk 2.0.10 when testing and deploying to npm.
- Instead of shipping a "core" build to npm, we ship a "profiling" build, which is the same as the main build, just with unmangled function calls and other debugging info useful for determining where runtime is spent.
Fixed
Canvas.drawPoints
correctly takes a flattened Array or TypedArray of points (as the documentation says), not a 2D array.
Type Changes (index.d.ts)
- Documented additional type for InputFlexibleColorArray.
[0.20.0] - 2020-11-12
Added
MakeFractalNoise
,MakeImprovedNoise
, andMakeTurbulence
have been added toCanvasKit.Shader
.MakeRasterDirectSurface
for giving the user direct access to drawn pixels.getLineMetrics
to Paragraph.Canvas.saveLayerPaint
as an experimental, undocumented "fast path" if one only needs to pass the paint.- Support for .woff and .woff2 fonts. Disable .woff2 for reduced code size by supplying no_woff2 to compile.sh. (This removes the code to do brotli decompression).
Breaking
CanvasKit.MakePathFromSVGString
was renamed toCanvasKit.Path.MakeFromSVGString
CanvasKit.MakePathFromOp
was renamed toCanvasKit.Path.MakeFromOp
- The API for
Canvas.readPixels
andImage.readPixels
has been reworked to more accurately reflect the C++ backend and each other. bytesPerRow is now a required parameter. They take an ImageInfo object to specify the output format. Additionally they take an optional malloc'd object as the last parameter. If provided, the data will be copied into there instead of allocating a new buffer.
Changed
- We now compile CanvasKit with emsdk 2.0.6 when testing and deploying to npm.
- We no longer compile with rtti on, saving about 1% in code size.
CanvasKit.Shader.Blend
,...Color
, and...Lerp
have been renamed toCanvasKit.Shader.MakeBlend
,...MakeColor
and...MakeLerp
to align with naming conventions. The old names will be removed in an upcoming release.
Removed
CanvasKit.MakePathFromCmds
; Was deprecated in favor ofCanvasKit.Path.MakeFromCmds
.new CanvasKit.Path(path)
in favor of existingpath.copy()
.- Unused internal APIs (_getRasterN32PremulSurface, Drawable)
measureText
from the CanvasContext2D emulation layer due to deprecation of measureText.
Deprecated
Font.getWidths
in favor ofFont.getGlyphIDs
andFont.getGlyphWidths
.Font.measureText
in favor of the Paragraph APIs (which actually do shaping).
Type Changes (index.d.ts)
- Return value for MakeFromCmds correctly reflects the possibility of null.
CanvasKit.GrContext
was renamed toCanvasKit.GrDirectContext
.- Add docs/types for Shader Gradients (e.g.
CanvasKit.Shader.MakeLinearGradient
).
[0.19.0] - 2020-10-08
Breaking
- "Sk" has been removed from all names. e.g.
new CanvasKit.SkPaint()
becomesnew CanvasKit.Paint()
. See./types/index.d.ts
for all the new names.
Removed
Surface.captureFrameAsSkPicture
; it was deprecated previously.CanvasKit.MakeSkCornerPathEffect
,CanvasKit.MakeSkDiscretePathEffect
,CanvasKit.MakeBlurMaskFilter
,CanvasKit.MakeSkDashPathEffect
,CanvasKit.MakeLinearGradientShader
,CanvasKit.MakeRadialGradientShader
,CanvasKit.MakeTwoPointConicalGradientShader
; these were deprecated previously and have replacements likeCanvasKit.PathEffect.MakeDash
.Canvas.concat44
; it was deprecated previously, just useCanvas.concat
[0.18.1] - 2020-10-06
Added
- Typescript types (and documentation) are now in the types subfolder. We will keep these updated as we make changes to the CanvasKit library.
[0.18.0] - 2020-10-05
Breaking
- SkRect are no longer returned from
CanvasKit.LTRBRect
,CanvasKit.XYWHRect
nor are accepted as JS objects. Instead, the format is 4 floats in either an array, a Float32Array or a piece of memory returned by CanvasKit.Malloc. These floats are the left, top, right, bottom numbers of the rectangle. - SkIRect (Rectangles with Integer values) are no longer accepted as JS objects. Instead, the format is 4 ints in either an array, an Int32Array or a piece of memory returned by CanvasKit.Malloc. These ints are the left, top, right, bottom numbers of the rectangle.
- SkRRect (Rectangles with rounded corners) are no longer returned from
CanvasKit.RRectXY
nor are accepted as JS objects. Instead, the format is 12 floats in either an array, a Float32Array or a piece of memory returned by CanvasKit.Malloc. The first 4 floats are the left, top, right, bottom numbers of the rectangle and then 4 sets of points starting in the upper left corner and going clockwise. This change allows for faster transfer between JS and WASM code. SkPath.addRoundRect
has been replaced withSkPath.addRRect
. The same functionality can be had with theCanvasKit.RRectXY
helper.SkPath.addRect
no longer accepts 4 floats as separate arguments. It only accepts an SkRect (an array/Float32Array of 4 floats) and an optional boolean for determining clockwise or counter-clockwise directionality.- The order of
SkCanvas.saveLayer
arguments is slightly different (more consistent). It is nowpaint, bounds, backdrop, flags
Changed
- We now compile CanvasKit with emsdk 2.0.0 when testing and deploying to npm.
- WebGL interface creation is a little leaner in terms of code size and speed.
- The signature of
main
used with SkSL passed toCanvasKit.SkRuntimeEffect.Make
has changed. There is no longer aninout half4 color
parameter, effects must return their color instead. Valid signatures are nowhalf4 main()
orhalf4 main(float2 coord)
. SkPath.getBounds
,SkShapedText.getBounds
, andSkVertices.bounds
now take an optional argument. If a Float32Array with length 4 or greater is provided, the bounds will be copied into this array instead of allocating a new one.SkCanvas.drawAnimatedImage
has been removed in favor of callingSkCanvas.drawImageAtCurrentFrame
orSkAnimatedImage.makeImageAtCurrentFrame
and thenSkCanvas.drawImage
.SkTextBlob.MakeFromRSXform
also accepts a (possibly Malloc'd) Float32Array of RSXforms ( see SkRSXform for more.)
Removed
SkCanvas.drawRoundRect
has been removed in favor ofSkCanvas.drawRRect
The same functionality can be had with theCanvasKit.RRectXY
helper.SkPath.arcTo
which had been deprecated in favor ofSkPath.arcToOval
,SkPath.arcToRotated
,SkPath.arcToTangent
.- Extraneous ColorTypes from
ColorType
enum.
Added
CanvasKit.LTRBiRect
andCanvasKit.XYWHiRect
as helpers to create SkIRects.SkCanvas.drawRect4f
as a somewhat experimental way to have array-free APIs for clients that already have their own representation of Rect. This is experimental because we don't know if it's faster/better under real-world use and because we don't want to commit to having these for all Rect APIs (and for similar types) until it has baked in a bit.- Added the following to
TextStyle
:decorationStyle
textBaseline
letterSpacing
wordSpacing
heightMultiplier
locale
shadows
fontFeatures
- Added
strutStyle
toParagraphStyle
. - Added
addPlaceholder
toParagraphBuilder
. - Added
getRectsForPlaceholders
toParagraph
. SkFont.getGlyphIDs
,SkFont.getGlyphBounds
,SkFont.getGlyphWidths
for turning code points into GlyphIDs and getting the associated metrics with those glyphs. Note: glyph ids are only valid for the font of which they were requested.SkTextBlob.MakeFromRSXformGlyphs
andSkTextBlob.MakeFromGlyphs
as a way to build TextBlobs using GlyphIDs instead of code points.CanvasKit.MallocGlyphIDs
as a helper for pre-allocating space on the WASM heap for Glyph IDs.
Deprecated
SkAnimatedImage.getCurrentFrame
; preferSkAnimatedImage.makeImageAtCurrentFrame
(which follows the establishing naming convention).SkSurface.captureFrameAsSkPicture
will be removed in a future release. Callers can simply useSkPictureRecorder
directly.CanvasKit.FourFloatArrayHelper
and related helpers (mostly helping with drawAtlas).CanvasKit.Malloc
is the better tool and will replace these soon.SkPathMeasure
; SkContourMeasureIter has all the same functionality and a cleaner pattern.
Fixed
- Addressed Memory leak in
SkCanvas.drawText
. - Made SkTextBlob hang on to less memory during its lifetime.
SkPath.computeTightBounds()
works again. Like getBounds() it takes an optional argument to put the bounds into.
[0.17.3] - 2020-08-05
Added
- Added
CanvasKit.TypefaceFontProvider
, which can be used to register fonts with a font family alias. For example, "Roboto Light" may be registered with the alias "Roboto", and it will be used when "Roboto" is used with a light font weight. - Added
CanvasKit.ParagraphBuilder.MakeFromFontProvider
to make aParagraphBuilder
from aTypefaceFontProvider
. - Added
CanvasKit.ParagraphBuilder.pushPaintStyle
which can be used to stroke or fill text with paints instead of simple colors.
[0.17.2] - 2020-07-22
Fixed
- Shader programs are no longer generated with
do-while
loops in WebGL 1.0.
[0.17.1] - 2020-07-21
Added
- Compile option to deserialize effects in skps
include_effects_deserialization
.
Changed
- Pathops and SKP deserialization/serialization enabled on the npm build.
[0.17.0] - 2020-07-20
Added
- Added
CanvasKit.MakeImageFromCanvasImageSource
which takes either an HTMLImageElement, SVGImageElement, HTMLVideoElement, HTMLCanvasElement, ImageBitmap, or OffscreenCanvas and returns an SkImage. This function is an alternative toCanvasKit.MakeImageFromEncoded
for creating SkImages when loading and decoding images. In the future, codesize of CanvasKit may be able to be reduced by removing image codecs in wasm, if browser APIs for decoding images are used along withCanvasKit.MakeImageFromCanvasImageSource
instead ofCanvasKit.MakeImageFromEncoded
. - Three usage examples of
CanvasKit.MakeImageFromCanvasImageSource
in core.spec.ts. - Added support for asynchronous callbacks in perfs and tests.
CanvasKit.SkPath.MakeFromVerbsPointsWeights
andCanvasKit.SkPath.addVerbsPointsWeights
for supplying many path operations (e.g. moveTo, cubicTo) at once.- The object returned by
CanvasKit.malloc
now has asubarray
method which works exactly like the normal TypedArray version. The TypedArray which it returns is also backed by WASM memory and when passed into CanvasKit will be used w/o copying the data (just likeMalloc.toTypedArray
). SkM44.setupCamera
to return a 4x4 matrix which sets up a perspective view from a camera.SkPath.arcToOval
,SkPath.arcToTangent
, andSkPath.arcToRotated
to replace the three overloads ofSkPath.arcTo
. https://github.com/flutter/flutter/issues/61305
Changed
- In all places where color arrays are accepted (gradient makers, drawAtlas, and MakeSkVertices), You can now provide either flat Float32Arrays of float colors, Uint32Arrays of int colors, or 2d Arrays of Float32Array(4) colors. The one thing you should not pass is an Array of numbers, since canvaskit wouldn't be able to tell whether they're ints or floats without checking them all. The fastest choice for gradients is the flat Float32Array, the fastest choice for drawAtlas and MakeSkVertices is the flat Uint32Array.
- Color arrays may also be objects created with CanvasKit.Malloc
- renamed
reportBackendType
toreportBackendTypeIsGPU
and made it return a boolean MakeWebGLCanvasSurface
can now accept an optional dictionary of WebGL context attributes that can be used to override default attributes.
Fixed
TextStyle.color
can correctly be a Malloc'd Float32Array.- Support wombat-dressing-room. go/npm-publish
Deprecated
CanvasKit.MakePathFromCmds
has been renamed toCanvasKit.SkPath.MakeFromCmds
. The alias will be removed in an upcoming release.SkPath.arcTo
Separated into three functions.
[0.16.2] - 2020-06-05
Fixed
- A bug where loading fonts (and other memory intensive calls) would cause CanvasKit
to infrequently crash with
TypeError: Cannot perform %TypedArray%.prototype.set on a neutered ArrayBuffer
. - Incorrectly freeing Malloced colors passed into computeTonalColors.
[0.16.1] - 2020-06-04
Fixed
- Colors are unsigned to be compatible with Flutter Web and previous behavior, not signed ints.
[0.16.0] - 2020-06-03
Added
- Support for wide-gamut color spaces DisplayP3 and AdobeRGB. However, correct representation on a WCG monitor requires that the browser is rendering everything to the DisplayP3 or AdobeRGB profile, since there is not yet any way to indicate to the browser that a canvas element has a non-sRGB color space. See color support example in extra.html. Only supported for WebGL2 backed surfaces.
- Added
SkSurface.reportBackendType
which returns either 'CPU' or 'GPU'. - Added
SkSurface.imageInfo
which returns an ImageInfo object describing the size and color properties of the surface. colorSpace is added to ImageInfo everywhere it is used. CanvasKit.Free
to explicitly clean up memory afterCanvasKit.Malloc
. All memory allocated withCanvasKit.Malloc
must be released withCanvasKit.Free
or it will be leaked. This can improve performance by reducing the copying of data between the JS and WASM side.CanvasKit.ColorAsInt
,SkPaint.setColorComponents
,SkPaint.setColorInt
,SkCanvas.drawColorComponents
,SkCanvas.drawColorInt
for when clients want to avoid the overhead of allocating an array for color components and only need 8888 color.
Changed
- We now compile/ship with Emscripten v1.39.16.
CanvasKit.MakeCanvasSurface
accepts a new enum specifying one of the three color space and pixel format combinations supported by CanvasKit.- all
_Make*Shader
functions now accept a color space argument at the end. leaving it off or passing null makes it behave as it did before, defaulting to sRGB SkPaint.setColor
accepts a new color space argument, defaulting to sRGB.- Fewer allocations required to send Color and Matrices between JS and WASM layer.
- All APIs that take a 1 dimensional array should also accept the object returned by Malloc. It is recommended to pass the Malloc object, as the TypedArray could be invalidated any time CanvasKit needs to allocate memory and needs to resize to accommodate.
Breaking
CanvasKitInit(...)
now directly returns a Promise. As such,CanvasKitInit(...).ready()
has been removed.CanvasKit.MakeCanvasSurface
no longer accepts width/height arguments to override those on the canvas element. Use the canvas element's width/height attributes to dictate the size of the drawing area, and use CSS width/height to set the size it will appear on the page (it is rescaled after drawing when css sizing applies).- Memory returned by
CanvasKit.Malloc
will no longer be automatically cleaned up. Clients must useCanvasKit.Free
to release the memory. CanvasKit.Malloc
no longer directly returns a TypedArray, but an object that can produce them with toTypedArray(). This is to avoid "detached ArrayBuffer" errors: https://github.com/emscripten-core/emscripten/issues/6747
Fixed
- WebGL context is no longer created with "antialias" flag. Using "antialias" caused poor AA quality in Ganesh when trying to do coverage-based AA with MSAA unknowingly enabled. It also reduced performance.
[0.15.0] - 2020-05-14
Added
- Support for DOMMatrix on all APIs that take SkMatrix (i.e. arrays or Float32Arrays of length 6/9/16).
- setEdging and setEmbeddedBitmaps to SkFont. You can disable the ability to draw aliased fonts (and save some code
size) with the compile.sh argument
no_alias_font
.
Removed
- Previously deprecated functions
MakeSkDashPathEffect
,MakeLinearGradientShader
,MakeRadialGradientShader
,MakeTwoPointConicalGradientShader
,MakeSkCornerPathEffect
,MakeSkDiscretePathEffect
Changed
- CanvasKit colors are now represented with a TypedArray of four floats.
- Calls to
getError
should be disabled. This may cause a performance improvement in some scenarios.
Removed
- SkPaint.setColorf is obsolete and removed. setColor accepts a CanvasKit color which is always composed of floats.
- localmatrix option for
SkShader.Lerp
andSkShader.Blend
.
Deprecated
SkCanvas.concat44
has been folded into concat (which now takes 3x2, 3x3, or 4x4 matrices). It will be removed soon.
Fixed
- Memory leak in paragraph binding code (https://github.com/flutter/flutter/issues/56938)
- Safari now properly uses WebGL1 instead of WebGL2 when WebGL2 is not available (skbug.com/10171).
[0.14.0] - 2020-03-18
Added
SkShader.MakeSweepGradient
SkCanvas.saveLayer
can now be called with 1 argument (the paint). In this case the current effective clip will be used, as the current rect is assumed to be null.SkPaint.setAlphaf
- Clients can supply
no_codecs
to compile.sh to remove all codec encoding and decoded code. This can save over 100 kb compressed if codecs are not needed.
Deprecated
MakeSkDashPathEffect
will be removed soon. Calls can be replaced withSkPathEffect.MakeDash
.MakeLinearGradientShader
will be removed soon. Calls can be replaced withSkShader.MakeLinearGradient
.MakeRadialGradientShader
will be removed soon. Calls can be replaced withSkShader.MakeRadialGradient
.MakeTwoPointConicalGradientShader
will be removed soon. Calls can be replaced withSkShader.MakeTwoPointConicalGradient
.
Fixed
- Shadows are properly draw on fillRect and strokeRect in the canvas2d emulation layer.
- Shadow offsets properly ignore the CTM in the canvas2d emulation layer.
Changed
- Stop compiling jpeg and webp encoders by default. This results in a 100kb binary size reduction.
Clients that need these encoders can supply
force_encode_webp
orforce_encode_jpeg
to compile.sh.
Removed
- Removed inverse filltypes.
- Removed StrokeAndFill paint style.
- Removed TextEncoding enum (it was only used internally). All functions assume UTF-8.
[0.13.0] - 2020-02-28
Deprecated
MakeSkCornerPathEffect
will be removed soon. Calls can be replaced withSkPathEffect.MakeCorner
.MakeSkDiscretePathEffect
will be removed soon. Calls can be replaced withSkPathEffect.MakeDiscrete
.
Added
SkSurface.drawOnce
for drawing a single frame (in addition to already existingSkSurface.requestAnimationFrame
for animation logic).CanvasKit.parseColorString
which processes color strings like "#2288FF"- Particles module now exposes effect uniforms, which can be modified for live-updating.
- Experimental 4x4 matrices added in
SkM44
. - Vector math functions added in
SkVector
. SkRuntimeEffect.makeShaderWithChildren
, which can take in other shaders as fragmentProcessors.GrContext.releaseResourcesAndAbandonContext
to free up WebGL contexts.- A few methods on
SkFont
:setHinting
,setLinearMetrics
,setSubpixel
.
Changed
- We now compile/ship with Emscripten v1.39.6.
SkMatrix.multiply
can now accept any number of matrix arguments, multiplying them left-to-right.- SkMatrix.invert now returns null when the matrix is not invertible. Previously it would return an identity matrix. Callers must determine what behavior would be appropriate in this situation.
- In Canvas2D compatibility layer, the underlying SkFont will have setSubpixel(true).
- Bones are removed from Vertices builder
Fixed
- Support for .otf fonts (.woff and .woff2 still not supported).
[0.12.0] - 2020-01-22
Added
SkFontMgr.countFamilies
andSkFontMgr.getFamilyName
to expose the parsed font names.
Changed
- SKP serialization/deserialization now available (can be disabled with the 'no_skp').
SkPicture.DEBUGONLY_saveAsFile
renamed toSkPicture.saveAsFile
andCanvasKit.MakeSkPicture
is now exposed. SKP support is not shipped to npm builds.force_serialize_skp
has been removed since it opt-out, not opt-in.
Fixed
- Bug that sometimes resulted in 'Cannot perform Construct on a neutered ArrayBuffer'
- Bug with SkImage.readPixels (skbug.com/9788)
- Bug with transparent colors in Canvas2d mode (skbug.com/9800)
[0.11.0] - 2020-01-10
Added
- A "Core" build that removes Fonts, the Skottie animation player, the Particles demo,
and PathOps is available in
bin/core/
. It is about half the size of the "CoreWithFonts" build. - Experimental Runtime shader available for custom builds.
- WebP support.
SkAnimatedImage.getCurrentFrame
which returns an SkImage.
Fixed
CanvasKit.SaveLayerInitWithPrevious
andCanvasKit.SaveLayerF16ColorType
constants.- Some compilation configurations, for example, those with no fonts or just one of particles/skottie.
Changed
- Small tweaks to compilation settings to reduce code size and linkage time.
- JS functions are no longer provided when the underlying c++ calls have been compiled out.
Removed
SkShader.Empty
- Support for Type 1 Fonts. These are ancient and removing them saves about 135k of code size.
Breaking
- In an effort to reduce code size for most clients, npm now contains two CanvasKit builds.
In
bin/
there is the "CoreWithFonts" build that contains most functionality from 0.10.0. However, we no longer ship the Skottie animation player, nor the Particles demo. Further, PathOps are removed from this buildMakePathFromOp
,SkPath.op
andSkPath.simplify
. Clients who need any of those features are encouraged to create a custom build usingcompile.sh
. SkPicture.DEBUGONLY_saveAsFile
was accidentally included in release builds. It has been removed. Clients who need this in a release build (e.g. to file a bug report that only reproduces in release) should do a custom build with theforce_serialize_skp
flag given.
Deprecated
SkCanvas.drawAnimatedImage
will be renamed soon. Calls can be replaced withSkCanvas.drawImage
andSkAnimatedImage.getCurrentFrame
.
[0.10.0] - 2019-12-09
Added
SkContourMeasureIter
andSkContourMeasure
as an alternative toSkPathMeasure
.- CanvasKit image decode cache helpers: getDecodeCacheLimitBytes(), setDecodeCacheLimitBytes(), and getDecodeCacheUsedBytes().
SkShader.Blend
,SkShader.Color
,SkShader.Empty
,SkShader.Lerp
.
Changed
- The returned values from
SkParagraph.getRectsForRange
now have direction with valueCanvasKit.TextDirection
.
Fixed
MakeImage
properly in the externs file and can work withCanvasKit.Malloc
.
[0.9.0] - 2019-11-18
Added
- Experimental
CanvasKit.Malloc
, which can be used to create a TypedArray backed by the C++ WASM memory. This can save a copy in some cases (e.g. SkColorFilter.MakeMatrix). This is an advanced feature, so use it with care. SkCanvas.clipRRect
,SkCanvas.drawColor
- Blur, ColorFilter, Compose, MatrixTransform SkImageFilters. Can be used with
SkPaint.setImageFilter
. SkCanvas.saveLayer
now takes 3 or 4 params to include up to bounds, paint, SkImageFilter, flags.SkPath.rArcTo
,SkPath.rConicTo
,SkPath.rCubicTo
,SkPath.rLineTo
,SkPath.rMoveTo
,SkPath.rQuadTo
. Like their non-relative siblings, these are chainable.- Add
width()
,height()
,reset()
,getFrameCount()
to SkAnimatedImage. SkCanvas.drawImageNine
,SkCanvas.drawPoints
and relatedPointMode
enum.SkPath.addPoly
SkPathMeasure.getSegment
- More information on SkParagraph API, eg.
getLongestLine()
,getWordBoundary
, and others.
Deprecated
CanvasKit.MakeBlurMaskFilter
will be renamed/moved soon toCanvasKit.SkMaskFilter.MakeBlur
.
Changed
- Use newer version of Freetype2 (Tracking Skia's DEPS now).
- Use newer versions of libpng and zlib (Tracking Skia's DEPS now).
Fixed
- null dereference when sometimes falling back to CPU.
- Actually ask WebGL for a stencil buffer.
- Can opt out of Paragraph API with no_paragraph passed into compile.sh or when using primitive_shaper.
[0.8.0] - 2019-10-21
Added
CanvasKit.MakeAnimatedImageFromEncoded
,SkCanvas.drawAnimatedImage
.CanvasKit.SkFontMgr.FromData
which takes several ArrayBuffers of font data, parses them, reading the metadata (e.g. family names) and stores them into a SkFontMgr.- SkParagraph as an optional set of APIs for dealing with text layout.
Changed
- The
no_font
compile option should strip out more dead code related to fonts. - and
no_embedded_font
option now allows creating aSkFontMgr.FromData
instead of always having an empty one. - Updated to emscripten 1.38.47
- Switch to WebGL 2.0, but fall back to 1.0 when unavailable - bug.skia.org/9052
Fixed
- Null terminator bug in draw text - skbug.com/9314
[0.7.0] - 2019-09-18
Added
SkCanvas.drawCircle()
,SkCanvas.getSaveCount()
SkPath.offset()
,SkPath.drawOval
SkRRect
support (SkCanvas.drawRRect
,SkCanvas.drawDRRect
,CanvasKit.RRectXY
). Advanced users can specify the 8 individual radii, if needed.CanvasKit.computeTonalColors()
, which returns TonalColors, which has an ambient SkColor and a spot SkColor.CanvasKit.SkColorFilter
and a variety of factories.SkPaint.setColorFilter
is the only consumer of these at the moment.CanvasKit.SkColorMatrix
with functions.identity()
,.scaled()
,.concat()
and others. Primarily for use withCanvasKit.SkColorFilter.MakeMatrix
.
Changed
MakeSkVertices
uses a builder to save a copy.
Breaking
- When
SkPath.arcTo
is given seven arguments, it no longer turns the first four into aSkRect
automatically, and instead uses them asarcTo(rx, ry, xAxisRotate, useSmallArc, isCCW, x, y)
(see SkPath.h for more).
[0.6.0] - 2019-05-06
Added
SkSurface.grContext
now exposed.GrContext
has new methods for monitoring/setting the cache limits; tweaking these may lead to better performance in some cases.getResourceCacheLimitBytes
,setResourceCacheLimitBytes
,getResourceCacheUsageBytes
SkCanvas.drawAtlas
for efficiently drawing multiple sprites from a sprite sheet with a set of transforms, color blends, etc.SkColorBuilder
,RSXFormBuilder
,SkRectBuilder
which increase performance by reducing the amount of malloc/free calls per frame, given that the array size is fixed.- Basic
SkPicture
support.SkSurface.captureFrameAsSkPicture
is a helper function to capture anSkPicture
, which can be dumped to disk (for debugging) withSkPicture.DEBUGONLY_saveAsFile
. SkImage.readPixels
, which returns a TypedArray of pixel values (safe to use anywhere, doesn't need a delete()).
Changed
- Better
GrGLCaps
support for WebGL - this shouldn't have any impacts on APIs or correctness, except by perhaps fixing a few bugs in various surface types. - Use unsigned ints for SkColor on the JS side - this shouldn't have any impacts unless clients have pre-computed colors, in which case, they will need to re-compute them.
- [breaking] Moved
CanvasKit.MakeImageShader
toSkImage.makeShader
- removed clampUnpremul as argument.
[0.5.1] - 2019-03-21
Added
SkPathMeasure
,RSXFormBuilder
,SkFont.getWidths
,SkTextBlob.MakeFromRSXform
which were needed to add the helper functionSkTextBlob.MakeOnPath
.SkSurface.requestAnimationFrame
- wrapper around window.requestAnimationFrame that takes care of the setup/tear down required to use CanvasKit optimally. The callback has anSkCanvas
as the first parameter - callers should draw on that.
Changed
- Location in Skia Git repo now
modules/canvaskit
(wasexperimental/canvaskit
)
Fixed
- Extern bug in
CanvasKit.SkMatrix.invert
- Fallback to CPU now properly refreshes the canvas to get access to the CanvasRenderingContext2D.
- Compile flags for better WebGL1 support for some graphics cards.
- Antialias bug on large oval paths https://crbug.com/skia/8873
Deprecated
SkCanvas.flush
will be removed soon - client should only callSkSurface.flush
[0.5.0] - 2019-03-08
Added
- isVolitile option to
CanvasKit.MakeSkVertices
. The previous (and current default) behavior was for this to be true; some applications may go faster if set to false. SkCanvas.saveLayer(rect, paint)
SkCanvas.restoreToCount(int)
which can be used with the output of .save() and .saveLayer().- Optional particles library from modules/particles.
See CanvasKit.MakeParticles(json)
; - More public APIs for working with Surfaces/Contexts
GetWebGLContext
,MakeGrContext
,MakeOnScreenGLSurface
,MakeRenderTarget
. SkSurface.getSurface()
andSkCanvas.getSurface()
for making compatible surfaces (typically used as a workspace and then "saved" withsurface.makeImageSnapshot()
)
Breaking
CanvasKit.MakeWebGLCanvasSurface
no longer takes a webgl context as a first arg, only a canvas or an id of a canvas. If users want to manage their own GL contexts, they should build theSkSurface
themselves withGetWebGLContext
->MakeGrContext
->MakeOnScreenGLSurface
.
[0.4.1] - 2019-03-01
Added
- Optional arguments to
MakeManagedAnimation
for supplying external assets (like images, fonts).
[0.4.0] - 2019-02-25
Added
SkPath.addRoundRect
,SkPath.reset
,SkPath.rewind
exposed.SkCanvas.drawArc
,SkCanvas.drawLine
,SkCanvas.drawOval
,SkCanvas.drawRoundRect
exposed.- Can import/export a SkPath to an array of commands. See
CanvasKit.MakePathFromCmds
andSkPath.toCmds
. SkCanvas.drawTextBlob()
andSkCanvas.SkTextBlob.MakeFromText()
to draw text to a canvas.CanvasKit.TextEncoding
enum. For use withSkTextBlob
.- Text shaping with
ShapedText
object andSkCanvas.drawText
. At compile time, one can choose between using Harfbuzz/ICU (default) or a primitive one ("primitive_shaper") which just does line breaking. Using Harfbuzz/ICU substantially increases code size (4.3 MB to 6.4 MB).
Changed
SkCanvas.drawText()
now requires anSkFont
object for raw strings.
Removed
SkPaint.setTextSize()
,SkPaint.getTextSize()
,SkPaint.setTypeface()
which should be replaced by usingSkFont
.- Deprecated
CanvasKitInit().then()
interface (see 0.3.1 notes)
Fixed
- Potential bug in
ready()
if already loaded.
[0.3.1] - 2019-01-04
Added
SkFont
now exposed.MakeCanvasSurface
can now take a canvas element directly.MakeWebGLCanvasSurface
can now take a WebGL context as an integer and use it directly.
Changed
CanvasKitInit(...).then()
is no longer the recommended way to initialize things. It will be removed in 0.4.0. UseCanvasKitInit(...).ready()
, which returns a real Promise.
Removed
SkPaint.measureText
- useSkFont.measureText
instead.
[0.3.0] - 2018-12-18
Added
- Add Canvas2D JS layer. This mirrors the HTML Canvas API. This may be omitted at compile time
it by adding
no_canvas
to thecompile.sh
invocation. CanvasKit.FontMgr.DefaultRef()
andfontmgr.MakeTypefaceFromData
to load fonts.- Exposed
SkPath.setVolatile
. Some animations see performance improvements by setting their paths' volatility to true.
Fixed
SkPath.addRect
now correctly draws counter-clockwise vs clockwise.
Changed
CanvasKit.MakeImageShader
no longer takes encoded bytes, but anSkImage
, created fromCanvasKit.MakeImageFromEncoded
. Additionally, the optional parametersclampIfUnpremul
andlocalMatrix
have been exposed.SkPath.arcTo
now takesstartAngle
,sweepAngle
,forceMoveTo
as additional parameters.SkPath.stroke
has a new optionprecision
It defaults to 1.0.- CanvasKit comes with one font (NotoMono) instead of the Skia TestTypeface. Clients are encouraged
to use the new
fontmgr.MakeTypefaceFromData
for more font variety.
Removed
CanvasKit.initFonts()
- no longer needed.
[0.2.1] - 2018-11-20
Beginning of Changelog history