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

#ifndef FLUTTER_IMPELLER_RENDERER_SURFACE_H_
#define FLUTTER_IMPELLER_RENDERER_SURFACE_H_

#include <functional>
#include <memory>

#include "flutter/fml/macros.h"
#include "impeller/renderer/context.h"
#include "impeller/renderer/render_pass.h"
#include "impeller/renderer/render_target.h"

namespace impeller {

class Surface {
 public:
  Surface();

  explicit Surface(const RenderTarget& target_desc);

  virtual ~Surface();

  const ISize& GetSize() const;

  bool IsValid() const;

  const RenderTarget& GetTargetRenderPassDescriptor() const;

  virtual bool Present() const;

 private:
  RenderTarget desc_;
  ISize size_;

  bool is_valid_ = false;

  Surface(const Surface&) = delete;

  Surface& operator=(const Surface&) = delete;
};

}  // namespace impeller

#endif  // FLUTTER_IMPELLER_RENDERER_SURFACE_H_
