// 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 "gl_context_switch.h"

namespace flutter {

SwitchableGLContext::SwitchableGLContext() = default;

SwitchableGLContext::~SwitchableGLContext() = default;

GLContextResult::GLContextResult() = default;
GLContextResult::~GLContextResult() = default;
GLContextResult::GLContextResult(bool static_result) : result_(static_result){};
bool GLContextResult::GetResult() {
  return result_;
};

GLContextDefaultResult::~GLContextDefaultResult() = default;
GLContextDefaultResult::GLContextDefaultResult(bool static_result)
    : GLContextResult(static_result){};

GLContextSwitch::GLContextSwitch(std::unique_ptr<SwitchableGLContext> context)
    : context_(std::move(context)) {
  FML_CHECK(context_ != nullptr);
  result_ = context_->SetCurrent();
};

GLContextSwitch::~GLContextSwitch() {
  context_->RemoveCurrent();
};

}  // namespace flutter
