# Copyright 2014 The Chromium 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("//mojo/public/tools/bindings/mojom.gni")

config("mojo_use_gles2") {
  defines = [ "MOJO_USE_GLES2_IMPL" ]
}

config("gles2_use_mojo") {
  defines = [ "GLES2_USE_MOJO" ]
}

# GYP version: mojo/mojo_base.gyp:mojo_gles2_impl
component("gles2") {
  output_name = "mojo_gles2_impl"

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//gpu/command_buffer/client",
    "//gpu/command_buffer/client:gles2_implementation",
    "//gpu/command_buffer/client:gles2_interface",
    "//gpu/command_buffer/common",
    "//mojo/environment:chromium",
    "//mojo/public/c/system:for_component",
    "//mojo/services/gles2:lib",
    "//mojo/services/public/interfaces/gpu",
  ]

  defines = [
    "GL_GLEXT_PROTOTYPES",
    "MOJO_GLES2_IMPL_IMPLEMENTATION",
    "MOJO_GLES2_IMPLEMENTATION",
  ]

  configs += [
    ":gles2_use_mojo",
    ":mojo_use_gles2",
  ]
  public_configs = [ ":gles2_use_mojo" ]
  all_dependent_configs = [ ":mojo_use_gles2" ]

  sources = [
    "command_buffer_client_impl.cc",
    "command_buffer_client_impl.h",
    "gles2_impl_export.h",
    "gles2_impl.cc",
    "gles2_context.cc",
    "gles2_context.h",
  ]
}
