// 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 #include #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_