# Copyright 2015 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("//build/config/ui.gni")  # import the use_x11 variable
import("//ui/ozone/ozone.gni")

angle_enable_d3d9 = false
angle_enable_d3d11 = false
angle_enable_gl = false
angle_enable_vulkan = false
angle_enable_null = true

if (is_win) {
  angle_enable_d3d9 = true
  angle_enable_d3d11 = true
  angle_enable_gl = true
  angle_enable_vulkan = true

  import("//build/config/win/visual_studio_version.gni")
} else if (is_linux && use_x11 && !is_chromeos) {
  angle_enable_gl = true
  angle_enable_vulkan = true
} else if (is_mac || ozone_platform_gbm) {
  angle_enable_gl = true
} else if (is_android) {
  angle_enable_gl = true
}

angle_enable_essl = true
angle_enable_glsl = true
angle_enable_hlsl = false

if (angle_enable_d3d9 || angle_enable_d3d11) {
  angle_enable_hlsl = true
}
