Skip to content

Commit 13bbe3d

Browse files
Reland "Use a single OffscreenCanvas for rendering in CanvasKit (flutter#45744)" (flutter#47241)
Using a single GL context avoids several issues with managing GL context lifecycle. - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide] and the [C++, Objective-C, Java style guides]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I added new tests to check the change I am making or feature I am adding, or the PR is [test-exempt]. See [testing the engine] for instructions on writing and running engine tests. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I signed the [CLA]. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [test-exempt]: https://github.com/flutter/flutter/wiki/Tree-hygiene#tests [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style [testing the engine]: https://github.com/flutter/flutter/wiki/Testing-the-engine [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat
1 parent 3f3e560 commit 13bbe3d

20 files changed

+814
-850
lines changed

ci/licenses_golden/licenses_flutter

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1974,10 +1974,11 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/picture_recorder.da
19741974
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/platform_message.dart + ../../../flutter/LICENSE
19751975
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/raster_cache.dart + ../../../flutter/LICENSE
19761976
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/rasterizer.dart + ../../../flutter/LICENSE
1977+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/render_canvas.dart + ../../../flutter/LICENSE
1978+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/render_canvas_factory.dart + ../../../flutter/LICENSE
19771979
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/renderer.dart + ../../../flutter/LICENSE
19781980
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/shader.dart + ../../../flutter/LICENSE
19791981
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/surface.dart + ../../../flutter/LICENSE
1980-
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/surface_factory.dart + ../../../flutter/LICENSE
19811982
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/text.dart + ../../../flutter/LICENSE
19821983
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/text_fragmenter.dart + ../../../flutter/LICENSE
19831984
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/util.dart + ../../../flutter/LICENSE
@@ -4734,10 +4735,11 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/picture_recorder.dart
47344735
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/platform_message.dart
47354736
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/raster_cache.dart
47364737
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/rasterizer.dart
4738+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/render_canvas.dart
4739+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/render_canvas_factory.dart
47374740
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/renderer.dart
47384741
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/shader.dart
47394742
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/surface.dart
4740-
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/surface_factory.dart
47414743
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/text.dart
47424744
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/text_fragmenter.dart
47434745
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/util.dart

lib/web_ui/lib/src/engine.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,11 @@ export 'engine/canvaskit/picture.dart';
4343
export 'engine/canvaskit/picture_recorder.dart';
4444
export 'engine/canvaskit/raster_cache.dart';
4545
export 'engine/canvaskit/rasterizer.dart';
46+
export 'engine/canvaskit/render_canvas.dart';
47+
export 'engine/canvaskit/render_canvas_factory.dart';
4648
export 'engine/canvaskit/renderer.dart';
4749
export 'engine/canvaskit/shader.dart';
4850
export 'engine/canvaskit/surface.dart';
49-
export 'engine/canvaskit/surface_factory.dart';
5051
export 'engine/canvaskit/text.dart';
5152
export 'engine/canvaskit/text_fragmenter.dart';
5253
export 'engine/canvaskit/util.dart';

lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,13 @@ extension CanvasKitExtension on CanvasKit {
161161
DomCanvasElement canvas, SkWebGLContextOptions options) =>
162162
_GetWebGLContext(canvas, options).toDartDouble;
163163

164+
@JS('GetWebGLContext')
165+
external JSNumber _GetOffscreenWebGLContext(
166+
DomOffscreenCanvas canvas, SkWebGLContextOptions options);
167+
double GetOffscreenWebGLContext(
168+
DomOffscreenCanvas canvas, SkWebGLContextOptions options) =>
169+
_GetOffscreenWebGLContext(canvas, options).toDartDouble;
170+
164171
@JS('MakeGrContext')
165172
external SkGrContext _MakeGrContext(JSNumber glContext);
166173
SkGrContext MakeGrContext(double glContext) =>
@@ -199,6 +206,9 @@ extension CanvasKitExtension on CanvasKit {
199206

200207
external SkSurface MakeSWCanvasSurface(DomCanvasElement canvas);
201208

209+
@JS('MakeSWCanvasSurface')
210+
external SkSurface MakeOffscreenSWCanvasSurface(DomOffscreenCanvas canvas);
211+
202212
/// Creates an image from decoded pixels represented as a list of bytes.
203213
///
204214
/// The pixel data must be encoded according to the image info in [info].

0 commit comments

Comments
 (0)