Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
surface.h
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_SKWASM_SURFACE_H_
6#define FLUTTER_SKWASM_SURFACE_H_
7
8#include <GLES2/gl2.h>
9#include <GLES2/gl2ext.h>
10#include <emscripten.h>
11#include <emscripten/html5_webgl.h>
12#include <emscripten/threading.h>
13#include <webgl/webgl1.h>
14#include <cassert>
15#include "export.h"
16#include "render_context.h"
17#include "wrappers.h"
18
19namespace flutter {
20class DisplayList;
21}
22
23namespace Skwasm {
24
25unsigned long GetRasterThread();
26
34
35class Surface {
36 public:
37 using CallbackHandler = void(uint32_t, void*, SkwasmObject);
38
39 // Main thread only
40 Surface();
41
42 // General getters
43 EMSCRIPTEN_WEBGL_CONTEXT_HANDLE GetGlContext() { return gl_context_; }
44
45 // Lifecycle
47 void Dispose();
48
49 // Surface setup
50 uint32_t SetCanvas(SkwasmObject canvas);
51 void OnInitialized(uint32_t callback_id);
52 void ReceiveCanvasOnWorker(SkwasmObject canvas, uint32_t callback_id);
53
54 // Resizing
55 uint32_t SetSize(int width, int height);
56 void OnResizeComplete(uint32_t callback_id);
57 void ResizeOnWorker(int width, int height, uint32_t callback_id);
58
59 // Rendering
60 uint32_t RenderPictures(flutter::DisplayList** picture, int count);
61 void OnRenderComplete(uint32_t callback_id, SkwasmObject image_bitmap);
62 void RenderPicturesOnWorker(sk_sp<flutter::DisplayList>* picture,
63 int picture_count,
64 uint32_t callback_id,
65 double raster_start);
66
67 // Image Rasterization
69 void OnRasterizeComplete(uint32_t callback_id, SkData* data);
71 ImageByteFormat format,
72 uint32_t callback_id);
73
74 // Context Loss
75 uint32_t TriggerContextLoss();
76 void OnContextLossTriggered(uint32_t callback_id);
77 void ReportContextLost(uint32_t callback_id);
78 void TriggerContextLossOnWorker(uint32_t callback_id);
79 void OnContextLost();
80
81 // Other
82 void SetResourceCacheLimit(int bytes);
83 std::unique_ptr<TextureSourceWrapper> CreateTextureSourceWrapper(
84 SkwasmObject textureSource);
85
86 private:
87 void Init();
88 void ResizeSurface(int width, int height);
89 void RecreateSurface();
90
91 CallbackHandler* callback_handler_ = nullptr;
92 uint32_t current_callback_id_ = 0;
93
94 int canvas_width_ = 0;
95 int canvas_height_ = 0;
96
97 EMSCRIPTEN_WEBGL_CONTEXT_HANDLE gl_context_ = 0;
98 std::unique_ptr<RenderContext> render_context_;
99 uint32_t context_lost_callback_id_ = 0;
100
101 bool is_initialized_ = false;
102};
103} // namespace Skwasm
104
105#endif // FLUTTER_SKWASM_SURFACE_H_
void TriggerContextLossOnWorker(uint32_t callback_id)
Definition surface.cc:275
void ReceiveCanvasOnWorker(SkwasmObject canvas, uint32_t callback_id)
Definition surface.cc:100
void ReportContextLost(uint32_t callback_id)
Definition surface.cc:270
std::unique_ptr< TextureSourceWrapper > CreateTextureSourceWrapper(SkwasmObject textureSource)
Definition surface.cc:296
uint32_t SetSize(int width, int height)
Definition surface.cc:139
uint32_t TriggerContextLoss()
Definition surface.cc:258
void OnContextLost()
Definition surface.cc:281
void RasterizeImageOnWorker(flutter::DlImage *image, ImageByteFormat format, uint32_t callback_id)
Definition surface.cc:230
void OnInitialized(uint32_t callback_id)
Definition surface.cc:93
uint32_t SetCanvas(SkwasmObject canvas)
Definition surface.cc:86
void(uint32_t, void *, SkwasmObject) CallbackHandler
Definition surface.h:37
uint32_t RasterizeImage(flutter::DlImage *image, ImageByteFormat format)
Definition surface.cc:214
EMSCRIPTEN_WEBGL_CONTEXT_HANDLE GetGlContext()
Definition surface.h:43
uint32_t RenderPictures(flutter::DisplayList **picture, int count)
Definition surface.cc:170
void OnRenderComplete(uint32_t callback_id, SkwasmObject image_bitmap)
Definition surface.cc:187
void OnRasterizeComplete(uint32_t callback_id, SkData *data)
Definition surface.cc:225
void OnResizeComplete(uint32_t callback_id)
Definition surface.cc:148
void Dispose()
Definition surface.cc:78
void RenderPicturesOnWorker(sk_sp< flutter::DisplayList > *picture, int picture_count, uint32_t callback_id, double raster_start)
Definition surface.cc:193
void SetCallbackHandler(CallbackHandler *callback_handler)
Definition surface.cc:73
void ResizeOnWorker(int width, int height, uint32_t callback_id)
Definition surface.cc:153
void SetResourceCacheLimit(int bytes)
Definition surface.cc:291
void OnContextLossTriggered(uint32_t callback_id)
Definition surface.cc:265
SkwasmObject GetTextureSource()
Definition surface.cc:320
Represents an image whose allocation is (usually) resident on device memory.
Definition dl_image.h:34
FlutterVulkanImage * image
CallbackHandler callback_handler
__externref_t SkwasmObject
Definition wrappers.h:18
unsigned long GetRasterThread()
Definition surface.cc:44
ImageByteFormat
Definition helpers.h:75
flutter::DisplayList DisplayList
int32_t height
int32_t width