# 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/vulkan/config.gni")
import("../../../tools/impeller.gni")

config("gles_config") {
  # Generic GL/GLES/EGL/Vulkan headers. Any will do. We just pick one from Angle
  # because they are there.
  include_dirs = [ "//third_party/angle/include" ]
}

impeller_component("gles_unittests") {
  testonly = true
  sources = [
    "test/capabilities_unittests.cc",
    "test/formats_gles_unittests.cc",
    "test/gpu_tracer_gles_unittests.cc",
    "test/mock_gles.cc",
    "test/mock_gles.h",
    "test/mock_gles_unittests.cc",
  ]
  deps = [
    ":gles",
    "//flutter/testing:testing_lib",
  ]
}

impeller_component("gles") {
  public_configs = []

  sources = [
    "allocator_gles.cc",
    "allocator_gles.h",
    "blit_command_gles.cc",
    "blit_command_gles.h",
    "blit_pass_gles.cc",
    "blit_pass_gles.h",
    "buffer_bindings_gles.cc",
    "buffer_bindings_gles.h",
    "capabilities_gles.cc",
    "capabilities_gles.h",
    "command_buffer_gles.cc",
    "command_buffer_gles.h",
    "context_gles.cc",
    "context_gles.h",
    "description_gles.cc",
    "description_gles.h",
    "device_buffer_gles.cc",
    "device_buffer_gles.h",
    "formats_gles.cc",
    "formats_gles.h",
    "gles.h",
    "gpu_tracer_gles.cc",
    "gpu_tracer_gles.h",
    "handle_gles.cc",
    "handle_gles.h",
    "pipeline_gles.cc",
    "pipeline_gles.h",
    "pipeline_library_gles.cc",
    "pipeline_library_gles.h",
    "proc_table_gles.cc",
    "proc_table_gles.h",
    "reactor_gles.cc",
    "reactor_gles.h",
    "render_pass_gles.cc",
    "render_pass_gles.h",
    "sampler_gles.cc",
    "sampler_gles.h",
    "sampler_library_gles.cc",
    "sampler_library_gles.h",
    "shader_function_gles.cc",
    "shader_function_gles.h",
    "shader_library_gles.cc",
    "shader_library_gles.h",
    "surface_gles.cc",
    "surface_gles.h",
    "texture_gles.cc",
    "texture_gles.h",
  ]

  if (!is_android && !is_fuchsia) {
    public_configs = [ ":gles_config" ]
    sources += [
      "//third_party/angle/include/GLES2/gl2ext.h",

      # The GLES3 API is a superset of GLES2. Although we target GLES2, we use
      # some GLES3 features if the driver supports them.
      "//third_party/angle/include/GLES3/gl3.h",
    ]
  }

  public_deps = [
    "../../:renderer",
    "../../../shader_archive",
    "//flutter/fml",
  ]
}
