// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_UI_LIB_ESCHER_MATERIAL_MATERIAL_H_
#define SRC_UI_LIB_ESCHER_MATERIAL_MATERIAL_H_

#include "src/lib/fxl/memory/ref_counted.h"
#include "src/ui/lib/escher/forward_declarations.h"
#include "src/ui/lib/escher/geometry/types.h"
#include "src/ui/lib/escher/vk/texture.h"

#include <vulkan/vulkan.hpp>

namespace escher {

class Material;
using MaterialPtr = fxl::RefPtr<Material>;

// Simple textured material.  If no texture is set, then the material is a solid color.  If a
// texture is set, then it will be multiplied by the material's color.
class Material : public fxl::RefCountedThreadSafe<Material> {
 public:
  enum class Type { kOpaque, kTranslucent, kWireframe };

  explicit Material();
  ~Material();

  static MaterialPtr New(vec4 color, TexturePtr texture = TexturePtr());

  const TexturePtr& texture() const { return texture_; }
  vk::ImageView vk_image_view() const { return image_view_; }
  vk::Sampler vk_sampler() const { return sampler_; }
  const vec4& color() const { return color_; }
  const vec4 GetPremultipliedRgba() const { return vec4(vec3(color_) * color_.a, color_.a); }

  void set_color(vec4 color) { color_ = color; }
  void set_color(vec3 color) { color_ = vec4(color, 1); }
  void SetTexture(TexturePtr texture);

  Type type() const { return type_; }
  void set_type(Type type) { type_ = type; }
  bool opaque() const { return type_ == Type::kOpaque; }

 protected:
  TexturePtr texture_;
  // Cache image_view_ and sampler_ from texture_ so that we don't need an
  // indirection each time that we render using the material.
  vk::ImageView image_view_;
  vk::Sampler sampler_;

  vec4 color_ = vec4(1, 1, 1, 1);
  Type type_ = Type::kOpaque;
};

}  // namespace escher

#endif  // SRC_UI_LIB_ESCHER_MATERIAL_MATERIAL_H_
