summaryrefslogtreecommitdiffstats
path: root/opengl/libagl
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-10-19 18:27:47 -0400
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-10-19 18:27:47 -0400
commit62df88bcc95a714c1d5035471dfe7fe0ddd9d50b (patch)
treebf31797c243a61d05e2250edfbd5a847f6d85b16 /opengl/libagl
parentf37447bad3773b62176baa837908daf6edb44273 (diff)
parent0953c1d5e1c295c84fa02237bf70c779e45c83ae (diff)
downloadframeworks_base-62df88bcc95a714c1d5035471dfe7fe0ddd9d50b.zip
frameworks_base-62df88bcc95a714c1d5035471dfe7fe0ddd9d50b.tar.gz
frameworks_base-62df88bcc95a714c1d5035471dfe7fe0ddd9d50b.tar.bz2
Merge change I0953c1d5 into eclair
* changes: fix [2153873] EGL-1.4 software implementation misses surface attributes
Diffstat (limited to 'opengl/libagl')
-rw-r--r--opengl/libagl/egl.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/opengl/libagl/egl.cpp b/opengl/libagl/egl.cpp
index 37628b7..d04900e 100644
--- a/opengl/libagl/egl.cpp
+++ b/opengl/libagl/egl.cpp
@@ -953,12 +953,17 @@ static config_pair_t const config_base_attribute_list[] = {
{ EGL_BIND_TO_TEXTURE_RGB, EGL_FALSE },
{ EGL_MIN_SWAP_INTERVAL, 1 },
{ EGL_MAX_SWAP_INTERVAL, 1 },
+ { EGL_LUMINANCE_SIZE, 0 },
+ { EGL_ALPHA_MASK_SIZE, 0 },
+ { EGL_COLOR_BUFFER_TYPE, EGL_RGB_BUFFER },
{ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES_BIT },
+ { EGL_CONFORMANT, 0 }
};
// These configs can override the base attribute list
// NOTE: when adding a config here, don't forget to update eglCreate*Surface()
+
static config_pair_t const config_0_attribute_list[] = {
{ EGL_BUFFER_SIZE, 16 },
{ EGL_ALPHA_SIZE, 0 },
@@ -1062,10 +1067,18 @@ static config_management_t const gConfigManagement[] = {
{ EGL_BIND_TO_TEXTURE_RGB, config_management_t::exact },
{ EGL_MIN_SWAP_INTERVAL, config_management_t::exact },
{ EGL_MAX_SWAP_INTERVAL, config_management_t::exact },
+ { EGL_LUMINANCE_SIZE, config_management_t::atLeast },
+ { EGL_ALPHA_MASK_SIZE, config_management_t::atLeast },
+ { EGL_COLOR_BUFFER_TYPE, config_management_t::exact },
+ { EGL_RENDERABLE_TYPE, config_management_t::mask },
+ { EGL_CONFORMANT, config_management_t::mask }
};
+
static config_pair_t const config_defaults[] = {
- { EGL_SURFACE_TYPE, EGL_WINDOW_BIT },
+ // attributes that are not specified are simply ignored, if a particular
+ // one needs not be ignored, it must be specified here, eg:
+ // { EGL_SURFACE_TYPE, EGL_WINDOW_BIT },
};
// ----------------------------------------------------------------------------
@@ -1513,7 +1526,7 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,
numAttributes++;
EGLint attr = *attrib_list++;
EGLint val = *attrib_list++;
- for (int i=0 ; i<numConfigs ; i++) {
+ for (int i=0 ; possibleMatch && i<numConfigs ; i++) {
if (!(possibleMatch & (1<<i)))
continue;
if (isAttributeMatching(i, attr, val) == 0) {
@@ -1523,15 +1536,15 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,
}
// now, handle the attributes which have a useful default value
- for (size_t j=0 ; j<NELEM(config_defaults) ; j++) {
- // see if this attribute was specified, if not apply its
+ for (size_t j=0 ; possibleMatch && j<NELEM(config_defaults) ; j++) {
+ // see if this attribute was specified, if not, apply its
// default value
if (binarySearch<config_pair_t>(
(config_pair_t const*)attrib_list,
0, numAttributes-1,
config_defaults[j].key) < 0)
{
- for (int i=0 ; i<numConfigs ; i++) {
+ for (int i=0 ; possibleMatch && i<numConfigs ; i++) {
if (!(possibleMatch & (1<<i)))
continue;
if (isAttributeMatching(i,