At this point system/egl should build without errors Change-Id: Ieabae930fc20a8df4f3d68f179d685401e946e74
388 lines
8.0 KiB
C++
388 lines
8.0 KiB
C++
/*
|
|
* Copyright (C) 2011 The Android Open Source Project
|
|
*
|
|
* 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 "HostConnection.h"
|
|
#include "ThreadInfo.h"
|
|
#include "eglDisplay.h"
|
|
#include "egl_ftable.h"
|
|
#include <cutils/log.h>
|
|
|
|
// The one and only supported display object.
|
|
static eglDisplay s_display;
|
|
|
|
static EGLClient_eglInterface s_eglIface = {
|
|
getThreadInfo: getEGLThreadInfo
|
|
};
|
|
|
|
#define RETURN_ERROR(ret,err) \
|
|
getEGLThreadInfo()->eglError = err; \
|
|
return ret;
|
|
|
|
#define VALIDATE_CONFIG(cfg,ret) \
|
|
if(((int)cfg<0)||((int)cfg>s_display.getNumConfigs())) { \
|
|
RETURN_ERROR(ret,EGL_BAD_CONFIG); \
|
|
}
|
|
|
|
#define VALIDATE_DISPLAY(dpy,ret) \
|
|
if ((dpy) != (EGLDisplay)&s_display) { \
|
|
getEGLThreadInfo()->eglError = EGL_BAD_DISPLAY; \
|
|
return ret; \
|
|
}
|
|
|
|
#define VALIDATE_DISPLAY_INIT(dpy,ret) \
|
|
VALIDATE_DISPLAY(dpy, ret) \
|
|
if (!s_display.initialized()) { \
|
|
getEGLThreadInfo()->eglError = EGL_NOT_INITIALIZED; \
|
|
return ret; \
|
|
}
|
|
|
|
EGLDisplay eglGetDisplay(EGLNativeDisplayType display_id)
|
|
{
|
|
//
|
|
// we support only EGL_DEFAULT_DISPLAY.
|
|
//
|
|
if (display_id != EGL_DEFAULT_DISPLAY) {
|
|
return EGL_NO_DISPLAY;
|
|
}
|
|
|
|
return (EGLDisplay)&s_display;
|
|
}
|
|
|
|
EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
|
|
{
|
|
VALIDATE_DISPLAY(dpy,EGL_FALSE);
|
|
|
|
if (!s_display.initialize(&s_eglIface)) {
|
|
return EGL_FALSE;
|
|
}
|
|
|
|
*major = s_display.getVersionMajor();
|
|
*minor = s_display.getVersionMinor();
|
|
return EGL_TRUE;
|
|
}
|
|
|
|
EGLBoolean eglTerminate(EGLDisplay dpy)
|
|
{
|
|
VALIDATE_DISPLAY_INIT(dpy, EGL_FALSE);
|
|
|
|
s_display.terminate();
|
|
return EGL_TRUE;
|
|
}
|
|
|
|
EGLint eglGetError()
|
|
{
|
|
return getEGLThreadInfo()->eglError;
|
|
}
|
|
|
|
__eglMustCastToProperFunctionPointerType eglGetProcAddress(const char *procname)
|
|
{
|
|
// search in EGL function table
|
|
for (int i=0; i<egl_num_funcs; i++) {
|
|
if (!strcmp(egl_funcs_by_name[i].name, procname)) {
|
|
return (__eglMustCastToProperFunctionPointerType)egl_funcs_by_name[i].proc;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Make sure display is initialized before searching in client APIs
|
|
//
|
|
if (!s_display.initialized()) {
|
|
if (!s_display.initialize(&s_eglIface)) {
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
// look in gles
|
|
void *proc = s_display.gles_iface()->getProcAddress( procname );
|
|
if (proc != NULL) {
|
|
return (__eglMustCastToProperFunctionPointerType)proc;
|
|
}
|
|
|
|
// look in gles2
|
|
if (s_display.gles2_iface() != NULL) {
|
|
proc = s_display.gles2_iface()->getProcAddress( procname );
|
|
if (proc != NULL) {
|
|
return (__eglMustCastToProperFunctionPointerType)proc;
|
|
}
|
|
}
|
|
|
|
// Fail - function not found.
|
|
return NULL;
|
|
}
|
|
|
|
const char* eglQueryString(EGLDisplay dpy, EGLint name)
|
|
{
|
|
VALIDATE_DISPLAY_INIT(dpy, NULL);
|
|
|
|
return s_display.queryString(name);
|
|
}
|
|
|
|
EGLBoolean eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config)
|
|
{
|
|
VALIDATE_DISPLAY_INIT(dpy, NULL);
|
|
|
|
if(!num_config) {
|
|
RETURN_ERROR(EGL_FALSE,EGL_BAD_PARAMETER);
|
|
}
|
|
|
|
GLint numConfigs = s_display.getNumConfigs();
|
|
if (!configs) {
|
|
*num_config = numConfigs;
|
|
return EGL_TRUE;
|
|
}
|
|
|
|
int i=0;
|
|
for (i=0 ; i<numConfigs && i<config_size ; i++) {
|
|
*configs++ = (EGLConfig)i;
|
|
}
|
|
*num_config = i;
|
|
return EGL_TRUE;
|
|
}
|
|
|
|
EGLBoolean eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
|
|
{
|
|
VALIDATE_DISPLAY_INIT(dpy, NULL);
|
|
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
|
|
{
|
|
VALIDATE_DISPLAY_INIT(dpy, NULL);
|
|
VALIDATE_CONFIG(config, EGL_FALSE);
|
|
|
|
EGLint attribVal = s_display.getConfigAttrib(config, attribute);
|
|
|
|
if (attribVal == ATTRIBUTE_NONE) {
|
|
RETURN_ERROR(EGL_FALSE, EGL_BAD_ATTRIBUTE);
|
|
}
|
|
|
|
*value = attribVal;
|
|
return EGL_TRUE;
|
|
|
|
|
|
}
|
|
|
|
EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLSurface eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLSurface eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglQuerySurface(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglBindAPI(EGLenum api)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLenum eglQueryAPI()
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglWaitClient()
|
|
{ //TODO
|
|
return 0;
|
|
|
|
}
|
|
|
|
EGLBoolean eglReleaseThread()
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLSurface eglCreatePbufferFromClientBuffer(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLint interval)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglDestroyContext(EGLDisplay dpy, EGLContext ctx)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLContext eglGetCurrentContext()
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLSurface eglGetCurrentSurface(EGLint readdraw)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLDisplay eglGetCurrentDisplay()
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglQueryContext(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglWaitGL()
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglWaitNative(EGLint engine)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglSwapBuffers(EGLDisplay dpy, EGLSurface surface)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglLockSurfaceKHR(EGLDisplay display, EGLSurface surface, const EGLint *attrib_list)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglUnlockSurfaceKHR(EGLDisplay display, EGLSurface surface)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLSyncKHR eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLint eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|
|
|
|
EGLBoolean eglSetSwapRectangleANDROID(EGLDisplay dpy, EGLSurface draw, EGLint left, EGLint top, EGLint width, EGLint height)
|
|
{
|
|
//TODO
|
|
return 0;
|
|
}
|