# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//cobalt/renderer/rasterizer/skia/skia/skia_next.gni")

static_library("software_rasterizer") {
  sources = [
    "software_rasterizer.cc",
    "software_rasterizer.h",
    "textured_mesh_renderer.cc",
    "textured_mesh_renderer.h",
  ]

  configs -= [ "//starboard/build/config:size" ]
  configs += [ "//starboard/build/config:speed" ]

  if (use_skia_next) {
    include_dirs = [ skia_include_dir ]
  }

  deps = [
    "//base",
    "//cobalt/math",
    "//cobalt/render_tree",
    "//cobalt/renderer:renderer_headers_only",
    "//cobalt/renderer/backend:renderer_backend",
    "//cobalt/renderer/backend/egl:egl_backend",
    "//cobalt/renderer/rasterizer/skia:software_rasterizer",
    "//cobalt/renderer/rasterizer/skia/skia",
    "//starboard:starboard_headers_only",
  ]
}

static_library("hardware_rasterizer") {
  sources = [
    "draw_callback.cc",
    "draw_callback.h",
    "draw_clear.cc",
    "draw_clear.h",
    "draw_object.cc",
    "draw_object.h",
    "draw_object_manager.cc",
    "draw_object_manager.h",
    "draw_poly_color.cc",
    "draw_poly_color.h",
    "draw_rect_border.cc",
    "draw_rect_border.h",
    "draw_rect_color_texture.cc",
    "draw_rect_color_texture.h",
    "draw_rect_linear_gradient.cc",
    "draw_rect_linear_gradient.h",
    "draw_rect_radial_gradient.cc",
    "draw_rect_radial_gradient.h",
    "draw_rect_shadow_blur.cc",
    "draw_rect_shadow_blur.h",
    "draw_rect_shadow_spread.cc",
    "draw_rect_shadow_spread.h",
    "draw_rect_texture.cc",
    "draw_rect_texture.h",
    "draw_rrect_color.cc",
    "draw_rrect_color.h",
    "draw_rrect_color_texture.cc",
    "draw_rrect_color_texture.h",
    "graphics_state.cc",
    "graphics_state.h",
    "hardware_rasterizer.cc",
    "hardware_rasterizer.h",
    "offscreen_target_manager.cc",
    "offscreen_target_manager.h",
    "rect_allocator.cc",
    "rect_allocator.h",
    "render_tree_node_visitor.cc",
    "render_tree_node_visitor.h",
    "shader_base.cc",
    "shader_base.h",
    "shader_program.cc",
    "shader_program.h",
    "shader_program_manager.cc",
    "shader_program_manager.h",
  ]

  configs -= [ "//starboard/build/config:size" ]
  configs += [ "//starboard/build/config:speed" ]

  if (use_skia_next) {
    include_dirs = [ skia_include_dir ]
  }

  deps = [
    ":software_rasterizer",
    "//base",
    "//cobalt/base",
    "//cobalt/math",
    "//cobalt/render_tree",
    "//cobalt/render_tree:animations",
    "//cobalt/renderer:renderer_headers_only",
    "//cobalt/renderer/backend:renderer_backend",
    "//cobalt/renderer/backend/egl:egl_backend",
    "//cobalt/renderer/rasterizer/common",
    "//cobalt/renderer/rasterizer/egl/shaders",
    "//cobalt/renderer/rasterizer/skia:hardware_rasterizer",
    "//cobalt/renderer/rasterizer/skia/skia",
    "//starboard:starboard_headers_only",
    "//starboard/common",
  ]
}
