# 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")

impeller_component("scene") {
  sources = [
    "animation/animation.cc",
    "animation/animation.h",
    "animation/animation_clip.cc",
    "animation/animation_clip.h",
    "animation/animation_player.cc",
    "animation/animation_player.h",
    "animation/animation_transforms.h",
    "animation/property_resolver.cc",
    "animation/property_resolver.h",
    "camera.cc",
    "camera.h",
    "geometry.cc",
    "geometry.h",
    "material.cc",
    "material.h",
    "mesh.cc",
    "mesh.h",
    "node.cc",
    "node.h",
    "pipeline_key.h",
    "scene.cc",
    "scene.h",
    "scene_context.cc",
    "scene_context.h",
    "scene_encoder.cc",
    "scene_encoder.h",
    "skin.cc",
    "skin.h",
  ]

  public_deps = [
    "../renderer",
    "importer:conversions",
    "importer:importer_flatbuffers",
    "shaders",
  ]

  deps = [ "//flutter/fml" ]
}

impeller_component("scene_unittests") {
  testonly = true

  sources = [ "scene_unittests.cc" ]

  deps = [
    ":scene",
    "../fixtures",
    "../playground:playground_test",
    "//flutter/testing:testing_lib",
  ]
}
