//
// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

// WindowSurfaceEGL.h: EGL implementation of egl::Surface for windows

#include "libANGLE/renderer/gl/egl/WindowSurfaceEGL.h"

namespace rx
{

WindowSurfaceEGL::WindowSurfaceEGL(const egl::SurfaceState &state,
                                   const FunctionsEGL *egl,
                                   EGLConfig config,
                                   EGLNativeWindowType window,
                                   const std::vector<EGLint> &attribList,
                                   EGLContext context,
                                   RendererGL *renderer)
    : SurfaceEGL(state, egl, config, attribList, context, renderer), mWindow(window)
{
}

WindowSurfaceEGL::~WindowSurfaceEGL()
{
}

egl::Error WindowSurfaceEGL::initialize(const DisplayImpl *displayImpl)
{
    mSurface = mEGL->createWindowSurface(mConfig, mWindow, mAttribList.data());
    if (mSurface == EGL_NO_SURFACE)
    {
        return egl::Error(mEGL->getError(), "eglCreateWindowSurface failed");
    }

    return egl::Error(EGL_SUCCESS);
}

}  // namespace rx
