forked from flutter/engine
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fl_renderer.h
247 lines (214 loc) · 6.55 KB
/
fl_renderer.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_SHELL_PLATFORM_LINUX_FL_RENDERER_H_
#define FLUTTER_SHELL_PLATFORM_LINUX_FL_RENDERER_H_
#include <gtk/gtk.h>
#include "flutter/shell/platform/linux/public/flutter_linux/fl_dart_project.h"
#include "flutter/shell/platform/linux/public/flutter_linux/fl_view.h"
#include "flutter/shell/platform/embedder/embedder.h"
G_BEGIN_DECLS
/**
* FlRendererError:
* Errors for #FlRenderer objects to set on failures.
*/
typedef enum {
// NOLINTBEGIN(readability-identifier-naming)
FL_RENDERER_ERROR_FAILED,
// NOLINTEND(readability-identifier-naming)
} FlRendererError;
GQuark fl_renderer_error_quark(void) G_GNUC_CONST;
G_DECLARE_DERIVABLE_TYPE(FlRenderer, fl_renderer, FL, RENDERER, GObject)
/**
* FlRenderer:
*
* #FlRenderer is an abstract class that allows Flutter to draw pixels.
*/
struct _FlRendererClass {
GObjectClass parent_class;
/**
* Virtual method called when Flutter needs to make the OpenGL context
* current.
* @renderer: an #FlRenderer.
*/
void (*make_current)(FlRenderer* renderer);
/**
* Virtual method called when Flutter needs to make the OpenGL resource
* context current.
* @renderer: an #FlRenderer.
*/
void (*make_resource_current)(FlRenderer* renderer);
/**
* Virtual method called when Flutter needs to clear the OpenGL context.
* @renderer: an #FlRenderer.
*/
void (*clear_current)(FlRenderer* renderer);
/**
* Virtual method called when Flutter needs a backing store for a specific
* #FlutterLayer.
* @renderer: an #FlRenderer.
* @config: backing store config.
* @backing_store_out: saves created backing store.
*
* Returns %TRUE if successful.
*/
gboolean (*create_backing_store)(FlRenderer* renderer,
const FlutterBackingStoreConfig* config,
FlutterBackingStore* backing_store_out);
/**
* Virtual method called when Flutter wants to release the backing store.
* @renderer: an #FlRenderer.
* @backing_store: backing store to be released.
*
* Returns %TRUE if successful.
*/
gboolean (*collect_backing_store)(FlRenderer* renderer,
const FlutterBackingStore* backing_store);
/**
* Virtual method called when Flutter wants to get the refresh rate of the
* renderer.
* @renderer: an #FlRenderer.
*
* Returns: The refresh rate of the display in Hz. If the refresh rate is
* not available, returns -1.0.
*/
gdouble (*get_refresh_rate)(FlRenderer* renderer);
};
/**
* fl_renderer_start:
* @renderer: an #FlRenderer.
* @view: the view Flutter is renderering to.
*
* Start the renderer.
*
* Returns: %TRUE if successfully started.
*/
gboolean fl_renderer_start(FlRenderer* renderer, FlView* view);
/**
* fl_renderer_get_proc_address:
* @renderer: an #FlRenderer.
* @name: a function name.
*
* Gets the rendering API function that matches the given name.
*
* Returns: a function pointer.
*/
void* fl_renderer_get_proc_address(FlRenderer* renderer, const char* name);
/**
* fl_renderer_make_current:
* @renderer: an #FlRenderer.
*
* Makes the rendering context current.
*/
void fl_renderer_make_current(FlRenderer* renderer);
/**
* fl_renderer_make_resource_current:
* @renderer: an #FlRenderer.
*
* Makes the resource rendering context current.
*/
void fl_renderer_make_resource_current(FlRenderer* renderer);
/**
* fl_renderer_clear_current:
* @renderer: an #FlRenderer.
*
* Clears the current rendering context.
*/
void fl_renderer_clear_current(FlRenderer* renderer);
/**
* fl_renderer_get_fbo:
* @renderer: an #FlRenderer.
*
* Gets the frame buffer object to render to.
*
* Returns: a frame buffer object index.
*/
guint32 fl_renderer_get_fbo(FlRenderer* renderer);
/**
* fl_renderer_create_backing_store:
* @renderer: an #FlRenderer.
* @config: backing store config.
* @backing_store_out: saves created backing store.
*
* Obtain a backing store for a specific #FlutterLayer.
*
* Returns %TRUE if successful.
*/
gboolean fl_renderer_create_backing_store(
FlRenderer* renderer,
const FlutterBackingStoreConfig* config,
FlutterBackingStore* backing_store_out);
/**
* fl_renderer_collect_backing_store:
* @renderer: an #FlRenderer.
* @backing_store: backing store to be released.
*
* A callback invoked by the engine to release the backing store. The
* embedder may collect any resources associated with the backing store.
*
* Returns %TRUE if successful.
*/
gboolean fl_renderer_collect_backing_store(
FlRenderer* renderer,
const FlutterBackingStore* backing_store);
/**
* fl_renderer_present_layers:
* @renderer: an #FlRenderer.
* @layers: layers to be composited.
* @layers_count: number of layers.
*
* Callback invoked by the engine to composite the contents of each layer
* onto the screen.
*
* Returns %TRUE if successful.
*/
gboolean fl_renderer_present_layers(FlRenderer* renderer,
const FlutterLayer** layers,
size_t layers_count);
/**
* fl_renderer_wait_for_frame:
* @renderer: an #FlRenderer.
* @target_width: width of frame being waited for
* @target_height: height of frame being waited for
*
* Holds the thread until frame with requested dimensions is presented.
* While waiting for frame Flutter platform and raster tasks are being
* processed.
*/
void fl_renderer_wait_for_frame(FlRenderer* renderer,
int target_width,
int target_height);
/**
* fl_renderer_setup:
* @renderer: an #FlRenderer.
*
* Creates OpenGL resources required before rendering. Requires an active OpenGL
* context.
*/
void fl_renderer_setup(FlRenderer* renderer);
/**
* fl_renderer_render:
* @renderer: an #FlRenderer.
* @width: width of the window in pixels.
* @height: height of the window in pixels.
*
* Performs OpenGL commands to render current Flutter view.
*/
void fl_renderer_render(FlRenderer* renderer, int width, int height);
/**
* fl_renderer_cleanup:
*
* Removes OpenGL resources used for rendering. Requires an active OpenGL
* context.
*/
void fl_renderer_cleanup(FlRenderer* renderer);
/**
* fl_renderer_get_refresh_rate:
* @renderer: an #FlRenderer.
*
* Returns: The refresh rate of the display in Hz. If the refresh rate is
* not available, returns -1.0.
*/
gdouble fl_renderer_get_refresh_rate(FlRenderer* renderer);
G_END_DECLS
#endif // FLUTTER_SHELL_PLATFORM_LINUX_FL_RENDERER_H_