blob: b4d913752baf547c723e2313216d8a42c7891207 [file] [log] [blame]
// Copyright 2015 Google Inc. 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.
#include "cobalt/renderer/backend/egl/utils.h"
#include <EGL/egl.h>
#include <GLES2/gl2ext.h>
namespace cobalt {
namespace renderer {
namespace backend {
EGLContext CreateGLES3Context(EGLDisplay display, EGLConfig config,
EGLContext share_context) {
// Create an OpenGL ES 3.0 context.
EGLint context_attrib_list[] = {
EGL_CONTEXT_CLIENT_VERSION, 3, EGL_NONE,
};
EGLContext context =
eglCreateContext(display, config, share_context, context_attrib_list);
if (eglGetError() != EGL_SUCCESS) {
// Some drivers, such as Mesa 3D on Linux, do support GL ES 3, and report
// it as the version when queried (via glGetString(GL_VERSION)), however
// for some reason they do not initialize correctly unless 2 is provided
// as EGL_CONTEXT_CLIENT_VERSION. Thus, this fallback code exists to
// facilitate those platforms.
EGLint context_attrib_list_gles2[] = {
EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE,
};
context = eglCreateContext(display, config, share_context,
context_attrib_list_gles2);
CHECK_EQ(EGL_SUCCESS, eglGetError());
}
return context;
}
int BytesPerPixelForGLFormat(GLenum format) {
switch (format) {
case GL_RGBA:
case GL_BGRA_EXT:
return 4;
case GL_LUMINANCE_ALPHA:
return 2;
case GL_ALPHA:
return 1;
default:
NOTREACHED() << "Unknown GL format.";
}
return 0;
}
} // namespace backend
} // namespace renderer
} // namespace cobalt