This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Getting EGL_BAD_DISPLAY while firing eglquerystring() from application

Hi Community,

I am building test suite for Open GL ES 2.0 with EGL support.When I run app ,i am getting above error while getting EGL extensions with API egl.querystring().

Anything I am missing here OR is it because of libMAli.so/libEGL.so/user-space-driver issue?

My platform is linux with x11 as window manager.

Let me know if you want more information

Thanks,

Vaibhav

Message was edited by: vaibhav

Parents Reply Children
  • So, after trying to build a minimal eglQueryString example, I found two problems :

    - If eglGetDisplay is not called, eglQueryString will return NULL and an EGL Error will be raised.

    - If eglInitialize is not called, eglQueryString will also return NULL and an EGL Error will be raised.

    Here's a quick working minimal example on how to use of eglQueryString. The example is in C but should be easy to adapt.

    /* Compile with gcc -g3 -o example example.c -lX11 -lEGL */
    
    #include <assert.h>
    #include <stdio.h>
    #include <EGL/egl.h>
    #include <EGL/eglplatform.h>
    
    void printEGLError();
    
    int main(void) {
      Display* x_display = XOpenDisplay(NULL);
      EGLDisplay display = eglGetDisplay(x_display);
      assert(display != EGL_NO_DISPLAY);
    
      EGLint major, minor;
      eglInitialize(display, &major, &minor);
      char *string = eglQueryString(display, EGL_CLIENT_APIS);
      assert(string);
    
      printf("%s\n", string);
    
      return 0;
    }
    
    /* Use printEGLError to show a description of the last EGL Error.
      The descriptions are taken from the eglGetError manual */
    #define ERROR_DESC(...) fprintf(stderr, "%s\n", __VA_ARGS__); break
    
    void printEGLError() {
    
      switch(eglGetError()) {
    
      case(EGL_SUCCESS):
        ERROR_DESC("The last function succeeded without error.");
      case(EGL_NOT_INITIALIZED):
        ERROR_DESC("EGL is not initialized, or could not be initialized, for the specified EGL display connection.");
      case(EGL_BAD_ACCESS):
        ERROR_DESC("EGL cannot access a requested resource (for example a context is bound in another thread).");
      case(EGL_BAD_ALLOC):
        ERROR_DESC("EGL failed to allocate resources for the requested operation.");
      case(EGL_BAD_ATTRIBUTE):
        ERROR_DESC("An unrecognized attribute or attribute value was passed in the attribute list.");
      case(EGL_BAD_CONTEXT):
        ERROR_DESC("An EGLContext argument does not name a valid EGL rendering context.");
      case(EGL_BAD_CONFIG):
        ERROR_DESC("An EGLConfig argument does not name a valid EGL frame buffer configuration.");
      case(EGL_BAD_CURRENT_SURFACE):
        ERROR_DESC("The current surface of the calling thread is a window, pixel buffer or pixmap that is no longer valid.");
      case(EGL_BAD_DISPLAY):
        ERROR_DESC("An EGLDisplay argument does not name a valid EGL display connection.");
      case(EGL_BAD_SURFACE):
        ERROR_DESC("An EGLSurface argument does not name a valid surface (window, pixel buffer or pixmap) configured for GL rendering.");
      case(EGL_BAD_MATCH):
        ERROR_DESC("Arguments are inconsistent (for example, a valid context requires buffers not supplied by a valid surface).");
      case(EGL_BAD_PARAMETER):
        ERROR_DESC("One or more argument values are invalid.");
      case(EGL_BAD_NATIVE_PIXMAP):
        ERROR_DESC("A NativePixmapType argument does not refer to a valid native pixmap.");
      case(EGL_BAD_NATIVE_WINDOW):
        ERROR_DESC("A NativeWindowType argument does not refer to a valid native window.");
      case(EGL_CONTEXT_LOST):
        ERROR_DESC("A power management event has occurred. The application must destroy all contexts and reinitialise OpenGL ES state and objects to continue rendering. ");
      }
    }
    
  • Hi vaibhav810,

    const char* const extensionStr = egl.queryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);


    QueryString in this case is expecting a valid EGL_DISPLAY.

    Could you try to initialize your display using this method:

    display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
    if(display == EGL_NO_DISPLAY)
    {
         EGLint error = eglGetError();
         LOGE("eglGetError(): %i (0x%.4x)\n", (int)error, (int)error);
         LOGE("No EGL Display available at %s:%i\n", __FILE__, __LINE__);
         exit(1);
    }
    

    And then use the display you got inside your query string.

    For implementation example, you can refer yourself to the simple-framework project included in our OpenGL ES SDK for linux available here: Mali OpenGL ES SDK for Linux - Mali Developer Center