# 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",
    "test/specialization_constants_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",
  ]
}
