1 // Copyright 2013 The Flutter Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef FLUTTER_SHELL_PLATFORM_EMBEDDER_PLATFORM_VIEW_EMBEDDER_H_ 6 #define FLUTTER_SHELL_PLATFORM_EMBEDDER_PLATFORM_VIEW_EMBEDDER_H_ 7 8 #include <functional> 9 10 #include "flutter/fml/macros.h" 11 #include "flutter/shell/common/platform_view.h" 12 #include "flutter/shell/platform/embedder/embedder.h" 13 #include "flutter/shell/platform/embedder/embedder_surface.h" 14 #include "flutter/shell/platform/embedder/embedder_surface_gl.h" 15 #include "flutter/shell/platform/embedder/embedder_surface_software.h" 16 #include "flutter/shell/platform/embedder/vsync_waiter_embedder.h" 17 18 namespace flutter { 19 20 class PlatformViewEmbedder final : public PlatformView { 21 public: 22 struct PlatformDispatchTable { 23 VsyncWaiterEmbedder::VsyncCallback vsync_callback; // optional 24 }; 25 26 // Creates a platform view that sets up an OpenGL rasterizer. 27 PlatformViewEmbedder( 28 PlatformView::Delegate& delegate, 29 flutter::TaskRunners task_runners, 30 EmbedderSurfaceGL::GLDispatchTable gl_dispatch_table, 31 bool fbo_reset_after_present, 32 PlatformDispatchTable platform_dispatch_table, 33 std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder); 34 35 // Create a platform view that sets up a software rasterizer. 36 PlatformViewEmbedder( 37 PlatformView::Delegate& delegate, 38 flutter::TaskRunners task_runners, 39 EmbedderSurfaceSoftware::SoftwareDispatchTable software_dispatch_table, 40 PlatformDispatchTable platform_dispatch_table, 41 std::unique_ptr<EmbedderExternalViewEmbedder> external_view_embedder); 42 43 ~PlatformViewEmbedder() override; 44 45 // |PlatformView| 46 void HandlePlatformMessage( 47 fml::RefPtr<flutter::PlatformMessage> message) override; 48 49 private: 50 std::unique_ptr<EmbedderSurface> embedder_surface_; 51 PlatformDispatchTable platform_dispatch_table_; 52 53 // |PlatformView| 54 std::unique_ptr<Surface> CreateRenderingSurface() override; 55 56 // |PlatformView| 57 sk_sp<GrContext> CreateResourceContext() const override; 58 59 // |PlatformView| 60 std::unique_ptr<VsyncWaiter> CreateVSyncWaiter(int32_t platform) override; 61 62 FML_DISALLOW_COPY_AND_ASSIGN(PlatformViewEmbedder); 63 }; 64 65 } // namespace flutter 66 67 #endif // FLUTTER_SHELL_PLATFORM_EMBEDDER_PLATFORM_VIEW_EMBEDDER_H_ 68