diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp index f41e6e23117680fe5efa54fcda7c2f821cffc78d..02248cb591653af661285e341353b29647b6da82 100644 --- a/opengl/libs/EGL/eglApi.cpp +++ b/opengl/libs/EGL/eglApi.cpp @@ -62,6 +62,10 @@ using namespace android; #define ENABLE_EGL_ANDROID_GET_FRAME_TIMESTAMPS 0 +#if 1 +#define EGL_Config_Debug +#endif + // ---------------------------------------------------------------------------- namespace android { @@ -354,6 +358,19 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list, { clearError(); + size_t temp_index = 0; + + if (attrib_list) { + while (temp_index % 2 == 1 || attrib_list[temp_index] != EGL_NONE) { + +#ifdef EGL_Config_Debug + ALOGE("index:%d, value:%d", temp_index, attrib_list[temp_index]); +#endif + + ++ temp_index; + } + } + const egl_display_ptr dp = validate_display(dpy); if (!dp) return EGL_FALSE; @@ -419,8 +436,17 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list, } } + EGLint temp_attribs[temp_index + 1]; + memcpy(&temp_attribs[0], attrib_list, (temp_index + 1) * sizeof(EGLint)); + + if (temp_index > 0) { + for (int i = 0; i < temp_index; i += 2) { + if (temp_attribs[i] == EGL_SAMPLES || temp_attribs[i] == EGL_SAMPLE_BUFFERS) + temp_attribs[i + 1] = 0; + } + } res = cnx->egl.eglChooseConfig( - dp->disp.dpy, attrib_list, configs, config_size, num_config); + dp->disp.dpy, temp_attribs, configs, config_size, num_config); } return res; } @@ -669,6 +695,45 @@ EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, { clearError(); +#ifdef EGL_Config_Debug + + int attribs[] = {EGL_ALPHA_SIZE, EGL_ALPHA_MASK_SIZE, EGL_BLUE_SIZE, EGL_BUFFER_SIZE, EGL_COLOR_BUFFER_TYPE, EGL_CONFIG_CAVEAT, EGL_CONFIG_ID, EGL_DEPTH_SIZE, EGL_GREEN_SIZE, EGL_LEVEL, EGL_LUMINANCE_SIZE, EGL_MAX_PBUFFER_WIDTH, EGL_MAX_PBUFFER_HEIGHT, EGL_MAX_PBUFFER_PIXELS, EGL_NATIVE_RENDERABLE, EGL_NATIVE_VISUAL_ID, EGL_NATIVE_VISUAL_TYPE, EGL_RED_SIZE, EGL_RENDERABLE_TYPE, EGL_SAMPLE_BUFFERS, EGL_SAMPLES, EGL_STENCIL_SIZE, EGL_SURFACE_TYPE, EGL_TRANSPARENT_TYPE, EGL_TRANSPARENT_RED_VALUE, EGL_TRANSPARENT_GREEN_VALUE, EGL_TRANSPARENT_BLUE_VALUE}; + char* attrib_names[] = {"EGL_ALPHA_SIZE", "EGL_ALPHA_MASK_SIZE", "EGL_BLUE_SIZE", "EGL_BUFFER_SIZE", "EGL_COLOR_BUFFER_TYPE", "EGL_CONFIG_CAVEAT", "EGL_CONFIG_ID", "EGL_DEPTH_SIZE", "EGL_GREEN_SIZE", "EGL_LEVEL", "EGL_LUMINANCE_SIZE", "EGL_MAX_PBUFFER_WIDTH", "EGL_MAX_PBUFFER_HEIGHT", "EGL_MAX_PBUFFER_PIXELS", "EGL_NATIVE_RENDERABLE", "EGL_NATIVE_VISUAL_ID", "EGL_NATIVE_VISUAL_TYPE", "EGL_RED_SIZE", "EGL_RENDERABLE_TYPE", "EGL_SAMPLE_BUFFERS", "EGL_SAMPLES", "EGL_STENCIL_SIZE", "EGL_SURFACE_TYPE", "EGL_TRANSPARENT_TYPE", "EGL_TRANSPARENT_RED_VALUE", "EGL_TRANSPARENT_GREEN_VALUE", "EGL_TRANSPARENT_BLUE_VALUE" }; + + for (int i = 0; i < 27; i++) { + int colorBufferSize = 0; + eglGetConfigAttrib(dpy, config, attribs[i], &colorBufferSize); + ALOGE("eglCreateContext configs, %s: %d", attrib_names[i], colorBufferSize); + } + ALOGE("eglCreateContext configs done"); + +#endif + + size_t temp_index = 0; + + if (attrib_list) { + while (temp_index % 2 == 1 || attrib_list[temp_index] != EGL_NONE) { +#ifdef EGL_Config_Debug + ALOGE("index:%d, value:%d", temp_index, attrib_list[temp_index]); +#endif + ++ temp_index; + } + } + + + EGLint temp_attribs[temp_index + 1]; + memcpy(&temp_attribs[0], attrib_list, (temp_index + 1) * sizeof(EGLint)); + + if (temp_index > 0) { + for (int i = 0; i < temp_index; i += 2) { + if (temp_attribs[i] == EGL_SAMPLES || temp_attribs[i] == EGL_SAMPLE_BUFFERS) + temp_attribs[i + 1] = 0; + if (temp_attribs[i] == EGL_CONTEXT_CLIENT_VERSION) { + temp_attribs[i + 1] = temp_attribs[i + 1] > 2 ? 2 : temp_attribs[i + 1]; + } + } + } + egl_connection_t* cnx = NULL; const egl_display_ptr dp = validate_display_connection(dpy, cnx); if (dp) { @@ -680,7 +745,7 @@ EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, share_list = c->context; } EGLContext context = cnx->egl.eglCreateContext( - dp->disp.dpy, config, share_list, attrib_list); + dp->disp.dpy, config, share_list, temp_attribs); if (context != EGL_NO_CONTEXT) { // figure out if it's a GLESv1 or GLESv2 int version = 0; @@ -699,9 +764,11 @@ EGLContext eglCreateContext(EGLDisplay dpy, EGLConfig config, } egl_context_t* c = new egl_context_t(dpy, context, config, cnx, version); + return c; } } + return EGL_NO_CONTEXT; }