// 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. #include "vulkan_surface.h" #include "vulkan_application.h" #include "vulkan_native_surface.h" namespace vulkan { VulkanSurface::VulkanSurface( VulkanProcTable& p_vk, // NOLINT VulkanApplication& application, // NOLINT std::unique_ptr native_surface) : vk(p_vk), application_(application), native_surface_(std::move(native_surface)), valid_(false) { if (native_surface_ == nullptr || !native_surface_->IsValid()) { FML_DLOG(INFO) << "Native surface was invalid."; return; } VkSurfaceKHR surface = native_surface_->CreateSurfaceHandle(vk, application.GetInstance()); if (surface == VK_NULL_HANDLE) { FML_DLOG(INFO) << "Could not create the surface handle."; return; } surface_ = VulkanHandle{ surface, [this](VkSurfaceKHR surface) { vk.DestroySurfaceKHR(application_.GetInstance(), surface, nullptr); }}; valid_ = true; } VulkanSurface::~VulkanSurface() = default; bool VulkanSurface::IsValid() const { return valid_; } const VulkanHandle& VulkanSurface::Handle() const { return surface_; } const VulkanNativeSurface& VulkanSurface::GetNativeSurface() const { return *native_surface_; } SkISize VulkanSurface::GetSize() const { return valid_ ? native_surface_->GetSize() : SkISize::Make(0, 0); } } // namespace vulkan