Flutter Engine
 
Loading...
Searching...
No Matches
impeller::interop::SwapchainVK Class Referencefinal

#include <swapchain_vk.h>

Inheritance diagram for impeller::interop::SwapchainVK:
impeller::interop::Object< SwapchainVK, IMPELLER_INTERNAL_HANDLE_NAME(ImpellerVulkanSwapchain)> impeller::interop::ObjectBase

Public Member Functions

 SwapchainVK (Context &context, VkSurfaceKHR surface)
 
 ~SwapchainVK ()
 
bool IsValid () const
 
 SwapchainVK (const SwapchainVK &)=delete
 
SwapchainVKoperator= (const SwapchainVK &)=delete
 
ScopedObject< SurfaceVKAcquireNextSurface ()
 
- Public Member Functions inherited from impeller::interop::ObjectBase
 ObjectBase ()=default
 
virtual ~ObjectBase ()=default
 
 ObjectBase (const ObjectBase &)=delete
 
 ObjectBase (ObjectBase &&)=delete
 
ObjectBaseoperator= (const ObjectBase &)=delete
 
ObjectBaseoperator= (ObjectBase &&)=delete
 
void Retain ()
 
void Release ()
 
uint64_t GetRefCountForTests () const
 

Additional Inherited Members

- Public Types inherited from impeller::interop::Object< SwapchainVK, IMPELLER_INTERNAL_HANDLE_NAME(ImpellerVulkanSwapchain)>
using InteropClass = SwapchainVK
 
using InteropCSibling = IMPELLER_INTERNAL_HANDLE_NAME(ImpellerVulkanSwapchain)
 
- Static Public Member Functions inherited from impeller::interop::ObjectBase
static void SafeRetain (void *ptr)
 
static void SafeRelease (void *ptr)
 

Detailed Description

Definition at line 16 of file swapchain_vk.h.

Constructor & Destructor Documentation

◆ SwapchainVK() [1/2]

impeller::interop::SwapchainVK::SwapchainVK ( Context context,
VkSurfaceKHR  surface 
)

Definition at line 11 of file swapchain_vk.cc.

12 : context_(Ref(&context)) {
13 if (!context.IsVulkan()) {
14 VALIDATION_LOG << "Context is not Vulkan.";
15 return;
16 }
17
18 if (!c_surface) {
19 VALIDATION_LOG << "Invalid surface.";
20 return;
21 }
22
23 // Creating a unique object from a raw handle requires fetching the owner
24 // manually.
25 auto surface = vk::UniqueSurfaceKHR(
26 vk::SurfaceKHR{c_surface},
27 impeller::ContextVK::Cast(*context_->GetContext()).GetInstance());
28 auto swapchain = impeller::SwapchainVK::Create(context.GetContext(), //
29 std::move(surface), //
30 ISize::MakeWH(1, 1) //
31 );
32 if (!swapchain) {
33 VALIDATION_LOG << "Could not create Vulkan swapchain.";
34 return;
35 }
36 swapchain_ = std::move(swapchain);
37}
static ContextVK & Cast(Context &base)
vk::Instance GetInstance() const
static std::shared_ptr< SwapchainVK > Create(const std::shared_ptr< Context > &context, vk::UniqueSurfaceKHR surface, const ISize &size, bool enable_msaa=true)
VkSwapchainKHR swapchain
Definition main.cc:80
VkSurfaceKHR surface
Definition main.cc:65
ScopedObject< Object > Ref(Object *object)
Definition object.h:146
static constexpr TSize MakeWH(Type width, Type height)
Definition size.h:43
#define VALIDATION_LOG
Definition validation.h:91

References impeller::BackendCast< ContextVK, Context >::Cast(), impeller::SwapchainVK::Create(), impeller::interop::Context::GetContext(), impeller::ContextVK::GetInstance(), impeller::interop::Context::IsVulkan(), impeller::TSize< T >::MakeWH(), surface, swapchain, and VALIDATION_LOG.

◆ ~SwapchainVK()

impeller::interop::SwapchainVK::~SwapchainVK ( )
default

◆ SwapchainVK() [2/2]

impeller::interop::SwapchainVK::SwapchainVK ( const SwapchainVK )
delete

Member Function Documentation

◆ AcquireNextSurface()

ScopedObject< SurfaceVK > impeller::interop::SwapchainVK::AcquireNextSurface ( )

Definition at line 45 of file swapchain_vk.cc.

45 {
46 if (!IsValid()) {
47 return nullptr;
48 }
49
50 auto impeller_surface = swapchain_->AcquireNextDrawable();
51 if (!impeller_surface) {
52 VALIDATION_LOG << "Could not acquire next drawable.";
53 return nullptr;
54 }
55
56 auto surface = Create<SurfaceVK>(*context_, std::move(impeller_surface));
57 if (!surface || !surface->IsValid()) {
58 VALIDATION_LOG << "Could not create valid surface.";
59 return nullptr;
60 }
61
62 return surface;
63}

References IsValid(), surface, and VALIDATION_LOG.

◆ IsValid()

bool impeller::interop::SwapchainVK::IsValid ( ) const

Definition at line 41 of file swapchain_vk.cc.

41 {
42 return swapchain_ && swapchain_->IsValid();
43}

Referenced by AcquireNextSurface().

◆ operator=()

SwapchainVK & impeller::interop::SwapchainVK::operator= ( const SwapchainVK )
delete

The documentation for this class was generated from the following files: