102f4aeb0Sopenharmony_ciName
202f4aeb0Sopenharmony_ci
302f4aeb0Sopenharmony_ci    EXT_platform_x11
402f4aeb0Sopenharmony_ci
502f4aeb0Sopenharmony_ciName Strings
602f4aeb0Sopenharmony_ci
702f4aeb0Sopenharmony_ci    EGL_EXT_platform_x11
802f4aeb0Sopenharmony_ci
902f4aeb0Sopenharmony_ciContributors
1002f4aeb0Sopenharmony_ci
1102f4aeb0Sopenharmony_ci    Chad Versace <chad.versace@intel.com>
1202f4aeb0Sopenharmony_ci    James Jones <jajones@nvidia.com>
1302f4aeb0Sopenharmony_ci
1402f4aeb0Sopenharmony_ciContacts
1502f4aeb0Sopenharmony_ci
1602f4aeb0Sopenharmony_ci    Chad Versace <chad.versace@intel.com>
1702f4aeb0Sopenharmony_ci
1802f4aeb0Sopenharmony_ciStatus
1902f4aeb0Sopenharmony_ci
2002f4aeb0Sopenharmony_ci    Complete
2102f4aeb0Sopenharmony_ci
2202f4aeb0Sopenharmony_ciVersion
2302f4aeb0Sopenharmony_ci
2402f4aeb0Sopenharmony_ci    Version 13, 2014-03-10
2502f4aeb0Sopenharmony_ci
2602f4aeb0Sopenharmony_ciNumber
2702f4aeb0Sopenharmony_ci
2802f4aeb0Sopenharmony_ci    EGL Extension #59
2902f4aeb0Sopenharmony_ci
3002f4aeb0Sopenharmony_ciExtension Type
3102f4aeb0Sopenharmony_ci
3202f4aeb0Sopenharmony_ci    EGL client extension
3302f4aeb0Sopenharmony_ci
3402f4aeb0Sopenharmony_ciDependencies
3502f4aeb0Sopenharmony_ci
3602f4aeb0Sopenharmony_ci    Requires EGL_EXT_client_extensions to query its existence without
3702f4aeb0Sopenharmony_ci    a display.
3802f4aeb0Sopenharmony_ci
3902f4aeb0Sopenharmony_ci    Requires EGL_EXT_platform_base.
4002f4aeb0Sopenharmony_ci
4102f4aeb0Sopenharmony_ci    This extension is written against the wording of version 7 of the
4202f4aeb0Sopenharmony_ci    EGL_EXT_platform_base specification.
4302f4aeb0Sopenharmony_ci
4402f4aeb0Sopenharmony_ciOverview
4502f4aeb0Sopenharmony_ci
4602f4aeb0Sopenharmony_ci    This extension defines how to create EGL resources from native X11
4702f4aeb0Sopenharmony_ci    resources using the functions defined by EGL_EXT_platform_base.
4802f4aeb0Sopenharmony_ci
4902f4aeb0Sopenharmony_ci    This extension defines only how to create EGL resources from Xlib
5002f4aeb0Sopenharmony_ci    resources. It does not define how to do so from xcb resources.  All X11
5102f4aeb0Sopenharmony_ci    types discussed here are defined by the header `Xlib.h`.
5202f4aeb0Sopenharmony_ci
5302f4aeb0Sopenharmony_ciNew Types
5402f4aeb0Sopenharmony_ci
5502f4aeb0Sopenharmony_ci    None
5602f4aeb0Sopenharmony_ci
5702f4aeb0Sopenharmony_ciNew Procedures and Functions
5802f4aeb0Sopenharmony_ci
5902f4aeb0Sopenharmony_ci    None
6002f4aeb0Sopenharmony_ci
6102f4aeb0Sopenharmony_ciNew Tokens
6202f4aeb0Sopenharmony_ci
6302f4aeb0Sopenharmony_ci    Accepted as the <platform> argument of eglGetPlatformDisplayEXT:
6402f4aeb0Sopenharmony_ci
6502f4aeb0Sopenharmony_ci        EGL_PLATFORM_X11_EXT                    0x31D5
6602f4aeb0Sopenharmony_ci
6702f4aeb0Sopenharmony_ci    Accepted as an attribute name in the <attrib_list> argument of
6802f4aeb0Sopenharmony_ci    eglGetPlatformDisplayEXT:
6902f4aeb0Sopenharmony_ci
7002f4aeb0Sopenharmony_ci        EGL_PLATFORM_X11_SCREEN_EXT             0x31D6
7102f4aeb0Sopenharmony_ci
7202f4aeb0Sopenharmony_ciAdditions to the EGL Specification
7302f4aeb0Sopenharmony_ci
7402f4aeb0Sopenharmony_ci    None.
7502f4aeb0Sopenharmony_ci
7602f4aeb0Sopenharmony_ciNew Behavior
7702f4aeb0Sopenharmony_ci
7802f4aeb0Sopenharmony_ci    To determine if the EGL implementation supports this extension, clients
7902f4aeb0Sopenharmony_ci    should query the EGL_EXTENSIONS string of EGL_NO_DISPLAY.
8002f4aeb0Sopenharmony_ci
8102f4aeb0Sopenharmony_ci    On the X11 platform, an EGLDisplay refers to a specific X11 screen rather
8202f4aeb0Sopenharmony_ci    than an X11 display connection. This is the case because separate X11
8302f4aeb0Sopenharmony_ci    screens, even when belonging to the same X11 display connection, may
8402f4aeb0Sopenharmony_ci    reside on different GPUs and/or be driven by different drivers. Therefore,
8502f4aeb0Sopenharmony_ci    different X11 screens may have different EGL capabilities.
8602f4aeb0Sopenharmony_ci
8702f4aeb0Sopenharmony_ci    To obtain an EGLDisplay backed by an X11 screen, call
8802f4aeb0Sopenharmony_ci    eglGetPlatformDisplayEXT with <platform> set to EGL_PLATFORM_X11_EXT. The
8902f4aeb0Sopenharmony_ci    <native_display> parameter specifies the X11 display connection to use, and
9002f4aeb0Sopenharmony_ci    must point to a valid X11 `Display` or be NULL.  If <native_display> is
9102f4aeb0Sopenharmony_ci    EGL_DEFAULT_DISPLAY, then EGL will create [1] a connection to the default
9202f4aeb0Sopenharmony_ci    X11 display. The environment variable DISPLAY determines the default X11
9302f4aeb0Sopenharmony_ci    display as described in the manual page for XOpenDisplay(3).  The value of
9402f4aeb0Sopenharmony_ci    attribute EGL_PLATFORM_X11_SCREEN_EXT specifies the X11 screen to use. If
9502f4aeb0Sopenharmony_ci    the attribute is omitted from <attrib_list>, then the display connection's
9602f4aeb0Sopenharmony_ci    default screen is used.  Otherwise, the attribute's value must be a valid
9702f4aeb0Sopenharmony_ci    screen on the display connection. If the attribute's value is not a valid
9802f4aeb0Sopenharmony_ci    screen, then an EGL_BAD_ATTRIBUTE error is generated.
9902f4aeb0Sopenharmony_ci
10002f4aeb0Sopenharmony_ci    [fn1] The method by which EGL creates a connection to the default X11
10102f4aeb0Sopenharmony_ci    display is an internal implementation detail. The implementation may use
10202f4aeb0Sopenharmony_ci    XOpenDisplay, xcb_connect, or any other method.
10302f4aeb0Sopenharmony_ci    
10402f4aeb0Sopenharmony_ci    To obtain an on-screen rendering surface from an X11 Window, call
10502f4aeb0Sopenharmony_ci    eglCreatePlatformWindowSurfaceEXT with a <dpy> that belongs to X11 and
10602f4aeb0Sopenharmony_ci    a <native_window> that points to an X11 Window.
10702f4aeb0Sopenharmony_ci
10802f4aeb0Sopenharmony_ci    To obtain an offscreen rendering surface from an X11 Pixmap, call
10902f4aeb0Sopenharmony_ci    eglCreatePlatformPixmapSurfaceEXT with a <dpy> that belongs to X11 and
11002f4aeb0Sopenharmony_ci    a <native_pixmap> that points to an X11 Pixmap.
11102f4aeb0Sopenharmony_ci
11202f4aeb0Sopenharmony_ciIssues
11302f4aeb0Sopenharmony_ci
11402f4aeb0Sopenharmony_ci    1. Should this extension permit EGL_DEFAULT_DISPLAY as input to
11502f4aeb0Sopenharmony_ci       eglGetPlatformDisplayEXT()?
11602f4aeb0Sopenharmony_ci
11702f4aeb0Sopenharmony_ci       RESOLVED. Yes. When given EGL_DEFAULT_DISPLAY, eglGetPlatformDisplayEXT
11802f4aeb0Sopenharmony_ci       returns an EGLDisplay backed by the default X11 display.
11902f4aeb0Sopenharmony_ci
12002f4aeb0Sopenharmony_ci    2. When given EGL_DEFAULT_DISPLAY, does eglGetPlatformDisplayEXT reuse an
12102f4aeb0Sopenharmony_ci       existing X11 display connection or create a new one?
12202f4aeb0Sopenharmony_ci
12302f4aeb0Sopenharmony_ci       RESOLVED. eglGetPlatformDisplayEXT creates a new connection because the
12402f4aeb0Sopenharmony_ci       alternative is infeasible. EGL cannot reliably detect if the client
12502f4aeb0Sopenharmony_ci       process already has a X11 display connection.
12602f4aeb0Sopenharmony_ci
12702f4aeb0Sopenharmony_ci
12802f4aeb0Sopenharmony_ciExample Code
12902f4aeb0Sopenharmony_ci
13002f4aeb0Sopenharmony_ci    // This example program creates two EGL surfaces: one from an X11 Window
13102f4aeb0Sopenharmony_ci    // and the other from an X11 Pixmap.
13202f4aeb0Sopenharmony_ci    //
13302f4aeb0Sopenharmony_ci    // If the macro USE_EGL_EXT_PLATFORM_X11 is defined, then the program
13402f4aeb0Sopenharmony_ci    // creates the surfaces using the methods defined in this specification.
13502f4aeb0Sopenharmony_ci    // Otherwise, it uses the methods defined by the EGL 1.4 specification.
13602f4aeb0Sopenharmony_ci    //
13702f4aeb0Sopenharmony_ci    // Compile with `cc -std=c99 example.c -lX11 -lEGL`.
13802f4aeb0Sopenharmony_ci
13902f4aeb0Sopenharmony_ci    #include <stdlib.h>
14002f4aeb0Sopenharmony_ci    #include <string.h>
14102f4aeb0Sopenharmony_ci
14202f4aeb0Sopenharmony_ci    #include <EGL/egl.h>
14302f4aeb0Sopenharmony_ci    #include <X11/Xlib.h>
14402f4aeb0Sopenharmony_ci
14502f4aeb0Sopenharmony_ci    struct my_display {
14602f4aeb0Sopenharmony_ci        Display *x11;
14702f4aeb0Sopenharmony_ci        EGLDisplay egl;
14802f4aeb0Sopenharmony_ci    };
14902f4aeb0Sopenharmony_ci
15002f4aeb0Sopenharmony_ci    struct my_config {
15102f4aeb0Sopenharmony_ci        struct my_display dpy;
15202f4aeb0Sopenharmony_ci        XVisualInfo *x11;
15302f4aeb0Sopenharmony_ci        Colormap colormap;
15402f4aeb0Sopenharmony_ci        EGLConfig egl;
15502f4aeb0Sopenharmony_ci    };
15602f4aeb0Sopenharmony_ci
15702f4aeb0Sopenharmony_ci    struct my_window {
15802f4aeb0Sopenharmony_ci        struct my_config config;
15902f4aeb0Sopenharmony_ci        Window x11;
16002f4aeb0Sopenharmony_ci        EGLSurface egl;
16102f4aeb0Sopenharmony_ci    };
16202f4aeb0Sopenharmony_ci
16302f4aeb0Sopenharmony_ci    struct my_pixmap {
16402f4aeb0Sopenharmony_ci        struct my_config config;
16502f4aeb0Sopenharmony_ci        Pixmap x11;
16602f4aeb0Sopenharmony_ci        EGLSurface egl;
16702f4aeb0Sopenharmony_ci    };
16802f4aeb0Sopenharmony_ci
16902f4aeb0Sopenharmony_ci    static void
17002f4aeb0Sopenharmony_ci    check_extensions(void)
17102f4aeb0Sopenharmony_ci    {
17202f4aeb0Sopenharmony_ci    #ifdef USE_EGL_EXT_PLATFORM_X11
17302f4aeb0Sopenharmony_ci        const char *client_extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
17402f4aeb0Sopenharmony_ci
17502f4aeb0Sopenharmony_ci        if (!client_extensions) {
17602f4aeb0Sopenharmony_ci            // EGL_EXT_client_extensions is unsupported.
17702f4aeb0Sopenharmony_ci            abort();
17802f4aeb0Sopenharmony_ci        }
17902f4aeb0Sopenharmony_ci        if (!strstr(client_extensions, "EGL_EXT_platform_x11")) {
18002f4aeb0Sopenharmony_ci            abort();
18102f4aeb0Sopenharmony_ci        }
18202f4aeb0Sopenharmony_ci    #endif
18302f4aeb0Sopenharmony_ci    }
18402f4aeb0Sopenharmony_ci
18502f4aeb0Sopenharmony_ci    static struct my_display
18602f4aeb0Sopenharmony_ci    get_display(void)
18702f4aeb0Sopenharmony_ci    {
18802f4aeb0Sopenharmony_ci        struct my_display dpy;
18902f4aeb0Sopenharmony_ci
19002f4aeb0Sopenharmony_ci        dpy.x11 = XOpenDisplay(NULL);
19102f4aeb0Sopenharmony_ci        if (!dpy.x11) {
19202f4aeb0Sopenharmony_ci            abort();
19302f4aeb0Sopenharmony_ci        }
19402f4aeb0Sopenharmony_ci
19502f4aeb0Sopenharmony_ci    #ifdef USE_EGL_EXT_PLATFORM_X11
19602f4aeb0Sopenharmony_ci        dpy.egl = eglGetPlatformDisplayEXT(EGL_PLATFORM_X11_EXT, dpy.x11,
19702f4aeb0Sopenharmony_ci                                           NULL);
19802f4aeb0Sopenharmony_ci    #else
19902f4aeb0Sopenharmony_ci        dpy.egl = eglGetDisplay(dpy.x11);
20002f4aeb0Sopenharmony_ci    #endif
20102f4aeb0Sopenharmony_ci
20202f4aeb0Sopenharmony_ci        if (dpy.egl == EGL_NO_DISPLAY) {
20302f4aeb0Sopenharmony_ci            abort();
20402f4aeb0Sopenharmony_ci        }
20502f4aeb0Sopenharmony_ci
20602f4aeb0Sopenharmony_ci        EGLint major, minor;
20702f4aeb0Sopenharmony_ci        if (!eglInitialize(dpy.egl, &major, &minor)) {
20802f4aeb0Sopenharmony_ci            abort();
20902f4aeb0Sopenharmony_ci        }
21002f4aeb0Sopenharmony_ci
21102f4aeb0Sopenharmony_ci        return dpy;
21202f4aeb0Sopenharmony_ci    }
21302f4aeb0Sopenharmony_ci
21402f4aeb0Sopenharmony_ci    static struct my_config
21502f4aeb0Sopenharmony_ci    get_config(struct my_display dpy)
21602f4aeb0Sopenharmony_ci    {
21702f4aeb0Sopenharmony_ci        struct my_config config = {
21802f4aeb0Sopenharmony_ci            .dpy = dpy,
21902f4aeb0Sopenharmony_ci        };
22002f4aeb0Sopenharmony_ci
22102f4aeb0Sopenharmony_ci        EGLint egl_config_attribs[] = {
22202f4aeb0Sopenharmony_ci            EGL_BUFFER_SIZE,        32,
22302f4aeb0Sopenharmony_ci            EGL_RED_SIZE,            8,
22402f4aeb0Sopenharmony_ci            EGL_GREEN_SIZE,          8,
22502f4aeb0Sopenharmony_ci            EGL_BLUE_SIZE,           8,
22602f4aeb0Sopenharmony_ci            EGL_ALPHA_SIZE,          8,
22702f4aeb0Sopenharmony_ci
22802f4aeb0Sopenharmony_ci            EGL_DEPTH_SIZE,         EGL_DONT_CARE,
22902f4aeb0Sopenharmony_ci            EGL_STENCIL_SIZE,       EGL_DONT_CARE,
23002f4aeb0Sopenharmony_ci
23102f4aeb0Sopenharmony_ci            EGL_RENDERABLE_TYPE,    EGL_OPENGL_ES2_BIT,
23202f4aeb0Sopenharmony_ci            EGL_SURFACE_TYPE,       EGL_WINDOW_BIT | EGL_PIXMAP_BIT,
23302f4aeb0Sopenharmony_ci            EGL_NONE,
23402f4aeb0Sopenharmony_ci        };
23502f4aeb0Sopenharmony_ci
23602f4aeb0Sopenharmony_ci        EGLint num_configs;
23702f4aeb0Sopenharmony_ci        if (!eglChooseConfig(dpy.egl,
23802f4aeb0Sopenharmony_ci                             egl_config_attribs,
23902f4aeb0Sopenharmony_ci                             &config.egl, 1,
24002f4aeb0Sopenharmony_ci                             &num_configs)) {
24102f4aeb0Sopenharmony_ci            abort();
24202f4aeb0Sopenharmony_ci        }
24302f4aeb0Sopenharmony_ci        if (num_configs == 0) {
24402f4aeb0Sopenharmony_ci            abort();
24502f4aeb0Sopenharmony_ci        }
24602f4aeb0Sopenharmony_ci
24702f4aeb0Sopenharmony_ci        XVisualInfo x11_visual_info_template;
24802f4aeb0Sopenharmony_ci        if (!eglGetConfigAttrib(dpy.egl,
24902f4aeb0Sopenharmony_ci                                config.egl,
25002f4aeb0Sopenharmony_ci                                EGL_NATIVE_VISUAL_ID,
25102f4aeb0Sopenharmony_ci                                (EGLint*) &x11_visual_info_template.visualid)) {
25202f4aeb0Sopenharmony_ci            abort();
25302f4aeb0Sopenharmony_ci        }
25402f4aeb0Sopenharmony_ci
25502f4aeb0Sopenharmony_ci        int num_visuals;
25602f4aeb0Sopenharmony_ci        config.x11 = XGetVisualInfo(dpy.x11,
25702f4aeb0Sopenharmony_ci                                    VisualIDMask,
25802f4aeb0Sopenharmony_ci                                    &x11_visual_info_template,
25902f4aeb0Sopenharmony_ci                                    &num_visuals);
26002f4aeb0Sopenharmony_ci        if (!config.x11) {
26102f4aeb0Sopenharmony_ci            abort();
26202f4aeb0Sopenharmony_ci        }
26302f4aeb0Sopenharmony_ci
26402f4aeb0Sopenharmony_ci        config.colormap = XCreateColormap(dpy.x11,
26502f4aeb0Sopenharmony_ci                                          RootWindow(dpy.x11, 0),
26602f4aeb0Sopenharmony_ci                                          config.x11->visual,
26702f4aeb0Sopenharmony_ci                                          AllocNone);
26802f4aeb0Sopenharmony_ci        if (config.colormap == None) {
26902f4aeb0Sopenharmony_ci            abort();
27002f4aeb0Sopenharmony_ci        }
27102f4aeb0Sopenharmony_ci
27202f4aeb0Sopenharmony_ci        return config;
27302f4aeb0Sopenharmony_ci    }
27402f4aeb0Sopenharmony_ci
27502f4aeb0Sopenharmony_ci    static struct my_window
27602f4aeb0Sopenharmony_ci    get_window(struct my_config config)
27702f4aeb0Sopenharmony_ci    {
27802f4aeb0Sopenharmony_ci        XSetWindowAttributes attr;
27902f4aeb0Sopenharmony_ci        unsigned long mask;
28002f4aeb0Sopenharmony_ci
28102f4aeb0Sopenharmony_ci        struct my_window window = {
28202f4aeb0Sopenharmony_ci            .config = config,
28302f4aeb0Sopenharmony_ci        };
28402f4aeb0Sopenharmony_ci
28502f4aeb0Sopenharmony_ci        attr.colormap = config.colormap;
28602f4aeb0Sopenharmony_ci        mask = CWColormap;
28702f4aeb0Sopenharmony_ci
28802f4aeb0Sopenharmony_ci        window.x11 = XCreateWindow(config.dpy.x11,
28902f4aeb0Sopenharmony_ci                                   DefaultRootWindow(config.dpy.x11), // parent
29002f4aeb0Sopenharmony_ci                                   0, 0, // x, y
29102f4aeb0Sopenharmony_ci                                   256, 256, // width, height
29202f4aeb0Sopenharmony_ci                                   0, // border_width
29302f4aeb0Sopenharmony_ci                                   config.x11->depth,
29402f4aeb0Sopenharmony_ci                                   InputOutput, // class
29502f4aeb0Sopenharmony_ci                                   config.x11->visual,
29602f4aeb0Sopenharmony_ci                                   mask, // valuemask
29702f4aeb0Sopenharmony_ci                                   &attr); // attributes
29802f4aeb0Sopenharmony_ci        if (!window.x11) {
29902f4aeb0Sopenharmony_ci            abort();
30002f4aeb0Sopenharmony_ci        }
30102f4aeb0Sopenharmony_ci
30202f4aeb0Sopenharmony_ci    #ifdef USE_EGL_EXT_PLATFORM_X11
30302f4aeb0Sopenharmony_ci        window.egl = eglCreatePlatformWindowSurfaceEXT(config.dpy.egl,
30402f4aeb0Sopenharmony_ci                                                       config.egl,
30502f4aeb0Sopenharmony_ci                                                       &window.x11,
30602f4aeb0Sopenharmony_ci                                                       NULL);
30702f4aeb0Sopenharmony_ci    #else
30802f4aeb0Sopenharmony_ci        window.egl = eglCreateWindowSurface(config.dpy.egl,
30902f4aeb0Sopenharmony_ci                                            config.egl,
31002f4aeb0Sopenharmony_ci                                            window.x11,
31102f4aeb0Sopenharmony_ci                                            NULL);
31202f4aeb0Sopenharmony_ci    #endif
31302f4aeb0Sopenharmony_ci
31402f4aeb0Sopenharmony_ci        if (window.egl == EGL_NO_SURFACE) {
31502f4aeb0Sopenharmony_ci            abort();
31602f4aeb0Sopenharmony_ci        }
31702f4aeb0Sopenharmony_ci
31802f4aeb0Sopenharmony_ci        return window;
31902f4aeb0Sopenharmony_ci    }
32002f4aeb0Sopenharmony_ci
32102f4aeb0Sopenharmony_ci    static struct my_pixmap
32202f4aeb0Sopenharmony_ci    get_pixmap(struct my_config config)
32302f4aeb0Sopenharmony_ci    {
32402f4aeb0Sopenharmony_ci        struct my_pixmap pixmap = {
32502f4aeb0Sopenharmony_ci            .config = config,
32602f4aeb0Sopenharmony_ci        };
32702f4aeb0Sopenharmony_ci
32802f4aeb0Sopenharmony_ci        pixmap.x11 = XCreatePixmap(config.dpy.x11,
32902f4aeb0Sopenharmony_ci                                   DefaultRootWindow(config.dpy.x11),
33002f4aeb0Sopenharmony_ci                                   256, 256, // width, height
33102f4aeb0Sopenharmony_ci                                   config.x11->depth);
33202f4aeb0Sopenharmony_ci        if (!pixmap.x11) {
33302f4aeb0Sopenharmony_ci            abort();
33402f4aeb0Sopenharmony_ci        }
33502f4aeb0Sopenharmony_ci
33602f4aeb0Sopenharmony_ci    #ifdef USE_EGL_EXT_PLATFORM_X11
33702f4aeb0Sopenharmony_ci        pixmap.egl = eglCreatePlatformPixmapSurfaceEXT(config.dpy.egl,
33802f4aeb0Sopenharmony_ci                                                       config.egl,
33902f4aeb0Sopenharmony_ci                                                       &pixmap.x11,
34002f4aeb0Sopenharmony_ci                                                       NULL);
34102f4aeb0Sopenharmony_ci    #else
34202f4aeb0Sopenharmony_ci        pixmap.egl = eglCreatePixmapSurface(config.dpy.egl,
34302f4aeb0Sopenharmony_ci                                            config.egl,
34402f4aeb0Sopenharmony_ci                                            pixmap.x11,
34502f4aeb0Sopenharmony_ci                                            NULL);
34602f4aeb0Sopenharmony_ci    #endif
34702f4aeb0Sopenharmony_ci
34802f4aeb0Sopenharmony_ci        if (pixmap.egl == EGL_NO_SURFACE) {
34902f4aeb0Sopenharmony_ci            abort();
35002f4aeb0Sopenharmony_ci        }
35102f4aeb0Sopenharmony_ci
35202f4aeb0Sopenharmony_ci        return pixmap;
35302f4aeb0Sopenharmony_ci    }
35402f4aeb0Sopenharmony_ci
35502f4aeb0Sopenharmony_ci    int
35602f4aeb0Sopenharmony_ci    main(void)
35702f4aeb0Sopenharmony_ci    {
35802f4aeb0Sopenharmony_ci        check_extensions();
35902f4aeb0Sopenharmony_ci
36002f4aeb0Sopenharmony_ci        struct my_display dpy = get_display();
36102f4aeb0Sopenharmony_ci        struct my_config config = get_config(dpy);
36202f4aeb0Sopenharmony_ci        struct my_window window = get_window(config);
36302f4aeb0Sopenharmony_ci        struct my_pixmap pixmap = get_pixmap(config);
36402f4aeb0Sopenharmony_ci
36502f4aeb0Sopenharmony_ci        return 0;
36602f4aeb0Sopenharmony_ci    }
36702f4aeb0Sopenharmony_ci
36802f4aeb0Sopenharmony_ciRevision History
36902f4aeb0Sopenharmony_ci
37002f4aeb0Sopenharmony_ci    Version 13, 2014-03-10 (Chad Versace)
37102f4aeb0Sopenharmony_ci        - Update text to reflect resolution of issue #1. State that
37202f4aeb0Sopenharmony_ci          <native_display> may be EGL_DEFAULT_DISPLAY.
37302f4aeb0Sopenharmony_ci        - Explain in more detail how EGL connects to the default X11 display.
37402f4aeb0Sopenharmony_ci        - Add and resolve issue #2.
37502f4aeb0Sopenharmony_ci
37602f4aeb0Sopenharmony_ci    Version 12, 2014-02-11 (Chad Versace)
37702f4aeb0Sopenharmony_ci        - Fix 2nd argument to XCreatePixmap in example code.
37802f4aeb0Sopenharmony_ci
37902f4aeb0Sopenharmony_ci    Version 11, 2013-07-10 (Jon Leech)
38002f4aeb0Sopenharmony_ci        - Fix enumerant values and assign extension number for publication
38102f4aeb0Sopenharmony_ci          (Bug 10240).
38202f4aeb0Sopenharmony_ci
38302f4aeb0Sopenharmony_ci    Version 10, 2013-07-03 (Chad Versace)
38402f4aeb0Sopenharmony_ci        - Add "Extension Type" section, required by EGL_EXT_client_extensions v9.
38502f4aeb0Sopenharmony_ci
38602f4aeb0Sopenharmony_ci    Version 9, 2013-06-11 (Chad Versace)
38702f4aeb0Sopenharmony_ci        - Replace reference to version 5 of EGL_EXT_platform_base to version 7.
38802f4aeb0Sopenharmony_ci        - Add James Jones as contributor.
38902f4aeb0Sopenharmony_ci
39002f4aeb0Sopenharmony_ci    Version 8, 2013-06-07 (Chad Versace)
39102f4aeb0Sopenharmony_ci        - Assign enum values to new tokens.
39202f4aeb0Sopenharmony_ci
39302f4aeb0Sopenharmony_ci    Version 7, 2013-06-07 (Chad Versace)
39402f4aeb0Sopenharmony_ci        - Explicitly require EGL_EXT_client_extensions in the Dependencies
39502f4aeb0Sopenharmony_ci          section.
39602f4aeb0Sopenharmony_ci
39702f4aeb0Sopenharmony_ci    Version 6, 2013-06-07 (Chad Versace)
39802f4aeb0Sopenharmony_ci        - Add attribute EGL_PLATFORM_X11_SCREEN_EXT.
39902f4aeb0Sopenharmony_ci
40002f4aeb0Sopenharmony_ci    Version 5, 2013-06-07 (Chad Versace)
40102f4aeb0Sopenharmony_ci        - Rephrase against version 7 of EGL_EXT_platform_base.
40202f4aeb0Sopenharmony_ci
40302f4aeb0Sopenharmony_ci    Version 4, 2013-06-07 (Chad Versace)
40402f4aeb0Sopenharmony_ci        - Fix compilation of example code.
40502f4aeb0Sopenharmony_ci
40602f4aeb0Sopenharmony_ci    Version 3, 2013-04-26 (Chad Versace)
40702f4aeb0Sopenharmony_ci        - Add missing EXT suffix to new token.
40802f4aeb0Sopenharmony_ci
40902f4aeb0Sopenharmony_ci    Version 2, 2013-04-22 (Chad Versace)
41002f4aeb0Sopenharmony_ci        - Discuss EGL_DEFAULT_DISPLAY.
41102f4aeb0Sopenharmony_ci        - Fix minor typographical and grammatical errors.
41202f4aeb0Sopenharmony_ci
41302f4aeb0Sopenharmony_ci    Version 1, 2013.03.24 (Chad Versace)
41402f4aeb0Sopenharmony_ci        - First draft
415