29 {
30 std::lock_guard lock(mutex_);
31
32 if (requested_frame_size_ != current_frame_size_) {
33 DestroyLayersLocked(jni_facade);
34 }
35 intptr_t gr_context_key = reinterpret_cast<intptr_t>(gr_context);
36
37 if (available_layer_index_ >= layers_.size()) {
38 std::unique_ptr<AndroidSurface> android_surface =
39 surface_factory->CreateSurface();
40
41 FML_CHECK(android_surface && android_surface->IsValid())
42 << "Could not create an OpenGL, Vulkan or Software surface to set up "
43 "rendering.";
44
45 std::unique_ptr<PlatformViewAndroidJNI::OverlayMetadata> java_metadata =
46 use_new_surface_methods_
47 ? jni_facade->createOverlaySurface2()
48 : jni_facade->FlutterViewCreateOverlaySurface();
49
51 android_surface->SetNativeWindow(java_metadata->window, jni_facade);
52 android_surface->SetupImpellerSurface();
53
54 std::unique_ptr<Surface>
surface =
55 android_surface->CreateGPUSurface(gr_context);
56
57 std::shared_ptr<OverlayLayer> layer =
58 std::make_shared<OverlayLayer>(java_metadata->id,
59 std::move(android_surface),
60 std::move(surface)
61 );
62 layer->gr_context_key = gr_context_key;
63 layers_.push_back(layer);
64 }
65
66 std::shared_ptr<OverlayLayer> layer = layers_[available_layer_index_];
67
68
69 if (gr_context_key != layer->gr_context_key) {
70 layer->gr_context_key = gr_context_key;
71
72
73 std::unique_ptr<Surface>
surface =
74 layer->android_surface->CreateGPUSurface(gr_context);
75 layer->surface = std::move(surface);
76 }
77 available_layer_index_++;
78 current_frame_size_ = requested_frame_size_;
79 return layer;
80}
#define FML_CHECK(condition)