// 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" 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 to get the visual that matches the given ID. GdkVisual* (*get_visual)(FlRenderer* renderer, GdkScreen* screen, EGLint visual_id); /** * Virtual method called after a GDK window has been created. * This is called once. Does not need to be implemented. */ void (*set_window)(FlRenderer* renderer, GdkWindow* window); /** * 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. * @display: display to create surfaces on. * @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, 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_setup: * @renderer: an #FlRenderer. * @error: (allow-none): #GError location to store the error occurring, or %NULL * to ignore. * * Set up the renderer. * * Returns: %TRUE if successfully setup. */ gboolean fl_renderer_setup(FlRenderer* renderer, GError** error); /** * fl_renderer_get_visual: * @renderer: an #FlRenderer. * @screen: the screen being rendered on. * @error: (allow-none): #GError location to store the error occurring, or %NULL * to ignore. * * Gets the visual required to render on. * * Returns: a #GdkVisual. */ GdkVisual* fl_renderer_get_visual(FlRenderer* renderer, GdkScreen* screen, GError** error); /** * fl_renderer_set_window: * @renderer: an #FlRenderer. * @window: the GDK Window this renderer will render to. * * Set the window this renderer will use. */ void fl_renderer_set_window(FlRenderer* renderer, GdkWindow* window); /** * fl_renderer_start: * @renderer: an #FlRenderer. * @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, 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_