From ea61968950bc4b99f68e1169d7583aa06bf3f607 Mon Sep 17 00:00:00 2001 From: Robert Ancell Date: Tue, 23 Jul 2024 16:12:35 +0100 Subject: [PATCH] Rename FlBackingStoreProvider to FlFramebuffer The name was confusing, as it only provided one type of backing store. FlBackingStoreProvider sounds more like an interface that the FlFramebuffer would implement if we had multiple backing stores. Use OpenGL types for values. Fix cases where this was sometimes called a texture. Improve documentation. Remove the use of GdkRectangle for dimensions - the framebuffer only has a width and a height. There was code that was using the x,y values which would always have been zero - this has now been removed. --- ci/licenses_golden/licenses_flutter | 8 +- shell/platform/linux/BUILD.gn | 2 +- .../linux/fl_backing_store_provider.h | 96 ------------------- ...ng_store_provider.cc => fl_framebuffer.cc} | 66 +++++++------ shell/platform/linux/fl_framebuffer.h | 95 ++++++++++++++++++ shell/platform/linux/fl_renderer.cc | 81 +++++++--------- shell/platform/linux/fl_renderer_test.cc | 7 +- shell/platform/linux/fl_view.cc | 2 +- 8 files changed, 175 insertions(+), 182 deletions(-) delete mode 100644 shell/platform/linux/fl_backing_store_provider.h rename shell/platform/linux/{fl_backing_store_provider.cc => fl_framebuffer.cc} (59%) create mode 100644 shell/platform/linux/fl_framebuffer.h diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index c3966f5aed8d5..507040d6dc782 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -44061,8 +44061,6 @@ ORIGIN: ../../../flutter/shell/platform/linux/fl_accessible_node_test.cc + ../.. ORIGIN: ../../../flutter/shell/platform/linux/fl_accessible_text_field.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/linux/fl_accessible_text_field.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/linux/fl_accessible_text_field_test.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/shell/platform/linux/fl_backing_store_provider.cc + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/shell/platform/linux/fl_backing_store_provider.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/linux/fl_basic_message_channel.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/linux/fl_basic_message_channel_test.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/linux/fl_binary_codec.cc + ../../../flutter/LICENSE @@ -44078,6 +44076,8 @@ ORIGIN: ../../../flutter/shell/platform/linux/fl_engine_private.h + ../../../flu ORIGIN: ../../../flutter/shell/platform/linux/fl_engine_test.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/linux/fl_event_channel.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/linux/fl_event_channel_test.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/shell/platform/linux/fl_framebuffer.cc + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/shell/platform/linux/fl_framebuffer.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/linux/fl_gnome_settings.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/linux/fl_gnome_settings.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/linux/fl_gnome_settings_test.cc + ../../../flutter/LICENSE @@ -46968,8 +46968,6 @@ FILE: ../../../flutter/shell/platform/linux/fl_accessible_node_test.cc FILE: ../../../flutter/shell/platform/linux/fl_accessible_text_field.cc FILE: ../../../flutter/shell/platform/linux/fl_accessible_text_field.h FILE: ../../../flutter/shell/platform/linux/fl_accessible_text_field_test.cc -FILE: ../../../flutter/shell/platform/linux/fl_backing_store_provider.cc -FILE: ../../../flutter/shell/platform/linux/fl_backing_store_provider.h FILE: ../../../flutter/shell/platform/linux/fl_basic_message_channel.cc FILE: ../../../flutter/shell/platform/linux/fl_basic_message_channel_test.cc FILE: ../../../flutter/shell/platform/linux/fl_binary_codec.cc @@ -46985,6 +46983,8 @@ FILE: ../../../flutter/shell/platform/linux/fl_engine_private.h FILE: ../../../flutter/shell/platform/linux/fl_engine_test.cc FILE: ../../../flutter/shell/platform/linux/fl_event_channel.cc FILE: ../../../flutter/shell/platform/linux/fl_event_channel_test.cc +FILE: ../../../flutter/shell/platform/linux/fl_framebuffer.cc +FILE: ../../../flutter/shell/platform/linux/fl_framebuffer.h FILE: ../../../flutter/shell/platform/linux/fl_gnome_settings.cc FILE: ../../../flutter/shell/platform/linux/fl_gnome_settings.h FILE: ../../../flutter/shell/platform/linux/fl_gnome_settings_test.cc diff --git a/shell/platform/linux/BUILD.gn b/shell/platform/linux/BUILD.gn index cf84277a2cc31..ef05b4ddd2117 100644 --- a/shell/platform/linux/BUILD.gn +++ b/shell/platform/linux/BUILD.gn @@ -99,13 +99,13 @@ source_set("flutter_linux_sources") { sources = [ "fl_accessible_node.cc", "fl_accessible_text_field.cc", - "fl_backing_store_provider.cc", "fl_basic_message_channel.cc", "fl_binary_codec.cc", "fl_binary_messenger.cc", "fl_dart_project.cc", "fl_engine.cc", "fl_event_channel.cc", + "fl_framebuffer.cc", "fl_gnome_settings.cc", "fl_json_message_codec.cc", "fl_json_method_codec.cc", diff --git a/shell/platform/linux/fl_backing_store_provider.h b/shell/platform/linux/fl_backing_store_provider.h deleted file mode 100644 index 6f36daa83ab7d..0000000000000 --- a/shell/platform/linux/fl_backing_store_provider.h +++ /dev/null @@ -1,96 +0,0 @@ -// 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_BACKING_STORE_PROVIDER_H_ -#define FLUTTER_SHELL_PLATFORM_LINUX_FL_BACKING_STORE_PROVIDER_H_ - -#include - -#include - -G_BEGIN_DECLS - -G_DECLARE_FINAL_TYPE(FlBackingStoreProvider, - fl_backing_store_provider, - FL, - BACKING_STORE_PROVIDER, - GObject) - -/** - * FlBackingStoreProvider: - * - * #FlBackingStoreProvider creates framebuffers and their backing textures - * for embedder compositor. - */ - -/** - * fl_backing_store_provider_new: - * @width: width of texture. - * @height: height of texture. - * - * Creates a new frame buffer. fl_renderer_make_current() must be called - * first. - * - * Returns: a new #FlBackingStoreProvider. - */ -FlBackingStoreProvider* fl_backing_store_provider_new(int width, int height); - -/** - * fl_backing_store_provider_get_gl_framebuffer_id: - * @provider: an #FlBackingStoreProvider. - * - * Gets created framebuffer id. - * - * Returns: gl framebuffer id, 0 if creation failed. - */ -uint32_t fl_backing_store_provider_get_gl_framebuffer_id( - FlBackingStoreProvider* provider); - -/** - * fl_backing_store_provider_get_gl_texture_id: - * @provider: an #FlBackingStoreProvider. - * - * Gets created texture id. - * - * Returns: gl texture id, 0 if creation failed. - */ -uint32_t fl_backing_store_provider_get_gl_texture_id( - FlBackingStoreProvider* provider); - -/** - * fl_backing_store_provider_get_gl_target: - * @provider: an #FlBackingStoreProvider. - * - * Gets target texture (example GL_TEXTURE_2D or GL_TEXTURE_RECTANGLE). - * - * Returns: target texture. - */ -uint32_t fl_backing_store_provider_get_gl_target( - FlBackingStoreProvider* provider); - -/** - * fl_backing_store_provider_get_gl_format: - * @provider: an #FlBackingStoreProvider. - * - * Gets texture format (example GL_RGBA8). - * - * Returns: texture format. - */ -uint32_t fl_backing_store_provider_get_gl_format( - FlBackingStoreProvider* provider); - -/** - * fl_backing_store_provider_get_geometry: - * @provider: an #FlBackingStoreProvider. - * - * Gets geometry of framebuffer. - * - * Returns: geometry of backing store. - */ -GdkRectangle fl_backing_store_provider_get_geometry( - FlBackingStoreProvider* provider); - -G_END_DECLS - -#endif // FLUTTER_SHELL_PLATFORM_LINUX_FL_BACKING_STORE_PROVIDER_H_ diff --git a/shell/platform/linux/fl_backing_store_provider.cc b/shell/platform/linux/fl_framebuffer.cc similarity index 59% rename from shell/platform/linux/fl_backing_store_provider.cc rename to shell/platform/linux/fl_framebuffer.cc index c7be731c67b35..46e9d9e7dfa59 100644 --- a/shell/platform/linux/fl_backing_store_provider.cc +++ b/shell/platform/linux/fl_framebuffer.cc @@ -2,46 +2,49 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "fl_backing_store_provider.h" +#include "fl_framebuffer.h" #include -struct _FlBackingStoreProvider { +struct _FlFramebuffer { GObject parent_instance; - uint32_t framebuffer_id; - uint32_t texture_id; - GdkRectangle geometry; + // Width of framebuffer in pixels. + size_t width; + + // Height of framebuffer in pixels. + size_t height; + + // Framebuffer ID. + GLuint framebuffer_id; + + // Texture backing framebuffer. + GLuint texture_id; }; -G_DEFINE_TYPE(FlBackingStoreProvider, fl_backing_store_provider, G_TYPE_OBJECT) +G_DEFINE_TYPE(FlFramebuffer, fl_framebuffer, G_TYPE_OBJECT) -static void fl_backing_store_provider_dispose(GObject* object) { - FlBackingStoreProvider* self = FL_BACKING_STORE_PROVIDER(object); +static void fl_framebuffer_dispose(GObject* object) { + FlFramebuffer* self = FL_FRAMEBUFFER(object); glDeleteFramebuffers(1, &self->framebuffer_id); glDeleteTextures(1, &self->texture_id); - G_OBJECT_CLASS(fl_backing_store_provider_parent_class)->dispose(object); + G_OBJECT_CLASS(fl_framebuffer_parent_class)->dispose(object); } -static void fl_backing_store_provider_class_init( - FlBackingStoreProviderClass* klass) { - G_OBJECT_CLASS(klass)->dispose = fl_backing_store_provider_dispose; +static void fl_framebuffer_class_init(FlFramebufferClass* klass) { + G_OBJECT_CLASS(klass)->dispose = fl_framebuffer_dispose; } -static void fl_backing_store_provider_init(FlBackingStoreProvider* self) {} +static void fl_framebuffer_init(FlFramebuffer* self) {} -FlBackingStoreProvider* fl_backing_store_provider_new(int width, int height) { - FlBackingStoreProvider* provider = FL_BACKING_STORE_PROVIDER( - g_object_new(fl_backing_store_provider_get_type(), nullptr)); +FlFramebuffer* fl_framebuffer_new(size_t width, size_t height) { + FlFramebuffer* provider = + FL_FRAMEBUFFER(g_object_new(fl_framebuffer_get_type(), nullptr)); - provider->geometry = { - .x = 0, - .y = 0, - .width = width, - .height = height, - }; + provider->width = width; + provider->height = height; glGenTextures(1, &provider->texture_id); glGenFramebuffers(1, &provider->framebuffer_id); @@ -63,21 +66,19 @@ FlBackingStoreProvider* fl_backing_store_provider_new(int width, int height) { return provider; } -uint32_t fl_backing_store_provider_get_gl_framebuffer_id( - FlBackingStoreProvider* self) { +GLuint fl_framebuffer_get_id(FlFramebuffer* self) { return self->framebuffer_id; } -uint32_t fl_backing_store_provider_get_gl_texture_id( - FlBackingStoreProvider* self) { +GLuint fl_framebuffer_get_texture_id(FlFramebuffer* self) { return self->texture_id; } -uint32_t fl_backing_store_provider_get_gl_target(FlBackingStoreProvider* self) { +GLenum fl_framebuffer_get_target(FlFramebuffer* self) { return GL_TEXTURE_2D; } -uint32_t fl_backing_store_provider_get_gl_format(FlBackingStoreProvider* self) { +GLenum fl_framebuffer_get_format(FlFramebuffer* self) { // Flutter defines SK_R32_SHIFT=16, so SK_PMCOLOR_BYTE_ORDER should be BGRA. // In Linux kN32_SkColorType is assumed to be kBGRA_8888_SkColorType. // So we must choose a valid gl format to be compatible with surface format @@ -102,7 +103,10 @@ uint32_t fl_backing_store_provider_get_gl_format(FlBackingStoreProvider* self) { return GL_RGBA8; } -GdkRectangle fl_backing_store_provider_get_geometry( - FlBackingStoreProvider* self) { - return self->geometry; +size_t fl_framebuffer_get_width(FlFramebuffer* self) { + return self->width; +} + +size_t fl_framebuffer_get_height(FlFramebuffer* self) { + return self->height; } diff --git a/shell/platform/linux/fl_framebuffer.h b/shell/platform/linux/fl_framebuffer.h new file mode 100644 index 0000000000000..b70593a4339c2 --- /dev/null +++ b/shell/platform/linux/fl_framebuffer.h @@ -0,0 +1,95 @@ +// 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_FRAMEBUFFER_H_ +#define FLUTTER_SHELL_PLATFORM_LINUX_FL_FRAMEBUFFER_H_ + +#include +#include + +G_BEGIN_DECLS + +G_DECLARE_FINAL_TYPE(FlFramebuffer, fl_framebuffer, FL, FRAMEBUFFER, GObject) + +/** + * FlFramebuffer: + * + * #FlFramebuffer creates framebuffers and their backing textures + * for use by the Flutter compositor. + */ + +/** + * fl_framebuffer_new: + * @width: width of texture. + * @height: height of texture. + * + * Creates a new frame buffer. Requires a valid OpenGL context to create. + * + * Returns: a new #FlFramebuffer. + */ +FlFramebuffer* fl_framebuffer_new(size_t width, size_t height); + +/** + * fl_framebuffer_get_id: + * @framebuffer: an #FlFramebuffer. + * + * Gets the ID for this framebuffer. + * + * Returns: OpenGL framebuffer id or 0 if creation failed. + */ +GLuint fl_framebuffer_get_id(FlFramebuffer* framebuffer); + +/** + * fl_framebuffer_get_texture_id: + * @framebuffer: an #FlFramebuffer. + * + * Gets the ID of the texture associated with this framebuffer. + * + * Returns: OpenGL texture id or 0 if creation failed. + */ +GLuint fl_framebuffer_get_texture_id(FlFramebuffer* framebuffer); + +/** + * fl_framebuffer_get_target: + * @framebuffer: an #FlFramebuffer. + * + * Gets target texture (example GL_TEXTURE_2D or GL_TEXTURE_RECTANGLE). + * + * Returns: target texture. + */ +GLenum fl_framebuffer_get_target(FlFramebuffer* framebuffer); + +/** + * fl_framebuffer_get_format: + * @framebuffer: an #FlFramebuffer. + * + * Gets format of texture backing the framebuffer (example GL_RGBA8). + * + * Returns: texture format. + */ +GLenum fl_framebuffer_get_format(FlFramebuffer* framebuffer); + +/** + * fl_framebuffer_get_width: + * @framebuffer: an #FlFramebuffer. + * + * Gets the width of the framebuffer in pixels. + * + * Returns: width in pixels. + */ +size_t fl_framebuffer_get_width(FlFramebuffer* framebuffer); + +/** + * fl_framebuffer_get_height: + * @framebuffer: an #FlFramebuffer. + * + * Gets the height of the framebuffer in pixels. + * + * Returns: height in pixels. + */ +size_t fl_framebuffer_get_height(FlFramebuffer* framebuffer); + +G_END_DECLS + +#endif // FLUTTER_SHELL_PLATFORM_LINUX_FL_FRAMEBUFFER_H_ diff --git a/shell/platform/linux/fl_renderer.cc b/shell/platform/linux/fl_renderer.cc index 9db2bee5bdf7e..013a2c73ae2b4 100644 --- a/shell/platform/linux/fl_renderer.cc +++ b/shell/platform/linux/fl_renderer.cc @@ -8,8 +8,8 @@ #include #include "flutter/shell/platform/embedder/embedder.h" -#include "flutter/shell/platform/linux/fl_backing_store_provider.h" #include "flutter/shell/platform/linux/fl_engine_private.h" +#include "flutter/shell/platform/linux/fl_framebuffer.h" #include "flutter/shell/platform/linux/fl_view_private.h" // Vertex shader to draw Flutter window contents. @@ -54,8 +54,8 @@ typedef struct { // Shader program. GLuint program; - // Textures to render. - GPtrArray* textures; + // Framebuffers to render. + GPtrArray* framebuffers; } FlRendererPrivate; G_DEFINE_TYPE_WITH_PRIVATE(FlRenderer, fl_renderer, G_TYPE_OBJECT) @@ -152,18 +152,16 @@ static void render_with_blit(FlRenderer* self) { // See OpenGL specification version 4.6, section 18.3.1. glDisable(GL_SCISSOR_TEST); - for (guint i = 0; i < priv->textures->len; i++) { - FlBackingStoreProvider* texture = - FL_BACKING_STORE_PROVIDER(g_ptr_array_index(priv->textures, i)); + for (guint i = 0; i < priv->framebuffers->len; i++) { + FlFramebuffer* framebuffer = + FL_FRAMEBUFFER(g_ptr_array_index(priv->framebuffers, i)); - uint32_t framebuffer_id = - fl_backing_store_provider_get_gl_framebuffer_id(texture); + GLuint framebuffer_id = fl_framebuffer_get_id(framebuffer); glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer_id); - GdkRectangle geometry = fl_backing_store_provider_get_geometry(texture); - glBlitFramebuffer(0, 0, geometry.width, geometry.height, geometry.x, - geometry.y, geometry.x + geometry.width, - geometry.y + geometry.height, GL_COLOR_BUFFER_BIT, - GL_NEAREST); + size_t width = fl_framebuffer_get_width(framebuffer); + size_t height = fl_framebuffer_get_height(framebuffer); + glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, + GL_COLOR_BUFFER_BIT, GL_NEAREST); } glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); } @@ -184,25 +182,20 @@ static void render_with_textures(FlRenderer* self, int width, int height) { glUseProgram(priv->program); - for (guint i = 0; i < priv->textures->len; i++) { - FlBackingStoreProvider* texture = - FL_BACKING_STORE_PROVIDER(g_ptr_array_index(priv->textures, i)); + for (guint i = 0; i < priv->framebuffers->len; i++) { + FlFramebuffer* framebuffer = + FL_FRAMEBUFFER(g_ptr_array_index(priv->framebuffers, i)); - uint32_t texture_id = fl_backing_store_provider_get_gl_texture_id(texture); + GLuint texture_id = fl_framebuffer_get_texture_id(framebuffer); glBindTexture(GL_TEXTURE_2D, texture_id); // Translate into OpenGL co-ordinates - GdkRectangle texture_geometry = - fl_backing_store_provider_get_geometry(texture); - GLfloat texture_x = texture_geometry.x; - GLfloat texture_y = texture_geometry.y; - GLfloat texture_width = texture_geometry.width; - GLfloat texture_height = texture_geometry.height; - GLfloat x0 = pixels_to_gl_coords(texture_x, width); - GLfloat y0 = - pixels_to_gl_coords(height - (texture_y + texture_height), height); - GLfloat x1 = pixels_to_gl_coords(texture_x + texture_width, width); - GLfloat y1 = pixels_to_gl_coords(height - texture_y, height); + size_t texture_width = fl_framebuffer_get_width(framebuffer); + size_t texture_height = fl_framebuffer_get_height(framebuffer); + GLfloat x0 = pixels_to_gl_coords(0, width); + GLfloat y0 = pixels_to_gl_coords(height - texture_height, height); + GLfloat x1 = pixels_to_gl_coords(texture_width, width); + GLfloat y1 = pixels_to_gl_coords(height, height); GLfloat vertex_data[] = {x0, y0, 0, 0, x1, y1, 1, 1, x0, y1, 0, 1, x0, y0, 0, 0, x1, y0, 1, 0, x1, y1, 1, 1}; @@ -240,7 +233,7 @@ static void fl_renderer_dispose(GObject* object) { fl_renderer_unblock_main_thread(self); - g_clear_pointer(&priv->textures, g_ptr_array_unref); + g_clear_pointer(&priv->framebuffers, g_ptr_array_unref); G_OBJECT_CLASS(fl_renderer_parent_class)->dispose(object); } @@ -252,7 +245,7 @@ static void fl_renderer_class_init(FlRendererClass* klass) { static void fl_renderer_init(FlRenderer* self) { FlRendererPrivate* priv = reinterpret_cast( fl_renderer_get_instance_private(self)); - priv->textures = g_ptr_array_new_with_free_func(g_object_unref); + priv->framebuffers = g_ptr_array_new_with_free_func(g_object_unref); } gboolean fl_renderer_start(FlRenderer* self, FlView* view) { @@ -304,21 +297,20 @@ gboolean fl_renderer_create_backing_store( FlutterBackingStore* backing_store_out) { fl_renderer_make_current(renderer); - FlBackingStoreProvider* provider = - fl_backing_store_provider_new(config->size.width, config->size.height); - if (!provider) { + FlFramebuffer* framebuffer = + fl_framebuffer_new(config->size.width, config->size.height); + if (!framebuffer) { g_warning("Failed to create backing store"); return FALSE; } - uint32_t name = fl_backing_store_provider_get_gl_framebuffer_id(provider); - uint32_t format = fl_backing_store_provider_get_gl_format(provider); - backing_store_out->type = kFlutterBackingStoreTypeOpenGL; backing_store_out->open_gl.type = kFlutterOpenGLTargetTypeFramebuffer; - backing_store_out->open_gl.framebuffer.user_data = provider; - backing_store_out->open_gl.framebuffer.name = name; - backing_store_out->open_gl.framebuffer.target = format; + backing_store_out->open_gl.framebuffer.user_data = framebuffer; + backing_store_out->open_gl.framebuffer.name = + fl_framebuffer_get_id(framebuffer); + backing_store_out->open_gl.framebuffer.target = + fl_framebuffer_get_format(framebuffer); backing_store_out->open_gl.framebuffer.destruction_callback = [](void* p) { // Backing store destroyed in fl_renderer_collect_backing_store(), set // on FlutterCompositor.collect_backing_store_callback during engine start. @@ -332,7 +324,7 @@ gboolean fl_renderer_collect_backing_store( const FlutterBackingStore* backing_store) { fl_renderer_make_current(self); - // OpenGL context is required when destroying #FlBackingStoreProvider. + // OpenGL context is required when destroying #FlFramebuffer. g_object_unref(backing_store->open_gl.framebuffer.user_data); return TRUE; } @@ -377,16 +369,15 @@ gboolean fl_renderer_present_layers(FlRenderer* self, fl_renderer_unblock_main_thread(self); - g_ptr_array_set_size(priv->textures, 0); + g_ptr_array_set_size(priv->framebuffers, 0); for (size_t i = 0; i < layers_count; ++i) { const FlutterLayer* layer = layers[i]; switch (layer->type) { case kFlutterLayerContentTypeBackingStore: { const FlutterBackingStore* backing_store = layer->backing_store; - auto framebuffer = &backing_store->open_gl.framebuffer; - FlBackingStoreProvider* provider = - FL_BACKING_STORE_PROVIDER(framebuffer->user_data); - g_ptr_array_add(priv->textures, g_object_ref(provider)); + FlFramebuffer* framebuffer = + FL_FRAMEBUFFER(backing_store->open_gl.framebuffer.user_data); + g_ptr_array_add(priv->framebuffers, g_object_ref(framebuffer)); } break; case kFlutterLayerContentTypePlatformView: { // TODO(robert-ancell) Not implemented - diff --git a/shell/platform/linux/fl_renderer_test.cc b/shell/platform/linux/fl_renderer_test.cc index 7c5144df9f14f..c682a27f0f8d5 100644 --- a/shell/platform/linux/fl_renderer_test.cc +++ b/shell/platform/linux/fl_renderer_test.cc @@ -5,7 +5,7 @@ #include "gtest/gtest.h" #include "flutter/fml/logging.h" -#include "flutter/shell/platform/linux/fl_backing_store_provider.h" +#include "flutter/shell/platform/linux/fl_framebuffer.h" #include "flutter/shell/platform/linux/testing/fl_test_gtk_logs.h" #include "flutter/shell/platform/linux/testing/mock_epoxy.h" #include "flutter/shell/platform/linux/testing/mock_renderer.h" @@ -22,15 +22,14 @@ TEST(FlRendererTest, RestoresGLState) { g_autoptr(FlDartProject) project = fl_dart_project_new(); g_autoptr(FlView) view = fl_view_new(project); g_autoptr(FlMockRenderer) renderer = fl_mock_renderer_new(); - g_autoptr(FlBackingStoreProvider) backing_store_provider = - fl_backing_store_provider_new(kWidth, kHeight); + g_autoptr(FlFramebuffer) framebuffer = fl_framebuffer_new(kWidth, kHeight); fl_renderer_start(FL_RENDERER(renderer), view); fl_renderer_wait_for_frame(FL_RENDERER(renderer), kWidth, kHeight); FlutterBackingStore backing_store; backing_store.type = kFlutterBackingStoreTypeOpenGL; - backing_store.open_gl.framebuffer.user_data = backing_store_provider; + backing_store.open_gl.framebuffer.user_data = framebuffer; FlutterLayer layer; layer.type = kFlutterLayerContentTypeBackingStore; diff --git a/shell/platform/linux/fl_view.cc b/shell/platform/linux/fl_view.cc index 3cea57586eaea..14075c5809ec9 100644 --- a/shell/platform/linux/fl_view.cc +++ b/shell/platform/linux/fl_view.cc @@ -12,8 +12,8 @@ #include #include "flutter/shell/platform/linux/fl_accessible_node.h" -#include "flutter/shell/platform/linux/fl_backing_store_provider.h" #include "flutter/shell/platform/linux/fl_engine_private.h" +#include "flutter/shell/platform/linux/fl_framebuffer.h" #include "flutter/shell/platform/linux/fl_key_event.h" #include "flutter/shell/platform/linux/fl_keyboard_handler.h" #include "flutter/shell/platform/linux/fl_keyboard_view_delegate.h"