# 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.

import("//flutter/impeller/tools/impeller.gni")
import("//flutter/testing/testing.gni")

impeller_component("playground") {
  testonly = true

  sources = [
    "playground.cc",
    "playground.h",
    "playground_impl.cc",
    "playground_impl.h",
    "switches.cc",
    "switches.h",
    "widgets.cc",
    "widgets.h",

    # Swiftshader is Vulkan backend specific but the utilities are not.
    "backend/vulkan/swiftshader_utilities.cc",
    "backend/vulkan/swiftshader_utilities.h",
  ]

  deps = [ "../renderer/backend" ]

  if (impeller_enable_metal) {
    sources += [
      "backend/metal/playground_impl_mtl.h",
      "backend/metal/playground_impl_mtl.mm",
    ]
  }

  if (impeller_enable_opengles) {
    sources += [
      "backend/gles/playground_impl_gles.cc",
      "backend/gles/playground_impl_gles.h",
    ]
  }

  if (impeller_enable_vulkan) {
    sources += [
      "backend/vulkan/playground_impl_vk.cc",
      "backend/vulkan/playground_impl_vk.h",
    ]
  }

  public_deps = [
    "../fixtures:shader_fixtures",
    "../renderer",
    "../scene/shaders",
    "image:image_skia_backend",
    "imgui:imgui_impeller_backend",
    "//flutter/fml",
    "//flutter/third_party/glfw",
    "//flutter/third_party/imgui:imgui_glfw",
  ]

  if (impeller_supports_rendering) {
    public_deps += [
      "../entity:entity_shaders",
      "../entity:framebuffer_blend_entity_shaders",
      "../entity:modern_entity_shaders",
    ]
  }

  if (is_mac) {
    frameworks = [
      "AppKit.framework",
      "QuartzCore.framework",
    ]
  }
}

impeller_component("playground_test") {
  testonly = true

  sources = [
    "compute_playground_test.cc",
    "compute_playground_test.h",
    "playground_test.cc",
    "playground_test.h",
  ]

  public_deps = [
    ":playground",
    "//flutter/testing:testing_lib",
  ]
}
