| // 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 "impeller/playground/playground_impl.h" | |
| #include "flutter/testing/testing.h" | |
| #define GLFW_INCLUDE_NONE | |
| #include "third_party/glfw/include/GLFW/glfw3.h" | |
| #if IMPELLER_ENABLE_METAL | |
| #include "impeller/playground/backend/metal/playground_impl_mtl.h" | |
| #endif // IMPELLER_ENABLE_METAL | |
| #if IMPELLER_ENABLE_OPENGLES | |
| #include "impeller/playground/backend/gles/playground_impl_gles.h" | |
| #endif // IMPELLER_ENABLE_OPENGLES | |
| #if IMPELLER_ENABLE_VULKAN | |
| #include "impeller/playground/backend/vulkan/playground_impl_vk.h" | |
| #endif // IMPELLER_ENABLE_VULKAN | |
| namespace impeller { | |
| std::unique_ptr<PlaygroundImpl> PlaygroundImpl::Create( | |
| PlaygroundBackend backend, | |
| PlaygroundSwitches switches) { | |
| switch (backend) { | |
| #if IMPELLER_ENABLE_METAL | |
| case PlaygroundBackend::kMetal: | |
| return std::make_unique<PlaygroundImplMTL>(switches); | |
| #endif // IMPELLER_ENABLE_METAL | |
| #if IMPELLER_ENABLE_OPENGLES | |
| case PlaygroundBackend::kOpenGLES: | |
| return std::make_unique<PlaygroundImplGLES>(switches); | |
| #endif // IMPELLER_ENABLE_OPENGLES | |
| #if IMPELLER_ENABLE_VULKAN | |
| case PlaygroundBackend::kVulkan: | |
| if (!PlaygroundImplVK::IsVulkanDriverPresent()) { | |
| FML_CHECK(false) << "Attempted to create playground with backend that " | |
| "isn't available or was disabled on this platform: " | |
| << PlaygroundBackendToString(backend); | |
| } | |
| switches.enable_vulkan_validation = true; | |
| return std::make_unique<PlaygroundImplVK>(switches); | |
| #endif // IMPELLER_ENABLE_VULKAN | |
| default: | |
| FML_CHECK(false) << "Attempted to create playground with backend that " | |
| "isn't available or was disabled on this platform: " | |
| << PlaygroundBackendToString(backend); | |
| } | |
| FML_UNREACHABLE(); | |
| } | |
| PlaygroundImpl::PlaygroundImpl(PlaygroundSwitches switches) | |
| : switches_(switches) {} | |
| PlaygroundImpl::~PlaygroundImpl() = default; | |
| Vector2 PlaygroundImpl::GetContentScale() const { | |
| auto window = reinterpret_cast<GLFWwindow*>(GetWindowHandle()); | |
| Vector2 scale(1, 1); | |
| ::glfwGetWindowContentScale(window, &scale.x, &scale.y); | |
| return scale; | |
| } | |
| } // namespace impeller |