Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 1 of 1

Thread: eglMakeCurrent() failing with EGL_BAD_MATCH

Threaded View

  1. #1
    Newbie Newbie
    Join Date
    Dec 2012
    Posts
    1

    Unhappy eglMakeCurrent() failing with EGL_BAD_MATCH

    I am developing for Android using opengl/egl. My app requires a second context for loading textures from a second thread.

    My code works fine on android 2.3, but when I try the code on a 4.0.3 android device or emulator, eglMakeCurrent() fails with EGL_BAD_MATCH.

    The initialization of the second context and it's pixel buffer all works fine too, so I am not sure where to begin looking for this error.

    This is the initialization code:

    Code :
    ANativeWindow *window = (ANativeWindow*)displaySurface;
     
    EGLint dummy, format;
     
    display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
     
    eglInitialize(display, 0, 0);
     
    EGLint contextAttribs[] =
    {
    	EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE
    };
     
    const EGLint configAttribs[] =
    {
    	EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
    	EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
    	EGL_BLUE_SIZE, 8,
    	EGL_GREEN_SIZE, 8,
    	EGL_RED_SIZE, 8,
    	EGL_ALPHA_SIZE, 8,
    	EGL_BUFFER_SIZE, 32,
    	EGL_DEPTH_SIZE, 24,
    	EGL_NONE
    };
     
    EGLint numConfigs;
    EGLConfig config;
     
    eglChooseConfig(display, configAttribs, &config, 1, &numConfigs);
    eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);
    ANativeWindow_setBuffersGeometry(window, 0, 0, format);
     
    surface = eglCreateWindowSurface(display, config, window, NULL);
    if(surface == NULL)
    	Trace("error creating window surface: " + GetEglError());
     
    context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs);
    if(context == NULL)
    	Trace("error creating main context: " + GetEglError());
     
    const EGLint auxConfigAttribs[] =
    {
    	EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
    	EGL_BLUE_SIZE, 8,
    	EGL_GREEN_SIZE, 8,
    	EGL_RED_SIZE, 8,
    	EGL_ALPHA_SIZE, 8,
    	EGL_DEPTH_SIZE, 0,
    	EGL_STENCIL_SIZE, 0,
    	EGL_NONE
    };
     
    EGLint pbufferAttribs[] =
    {
    	EGL_WIDTH, 1,
    	EGL_HEIGHT, 1,
    	EGL_TEXTURE_TARGET, EGL_NO_TEXTURE,
    	EGL_TEXTURE_FORMAT, EGL_NO_TEXTURE,
    	EGL_NONE
    };
     
    EGLint auxNumConfigs;
    EGLConfig auxConfig;
     
    eglChooseConfig(display, auxConfigAttribs, &auxConfig, 1, &auxNumConfigs);
     
    auxSurface = eglCreatePbufferSurface(display, auxConfig, pbufferAttribs);
    if(auxSurface == NULL)
    	Trace("error creating pbuffer surface: " + GetEglError());
     
    auxContext = eglCreateContext(display, auxConfig, context, contextAttribs);
    if(auxSurface == NULL)
    	Trace("error creating auxilliary context: " + GetEglError());
     
    if(!eglMakeCurrent(display, surface, surface, context))
    	Trace("could not make main context current: " + GetEglError());

    On my Android 2.3 device(HTC Desire), the above initialization code works perfectly, and I can make the auxContext current, and load textures just fine.

    BUT, on my android 4.0.3 device(Samsung Nexus S) and my Android 4.1 device (Galaxy Note 2), eglMakeCurrent() fails with EGL_BAD_MATCH after a successful initialization.

    any help would be greatly appreciated,

    Thanks,
    Nick
    Last edited by glNick; 12-27-2012 at 04:46 PM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •