// 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_SHELL_PLATFORM_ANDROID_ANDROID_CONTEXT_GL_H_
#define FLUTTER_SHELL_PLATFORM_ANDROID_ANDROID_CONTEXT_GL_H_

#include "flutter/fml/macros.h"
#include "flutter/fml/memory/ref_counted.h"
#include "flutter/fml/memory/ref_ptr.h"
#include "flutter/shell/common/platform_view.h"
#include "flutter/shell/platform/android/android_environment_gl.h"
#include "flutter/shell/platform/android/android_native_window.h"
#include "third_party/skia/include/core/SkSize.h"

namespace flutter {

class AndroidContextGL : public fml::RefCountedThreadSafe<AndroidContextGL> {
 public:
  bool CreateWindowSurface(fml::RefPtr<AndroidNativeWindow> window);

  bool CreatePBufferSurface();

  fml::RefPtr<AndroidEnvironmentGL> Environment() const;

  bool IsValid() const;

  bool MakeCurrent();

  bool ClearCurrent();

  bool SwapBuffers();

  SkISize GetSize();

  bool Resize(const SkISize& size);

 private:
  fml::RefPtr<AndroidEnvironmentGL> environment_;
  fml::RefPtr<AndroidNativeWindow> window_;
  EGLConfig config_;
  EGLSurface surface_;
  EGLContext context_;
  bool valid_;

  AndroidContextGL(fml::RefPtr<AndroidEnvironmentGL> env,
                   const AndroidContextGL* share_context = nullptr);

  ~AndroidContextGL();

  FML_FRIEND_MAKE_REF_COUNTED(AndroidContextGL);
  FML_FRIEND_REF_COUNTED_THREAD_SAFE(AndroidContextGL);
  FML_DISALLOW_COPY_AND_ASSIGN(AndroidContextGL);
};

}  // namespace flutter

#endif  // FLUTTER_SHELL_PLATFORM_ANDROID_ANDROID_CONTEXT_GL_H_