blob: eeea0349ebf5b22e97b1251c28663c8665d61f4d [file] [log] [blame]
// 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_WINDOWS_EGL_SURFACE_H_
#define FLUTTER_SHELL_PLATFORM_WINDOWS_EGL_SURFACE_H_
#include <EGL/egl.h>
#include "flutter/fml/macros.h"
namespace flutter {
namespace egl {
// An EGL surface. This can be window surface or an off-screen buffer.
//
// This enables automatic error logging and mocking.
class Surface {
public:
Surface(EGLDisplay display, EGLContext context, EGLSurface surface);
~Surface();
// Destroy the EGL surface and invalidate this object.
//
// This also unbinds the current context from the thread.
virtual bool Destroy();
// Check whether the EGL surface is valid.
virtual bool IsValid() const;
// Bind the EGL surface's context and read and draw surfaces to the
// current thread. Returns true on success.
virtual bool MakeCurrent() const;
// Swap the surface's front the and back buffers. Used to present content.
// Returns true on success.
virtual bool SwapBuffers() const;
// Get the raw EGL surface.
virtual const EGLSurface& GetHandle() const;
protected:
bool is_valid_ = true;
EGLDisplay display_ = EGL_NO_DISPLAY;
EGLContext context_ = EGL_NO_CONTEXT;
EGLSurface surface_ = EGL_NO_SURFACE;
FML_DISALLOW_COPY_AND_ASSIGN(Surface);
};
} // namespace egl
} // namespace flutter
#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_EGL_SURFACE_H_