156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall/* 256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Copyright (C) 2011 The Android Open Source Project 356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* 456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Licensed under the Apache License, Version 2.0 (the "License"); 556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* you may not use this file except in compliance with the License. 656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* You may obtain a copy of the License at 756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* 856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* http://www.apache.org/licenses/LICENSE-2.0 956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* 1056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Unless required by applicable law or agreed to in writing, software 1156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* distributed under the License is distributed on an "AS IS" BASIS, 1256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* See the License for the specific language governing permissions and 1456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* limitations under the License. 1556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall*/ 1656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#ifndef _SYSTEM_EGL_DISPLAY_H 1756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#define _SYSTEM_EGL_DISPLAY_H 1856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 1956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include <pthread.h> 2056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include "glUtils.h" 2156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include <EGL/egl.h> 2256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include <EGL/eglext.h> 2356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include "EGLClientIface.h" 2456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include <utils/KeyedVector.h> 2556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 2656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include <ui/PixelFormat.h> 2756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 2856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#define ATTRIBUTE_NONE -1 2956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall//FIXME: are we in this namespace? 3056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallusing namespace android; 3156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 3256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallclass eglDisplay 3356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall{ 3456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallpublic: 3556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall eglDisplay(); 3656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ~eglDisplay(); 3756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 3856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall bool initialize(EGLClient_eglInterface *eglIface); 3956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall void terminate(); 4056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 4156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int getVersionMajor() const { return m_major; } 4256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int getVersionMinor() const { return m_minor; } 4356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall bool initialized() const { return m_initialized; } 4456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 4556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const char *queryString(EGLint name); 4656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 4756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const EGLClient_glesInterface *gles_iface() const { return m_gles_iface; } 4856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall const EGLClient_glesInterface *gles2_iface() const { return m_gles2_iface; } 4956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 5056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int getNumConfigs(){ return m_numConfigs; } 5156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall EGLBoolean getConfigAttrib(EGLConfig config, EGLint attrib, EGLint * value); 5256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall EGLBoolean setConfigAttrib(EGLConfig config, EGLint attrib, EGLint value); 5356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall EGLBoolean getConfigGLPixelFormat(EGLConfig config, GLenum * format); 5456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall EGLBoolean getConfigNativePixelFormat(EGLConfig config, PixelFormat * format); 5556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 5656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall void dumpConfig(EGLConfig config); 5756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallprivate: 5856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall EGLClient_glesInterface *loadGLESClientAPI(const char *libName, 5956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall EGLClient_eglInterface *eglIface, 6056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall void **libHandle); 6156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall EGLBoolean getAttribValue(EGLConfig config, EGLint attribIdxi, EGLint * value); 6256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall EGLBoolean setAttribValue(EGLConfig config, EGLint attribIdxi, EGLint value); 6356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall void processConfigs(); 6456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 6556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallprivate: 6656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall pthread_mutex_t m_lock; 6756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall bool m_initialized; 6856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int m_major; 6956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int m_minor; 7056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int m_hostRendererVersion; 7156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int m_numConfigs; 7256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int m_numConfigAttribs; 7356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 7456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall /* This is the mapping between an attribute name to it's index in any given config */ 7556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall DefaultKeyedVector<EGLint, EGLint> m_attribs; 7656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall /* This is an array of all config's attributes values stored in the following sequencial fasion (read: v[c,a] = the value of attribute <a> of config <c>) 7756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall * v[0,0],..,v[0,m_numConfigAttribs-1], 7856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall *... 7956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall * v[m_numConfigs-1,0],..,v[m_numConfigs-1,m_numConfigAttribs-1] 8056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall */ 8156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall EGLint *m_configs; 8256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall EGLClient_glesInterface *m_gles_iface; 8356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall EGLClient_glesInterface *m_gles2_iface; 8456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall char *m_versionString; 8556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall char *m_vendorString; 8656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall char *m_extensionString; 8756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall}; 8856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 8956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#endif 90