// 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_SCENE_BINDING_H_
#define SRC_UI_LIB_ESCHER_SCENE_BINDING_H_

#include <lib/syslog/cpp/macros.h>

namespace escher {

enum class BindingType { kNone = 0, kConstant = 1 };

// Binds a property of a material to a source of data.
template <typename T>
class Binding {
 public:
  Binding() : type_(BindingType::kNone) {}
  ~Binding() {}

  static Binding Constant(const T& value) {
    Binding binding(BindingType::kConstant);
    binding.constant_value_ = value;
    return binding;
  }

  BindingType type() const { return type_; }

  const T& constant_value() const {
    FX_DCHECK(type_ == BindingType::kConstant);
    return constant_value_;
  }

  // TODO(jeffbrown): Support binding to textures and simple expressions.
  // static Binding Texture(GLint texture_name);

 private:
  Binding(BindingType type) : type_(type) {}

  BindingType type_;
  T constant_value_;
};

template <typename T>
Binding<T> MakeConstantBinding(const T& value) {
  return Binding<T>::Constant(value);
}

}  // namespace escher

#endif  // SRC_UI_LIB_ESCHER_SCENE_BINDING_H_
