// 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.

#include "impeller/scene/camera.h"

namespace impeller {
namespace scene {

Camera Camera::MakePerspective(Scalar fov_y, Vector3 position) {
  Camera camera;
  camera.fov_y_ = fov_y;
  camera.position_ = position;
  return camera;
}

Camera Camera::LookAt(Vector3 target, Vector3 up) const {
  Camera camera = *this;
  camera.target_ = target;
  camera.up_ = up;
  return camera;
}

Matrix Camera::GetTransform(ISize target_size) const {
  if (transform_.has_value()) {
    return transform_.value();
  }

  transform_ =
      Matrix::MakePerspective(Radians(fov_y_), target_size, z_near_, z_far_) *
      Matrix::MakeLookAt(position_, target_, up_).Invert();

  return transform_.value();
}

}  // namespace scene
}  // namespace impeller
