// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COBALT_RENDERER_BACKEND_EGL_UTILS_H_
#define COBALT_RENDERER_BACKEND_EGL_UTILS_H_

#include <EGL/egl.h>
#include <GLES2/gl2.h>

#include "base/logging.h"

// Provide an easy method of calling EGL and GL function and verifying that they
// did not generate any errors.  CHECKs is used for EGL calls for release-build
// error checking.  DCHECKs are used for GL calls instead of CHECKs because
// GL calls are expected to occur much more frequently.

#define GL_CALL(x) \
    do {\
      x;\
      DCHECK_EQ(GL_NO_ERROR, glGetError());\
    } while (false)

#define EGL_CALL(x) \
    do {\
      x;\
      CHECK_EQ(EGL_SUCCESS, eglGetError());\
    } while (false)

namespace cobalt {
namespace renderer {
namespace backend {

// Uses EGL to create a GL ES 3 context.  While EGL specifies a standard way
// to do this, some platforms have finicky implementations and this function
// smooths that over.
EGLContext CreateGLES3Context(EGLDisplay display, EGLConfig config,
                              EGLContext share_context);

int BytesPerPixelForGLFormat(GLenum format);

}  // namespace backend
}  // namespace renderer
}  // namespace cobalt

#endif  // COBALT_RENDERER_BACKEND_EGL_UTILS_H_
