| // 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 <EGL/egl.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" |
| |
| G_BEGIN_DECLS |
| |
| /** |
| * FlRendererError: |
| * Errors for #FlRenderer objects to set on failures. |
| */ |
| |
| typedef enum { |
| FL_RENDERER_ERROR_FAILED, |
| } 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 before creating a GdkWindow for the widget. |
| * Does not need to be implemented. |
| * @renderer: an #FlRenderer. |
| * @widget: the widget being rendered on. |
| * @display: display to create surfaces on. |
| * @config: EGL configuration. |
| * @window_attributes: window attributes to modify. |
| * @mask: (out): the window mask to use. |
| * @error: (allow-none): #GError location to store the error occurring, or |
| * %NULL to ignore. |
| * |
| * Returns: %TRUE if the window is successfully set up. |
| */ |
| gboolean (*setup_window_attr)(FlRenderer* renderer, |
| GtkWidget* widget, |
| EGLDisplay display, |
| EGLConfig config, |
| GdkWindowAttr* window_attributes, |
| gint* mask, |
| GError** error); |
| |
| /** |
| * Virtual method to create a new EGL display. |
| */ |
| EGLDisplay (*create_display)(FlRenderer* renderer); |
| |
| /** |
| * Virtual method called when Flutter needs surfaces to render to. |
| * @renderer: an #FlRenderer. |
| * @widget: the widget being rendered on. |
| * @display: display to create surfaces on. |
| * @config: EGL configuration. |
| * @visible: (out): the visible surface that is created. |
| * @resource: (out): the resource surface that is created. |
| * @error: (allow-none): #GError location to store the error occurring, or |
| * %NULL to ignore. |
| * |
| * Returns: %TRUE if both surfaces were created, %FALSE if there was an error. |
| */ |
| gboolean (*create_surfaces)(FlRenderer* renderer, |
| GtkWidget* widget, |
| EGLDisplay display, |
| EGLConfig config, |
| EGLSurface* visible, |
| EGLSurface* resource, |
| GError** error); |
| |
| /** |
| * Virtual method called when the EGL window needs to be resized. |
| * Does not need to be implemented. |
| */ |
| void (*set_geometry)(FlRenderer* renderer, |
| GdkRectangle* geometry, |
| gint scale); |
| }; |
| |
| /** |
| * fl_renderer_start: |
| * @renderer: an #FlRenderer. |
| * @widget: the widget Flutter is renderering to. |
| * @error: (allow-none): #GError location to store the error occurring, or %NULL |
| * to ignore. |
| * |
| * Start the renderer. |
| * |
| * Returns: %TRUE if successfully started. |
| */ |
| gboolean fl_renderer_start(FlRenderer* renderer, |
| GtkWidget* widget, |
| GError** error); |
| |
| /** |
| * fl_renderer_set_geometry: |
| * @renderer: an #FlRenderer. |
| * @geometry: New size and position (unscaled) of the EGL window. |
| * @scale: Scale of the window. |
| */ |
| void fl_renderer_set_geometry(FlRenderer* renderer, |
| GdkRectangle* geometry, |
| gint scale); |
| |
| /** |
| * 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. |
| * @error: (allow-none): #GError location to store the error occurring, or %NULL |
| * to ignore. |
| * |
| * Makes the rendering context current. |
| * |
| * Returns %TRUE if successful. |
| */ |
| gboolean fl_renderer_make_current(FlRenderer* renderer, GError** error); |
| |
| /** |
| * fl_renderer_make_resource_current: |
| * @renderer: an #FlRenderer. |
| * @error: (allow-none): #GError location to store the error occurring, or %NULL |
| * to ignore. |
| * |
| * Makes the resource rendering context current. |
| * |
| * Returns %TRUE if successful. |
| */ |
| gboolean fl_renderer_make_resource_current(FlRenderer* renderer, |
| GError** error); |
| |
| /** |
| * fl_renderer_clear_current: |
| * @renderer: an #FlRenderer. |
| * @error: (allow-none): #GError location to store the error occurring, or %NULL |
| * to ignore. |
| * |
| * Clears the current rendering context. |
| * |
| * Returns %TRUE if successful. |
| */ |
| gboolean fl_renderer_clear_current(FlRenderer* renderer, GError** error); |
| |
| /** |
| * 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_present: |
| * @renderer: an #FlRenderer. |
| * @error: (allow-none): #GError location to store the error occurring, or %NULL |
| * to ignore. |
| * |
| * Presents the current frame. |
| * |
| * Returns %TRUE if successful. |
| */ |
| gboolean fl_renderer_present(FlRenderer* renderer, GError** error); |
| |
| G_END_DECLS |
| |
| #endif // FLUTTER_SHELL_PLATFORM_LINUX_FL_RENDERER_H_ |