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