Flutter Engine
 
Loading...
Searching...
No Matches
ahb_swapchain_vk.cc
Go to the documentation of this file.
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
6
11#include "third_party/vulkan-deps/vulkan-headers/src/include/vulkan/vulkan_enums.hpp"
12
13namespace impeller {
14
19
20AHBSwapchainVK::AHBSwapchainVK(const std::shared_ptr<Context>& context,
22 const CreateTransactionCB& cb,
23 const ISize& size,
24 bool enable_msaa)
25 : context_(context),
26 surface_control_(
27 std::make_shared<android::SurfaceControl>(window, "ImpellerSurface")),
28 enable_msaa_(enable_msaa),
29 cb_(cb) {
31}
32
34
35// |SwapchainVK|
37 return impl_ ? impl_->IsValid() : false;
38}
39
40// |SwapchainVK|
41std::unique_ptr<Surface> AHBSwapchainVK::AcquireNextDrawable() {
42 if (!IsValid()) {
43 return nullptr;
44 }
45
46 TRACE_EVENT0("impeller", __FUNCTION__);
47 return impl_->AcquireNextDrawable();
48}
49
50// |SwapchainVK|
52 return IsValid()
53 ? ToVKImageFormat(ToPixelFormat(impl_->GetDescriptor().format))
54 : vk::Format::eUndefined;
55}
56
57// |SwapchainVK|
59 std::shared_ptr<CommandBuffer> cmd_buffer) const {
60 return impl_->AddFinalCommandBuffer(cmd_buffer);
61}
62
63// |SwapchainVK|
65 if (impl_ && impl_->GetSize() == size) {
66 return;
67 }
68 TRACE_EVENT0("impeller", __FUNCTION__);
69 auto impl = AHBSwapchainImplVK::Create(context_, //
70 surface_control_, //
71 cb_, //
72 size, //
73 enable_msaa_ //
74 );
75 if (!impl || !impl->IsValid()) {
76 VALIDATION_LOG << "Could not resize swapchain to size: " << size;
77 return;
78 }
79 impl_ = std::move(impl);
80}
81
82} // namespace impeller
static std::shared_ptr< AHBSwapchainImplVK > Create(const std::weak_ptr< Context > &context, std::weak_ptr< android::SurfaceControl > surface_control, const CreateTransactionCB &cb, const ISize &size, bool enable_msaa)
Create a swapchain of a specific size whose images will be presented to the provided surface control.
static bool IsAvailableOnPlatform()
void UpdateSurfaceSize(const ISize &size) override
Mark the current swapchain configuration as dirty, forcing it to be recreated on the next frame.
bool IsValid() const override
void AddFinalCommandBuffer(std::shared_ptr< CommandBuffer > cmd_buffer) const override
vk::Format GetSurfaceFormat() const override
std::unique_ptr< Surface > AcquireNextDrawable() override
AHBSwapchainVK(const AHBSwapchainVK &)=delete
GLFWwindow * window
Definition main.cc:60
std::function< android::SurfaceTransaction()> CreateTransactionCB
constexpr PixelFormat ToPixelFormat(vk::Format format)
Definition formats_vk.h:183
constexpr vk::Format ToVKImageFormat(PixelFormat format)
Definition formats_vk.h:146
Definition ref_ptr.h:261
#define TRACE_EVENT0(category_group, name)
#define VALIDATION_LOG
Definition validation.h:91
struct ANativeWindow ANativeWindow