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
26 public:
27 TextureSourceWrapper(unsigned long thread_id, SkwasmObject texture_source);
29
31
32 private:
33 unsigned long raster_thread_id_;
34};
35
36class Surface {
37 public:
38 using CallbackHandler = void(uint32_t, void*, SkwasmObject);
39
40 // Main thread only
41 Surface();
42
43 // General getters
44 unsigned long GetThreadId() { return thread_; }
45 EMSCRIPTEN_WEBGL_CONTEXT_HANDLE GetGlContext() { return gl_context_; }
46
47 // Lifecycle
49 void Dispose();
50
51 // Surface setup
52 uint32_t SetCanvas(SkwasmObject canvas);
53 void OnInitialized(uint32_t callback_id);
54 void ReceiveCanvasOnWorker(SkwasmObject canvas, uint32_t callback_id);
55
56 // Resizing
57 uint32_t SetSize(int width, int height);
58 void OnResizeComplete(uint32_t callback_id);
59 void ResizeOnWorker(int width, int height, uint32_t callback_id);
60
61 // Rendering
62 uint32_t RenderPictures(flutter::DisplayList** picture, int count);
63 void OnRenderComplete(uint32_t callback_id, SkwasmObject image_bitmap);
64 void RenderPicturesOnWorker(sk_sp<flutter::DisplayList>* picture,
65 int picture_count,
66 uint32_t callback_id,
67 double raster_start);
68
69 // Image Rasterization
71 void OnRasterizeComplete(uint32_t callback_id, SkData* data);
73 ImageByteFormat format,
74 uint32_t callback_id);
75
76 // Context Loss
77 uint32_t TriggerContextLoss();
78 void OnContextLossTriggered(uint32_t callback_id);
79 void ReportContextLost(uint32_t callback_id);
80 void TriggerContextLossOnWorker(uint32_t callback_id);
81 void OnContextLost();
82
83 // Other
84 void SetResourceCacheLimit(int bytes);
85 std::unique_ptr<TextureSourceWrapper> CreateTextureSourceWrapper(
86 SkwasmObject textureSource);
87
88 private:
89 void Init();
90 void ResizeSurface(int width, int height);
91 void RecreateSurface();
92
93 CallbackHandler* callback_handler_ = nullptr;
94 uint32_t current_callback_id_ = 0;
95
96 int canvas_width_ = 0;
97 int canvas_height_ = 0;
98
99 EMSCRIPTEN_WEBGL_CONTEXT_HANDLE gl_context_ = 0;
100 std::unique_ptr<RenderContext> render_context_;
101 uint32_t context_lost_callback_id_ = 0;
102
103 unsigned long thread_;
104
105 bool is_initialized_ = false;
106};
107} // namespace Skwasm
108
109#endif // FLUTTER_SKWASM_SURFACE_H_
void TriggerContextLossOnWorker(uint32_t callback_id)
Definition surface.cc:273
void ReceiveCanvasOnWorker(SkwasmObject canvas, uint32_t callback_id)
Definition surface.cc:92
void ReportContextLost(uint32_t callback_id)
Definition surface.cc:268
unsigned long GetThreadId()
Definition surface.h:44
std::unique_ptr< TextureSourceWrapper > CreateTextureSourceWrapper(SkwasmObject textureSource)
Definition surface.cc:294
uint32_t SetSize(int width, int height)
Definition surface.cc:130
uint32_t TriggerContextLoss()
Definition surface.cc:256
void OnContextLost()
Definition surface.cc:279
void RasterizeImageOnWorker(flutter::DlImage *image, ImageByteFormat format, uint32_t callback_id)
Definition surface.cc:219
void OnInitialized(uint32_t callback_id)
Definition surface.cc:85
uint32_t SetCanvas(SkwasmObject canvas)
Definition surface.cc:78
void(uint32_t, void *, SkwasmObject) CallbackHandler
Definition surface.h:38
uint32_t RasterizeImage(flutter::DlImage *image, ImageByteFormat format)
Definition surface.cc:204
EMSCRIPTEN_WEBGL_CONTEXT_HANDLE GetGlContext()
Definition surface.h:45
uint32_t RenderPictures(flutter::DisplayList **picture, int count)
Definition surface.cc:160
void OnRenderComplete(uint32_t callback_id, SkwasmObject image_bitmap)
Definition surface.cc:177
void OnRasterizeComplete(uint32_t callback_id, SkData *data)
Definition surface.cc:214
void OnResizeComplete(uint32_t callback_id)
Definition surface.cc:138
void Dispose()
Definition surface.cc:70
void RenderPicturesOnWorker(sk_sp< flutter::DisplayList > *picture, int picture_count, uint32_t callback_id, double raster_start)
Definition surface.cc:183
void SetCallbackHandler(CallbackHandler *callback_handler)
Definition surface.cc:65
void ResizeOnWorker(int width, int height, uint32_t callback_id)
Definition surface.cc:143
void SetResourceCacheLimit(int bytes)
Definition surface.cc:289
void OnContextLossTriggered(uint32_t callback_id)
Definition surface.cc:263
SkwasmObject GetTextureSource()
Definition surface.cc:319
Represents an image whose allocation is (usually) resident on device memory.
Definition dl_image.h:32
FlutterVulkanImage * image
CallbackHandler callback_handler
__externref_t SkwasmObject
Definition wrappers.h:18
ImageByteFormat
Definition helpers.h:75
flutter::DisplayList DisplayList
int32_t height
int32_t width
std::shared_ptr< const fml::Mapping > data