102f4aeb0Sopenharmony_ciName 202f4aeb0Sopenharmony_ci 302f4aeb0Sopenharmony_ci KHR_platform_x11 402f4aeb0Sopenharmony_ci 502f4aeb0Sopenharmony_ciName Strings 602f4aeb0Sopenharmony_ci 702f4aeb0Sopenharmony_ci EGL_KHR_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 Jon Leech (oddhack 'at' sonic.net) 1402f4aeb0Sopenharmony_ci 1502f4aeb0Sopenharmony_ciContacts 1602f4aeb0Sopenharmony_ci 1702f4aeb0Sopenharmony_ci Chad Versace <chad.versace@intel.com> 1802f4aeb0Sopenharmony_ci 1902f4aeb0Sopenharmony_ciStatus 2002f4aeb0Sopenharmony_ci 2102f4aeb0Sopenharmony_ci Complete. 2202f4aeb0Sopenharmony_ci Approved by the EGL Working Group on January 31, 2014. 2302f4aeb0Sopenharmony_ci Ratified by the Khronos Board of Promoters on March 14, 2014. 2402f4aeb0Sopenharmony_ci 2502f4aeb0Sopenharmony_ciVersion 2602f4aeb0Sopenharmony_ci 2702f4aeb0Sopenharmony_ci Version 3, 2014/02/18 2802f4aeb0Sopenharmony_ci 2902f4aeb0Sopenharmony_ciNumber 3002f4aeb0Sopenharmony_ci 3102f4aeb0Sopenharmony_ci EGL Extension #71 3202f4aeb0Sopenharmony_ci 3302f4aeb0Sopenharmony_ciExtension Type 3402f4aeb0Sopenharmony_ci 3502f4aeb0Sopenharmony_ci EGL client extension 3602f4aeb0Sopenharmony_ci 3702f4aeb0Sopenharmony_ciDependencies 3802f4aeb0Sopenharmony_ci 3902f4aeb0Sopenharmony_ci EGL 1.5 is required. 4002f4aeb0Sopenharmony_ci 4102f4aeb0Sopenharmony_ci This extension is written against the EGL 1.5 Specification (draft 4202f4aeb0Sopenharmony_ci 20140122). 4302f4aeb0Sopenharmony_ci 4402f4aeb0Sopenharmony_ciOverview 4502f4aeb0Sopenharmony_ci 4602f4aeb0Sopenharmony_ci This extension defines how to create EGL resources from native X11 4702f4aeb0Sopenharmony_ci resources using the EGL 1.5 platform functionality. 4802f4aeb0Sopenharmony_ci 4902f4aeb0Sopenharmony_ci This extension only defines 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 eglGetPlatformDisplay: 6402f4aeb0Sopenharmony_ci 6502f4aeb0Sopenharmony_ci EGL_PLATFORM_X11_KHR 0x31D5 6602f4aeb0Sopenharmony_ci 6702f4aeb0Sopenharmony_ci Accepted as an attribute name in the <attrib_list> argument of 6802f4aeb0Sopenharmony_ci eglGetPlatformDisplay: 6902f4aeb0Sopenharmony_ci 7002f4aeb0Sopenharmony_ci EGL_PLATFORM_X11_SCREEN_KHR 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 eglGetPlatformDisplay 8802f4aeb0Sopenharmony_ci with <platform> set to EGL_PLATFORM_X11_KHR. The <native_display> parameter 8902f4aeb0Sopenharmony_ci specifies the X11 display connection to use, and must either point to 9002f4aeb0Sopenharmony_ci a valid X11 `Display` or be EGL_DEFAULT_DISPLAY. 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_KHR 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 eglCreatePlatformWindowSurface 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 eglCreatePlatformPixmapSurface 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 eglGetPlatformDisplay()? 11602f4aeb0Sopenharmony_ci 11702f4aeb0Sopenharmony_ci RESOLVED. Yes. When given EGL_DEFAULT_DISPLAY, eglGetPlatformDisplay 11802f4aeb0Sopenharmony_ci returns an EGLDisplay backed by the default X11 display. 11902f4aeb0Sopenharmony_ci 12002f4aeb0Sopenharmony_ci 2. When given EGL_DEFAULT_DISPLAY, does eglGetPlatformDisplay reuse an 12102f4aeb0Sopenharmony_ci existing X11 display connection or create a new one? 12202f4aeb0Sopenharmony_ci 12302f4aeb0Sopenharmony_ci RESOLVED. eglGetPlatformDisplay 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_ciExample Code 12802f4aeb0Sopenharmony_ci 12902f4aeb0Sopenharmony_ci // This example program creates two EGL surfaces: one from an X11 Window 13002f4aeb0Sopenharmony_ci // and the other from an X11 Pixmap. 13102f4aeb0Sopenharmony_ci // 13202f4aeb0Sopenharmony_ci // If the macro USE_EGL_KHR_PLATFORM_X11 is defined, then the program 13302f4aeb0Sopenharmony_ci // creates the surfaces using the methods defined in this specification. 13402f4aeb0Sopenharmony_ci // Otherwise, it uses the methods defined by the EGL 1.4 specification. 13502f4aeb0Sopenharmony_ci // 13602f4aeb0Sopenharmony_ci // Compile with `cc -std=c99 example.c -lX11 -lEGL`. 13702f4aeb0Sopenharmony_ci 13802f4aeb0Sopenharmony_ci #include <stdlib.h> 13902f4aeb0Sopenharmony_ci #include <string.h> 14002f4aeb0Sopenharmony_ci 14102f4aeb0Sopenharmony_ci #include <EGL/egl.h> 14202f4aeb0Sopenharmony_ci #include <X11/Xlib.h> 14302f4aeb0Sopenharmony_ci 14402f4aeb0Sopenharmony_ci struct my_display { 14502f4aeb0Sopenharmony_ci Display *x11; 14602f4aeb0Sopenharmony_ci EGLDisplay egl; 14702f4aeb0Sopenharmony_ci }; 14802f4aeb0Sopenharmony_ci 14902f4aeb0Sopenharmony_ci struct my_config { 15002f4aeb0Sopenharmony_ci struct my_display dpy; 15102f4aeb0Sopenharmony_ci XVisualInfo *x11; 15202f4aeb0Sopenharmony_ci Colormap colormap; 15302f4aeb0Sopenharmony_ci EGLConfig egl; 15402f4aeb0Sopenharmony_ci }; 15502f4aeb0Sopenharmony_ci 15602f4aeb0Sopenharmony_ci struct my_window { 15702f4aeb0Sopenharmony_ci struct my_config config; 15802f4aeb0Sopenharmony_ci Window x11; 15902f4aeb0Sopenharmony_ci EGLSurface egl; 16002f4aeb0Sopenharmony_ci }; 16102f4aeb0Sopenharmony_ci 16202f4aeb0Sopenharmony_ci struct my_pixmap { 16302f4aeb0Sopenharmony_ci struct my_config config; 16402f4aeb0Sopenharmony_ci Pixmap x11; 16502f4aeb0Sopenharmony_ci EGLSurface egl; 16602f4aeb0Sopenharmony_ci }; 16702f4aeb0Sopenharmony_ci 16802f4aeb0Sopenharmony_ci static void 16902f4aeb0Sopenharmony_ci check_extensions(void) 17002f4aeb0Sopenharmony_ci { 17102f4aeb0Sopenharmony_ci #ifdef USE_EGL_KHR_PLATFORM_X11 17202f4aeb0Sopenharmony_ci const char *client_extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); 17302f4aeb0Sopenharmony_ci 17402f4aeb0Sopenharmony_ci if (!client_extensions) { 17502f4aeb0Sopenharmony_ci // No client extensions string available 17602f4aeb0Sopenharmony_ci abort(); 17702f4aeb0Sopenharmony_ci } 17802f4aeb0Sopenharmony_ci if (!strstr(client_extensions, "EGL_KHR_platform_x11")) { 17902f4aeb0Sopenharmony_ci abort(); 18002f4aeb0Sopenharmony_ci } 18102f4aeb0Sopenharmony_ci #endif 18202f4aeb0Sopenharmony_ci } 18302f4aeb0Sopenharmony_ci 18402f4aeb0Sopenharmony_ci static struct my_display 18502f4aeb0Sopenharmony_ci get_display(void) 18602f4aeb0Sopenharmony_ci { 18702f4aeb0Sopenharmony_ci struct my_display dpy; 18802f4aeb0Sopenharmony_ci 18902f4aeb0Sopenharmony_ci dpy.x11 = XOpenDisplay(NULL); 19002f4aeb0Sopenharmony_ci if (!dpy.x11) { 19102f4aeb0Sopenharmony_ci abort(); 19202f4aeb0Sopenharmony_ci } 19302f4aeb0Sopenharmony_ci 19402f4aeb0Sopenharmony_ci #ifdef USE_EGL_KHR_PLATFORM_X11 19502f4aeb0Sopenharmony_ci dpy.egl = eglGetPlatformDisplay(EGL_PLATFORM_X11_KHR, dpy.x11, NULL); 19602f4aeb0Sopenharmony_ci #else 19702f4aeb0Sopenharmony_ci dpy.egl = eglGetDisplay(dpy.x11); 19802f4aeb0Sopenharmony_ci #endif 19902f4aeb0Sopenharmony_ci 20002f4aeb0Sopenharmony_ci if (dpy.egl == EGL_NO_DISPLAY) { 20102f4aeb0Sopenharmony_ci abort(); 20202f4aeb0Sopenharmony_ci } 20302f4aeb0Sopenharmony_ci 20402f4aeb0Sopenharmony_ci EGLint major, minor; 20502f4aeb0Sopenharmony_ci if (!eglInitialize(dpy.egl, &major, &minor)) { 20602f4aeb0Sopenharmony_ci abort(); 20702f4aeb0Sopenharmony_ci } 20802f4aeb0Sopenharmony_ci 20902f4aeb0Sopenharmony_ci return dpy; 21002f4aeb0Sopenharmony_ci } 21102f4aeb0Sopenharmony_ci 21202f4aeb0Sopenharmony_ci static struct my_config 21302f4aeb0Sopenharmony_ci get_config(struct my_display dpy) 21402f4aeb0Sopenharmony_ci { 21502f4aeb0Sopenharmony_ci struct my_config config = { 21602f4aeb0Sopenharmony_ci .dpy = dpy, 21702f4aeb0Sopenharmony_ci }; 21802f4aeb0Sopenharmony_ci 21902f4aeb0Sopenharmony_ci EGLint egl_config_attribs[] = { 22002f4aeb0Sopenharmony_ci EGL_BUFFER_SIZE, 32, 22102f4aeb0Sopenharmony_ci EGL_RED_SIZE, 8, 22202f4aeb0Sopenharmony_ci EGL_GREEN_SIZE, 8, 22302f4aeb0Sopenharmony_ci EGL_BLUE_SIZE, 8, 22402f4aeb0Sopenharmony_ci EGL_ALPHA_SIZE, 8, 22502f4aeb0Sopenharmony_ci 22602f4aeb0Sopenharmony_ci EGL_DEPTH_SIZE, EGL_DONT_CARE, 22702f4aeb0Sopenharmony_ci EGL_STENCIL_SIZE, EGL_DONT_CARE, 22802f4aeb0Sopenharmony_ci 22902f4aeb0Sopenharmony_ci EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, 23002f4aeb0Sopenharmony_ci EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PIXMAP_BIT, 23102f4aeb0Sopenharmony_ci EGL_NONE, 23202f4aeb0Sopenharmony_ci }; 23302f4aeb0Sopenharmony_ci 23402f4aeb0Sopenharmony_ci EGLint num_configs; 23502f4aeb0Sopenharmony_ci if (!eglChooseConfig(dpy.egl, 23602f4aeb0Sopenharmony_ci egl_config_attribs, 23702f4aeb0Sopenharmony_ci &config.egl, 1, 23802f4aeb0Sopenharmony_ci &num_configs)) { 23902f4aeb0Sopenharmony_ci abort(); 24002f4aeb0Sopenharmony_ci } 24102f4aeb0Sopenharmony_ci if (num_configs == 0) { 24202f4aeb0Sopenharmony_ci abort(); 24302f4aeb0Sopenharmony_ci } 24402f4aeb0Sopenharmony_ci 24502f4aeb0Sopenharmony_ci XVisualInfo x11_visual_info_template; 24602f4aeb0Sopenharmony_ci if (!eglGetConfigAttrib(dpy.egl, 24702f4aeb0Sopenharmony_ci config.egl, 24802f4aeb0Sopenharmony_ci EGL_NATIVE_VISUAL_ID, 24902f4aeb0Sopenharmony_ci (EGLint*) &x11_visual_info_template.visualid)) { 25002f4aeb0Sopenharmony_ci abort(); 25102f4aeb0Sopenharmony_ci } 25202f4aeb0Sopenharmony_ci 25302f4aeb0Sopenharmony_ci int num_visuals; 25402f4aeb0Sopenharmony_ci config.x11 = XGetVisualInfo(dpy.x11, 25502f4aeb0Sopenharmony_ci VisualIDMask, 25602f4aeb0Sopenharmony_ci &x11_visual_info_template, 25702f4aeb0Sopenharmony_ci &num_visuals); 25802f4aeb0Sopenharmony_ci if (!config.x11) { 25902f4aeb0Sopenharmony_ci abort(); 26002f4aeb0Sopenharmony_ci } 26102f4aeb0Sopenharmony_ci 26202f4aeb0Sopenharmony_ci config.colormap = XCreateColormap(dpy.x11, 26302f4aeb0Sopenharmony_ci RootWindow(dpy.x11, 0), 26402f4aeb0Sopenharmony_ci config.x11->visual, 26502f4aeb0Sopenharmony_ci AllocNone); 26602f4aeb0Sopenharmony_ci if (config.colormap == None) { 26702f4aeb0Sopenharmony_ci abort(); 26802f4aeb0Sopenharmony_ci } 26902f4aeb0Sopenharmony_ci 27002f4aeb0Sopenharmony_ci return config; 27102f4aeb0Sopenharmony_ci } 27202f4aeb0Sopenharmony_ci 27302f4aeb0Sopenharmony_ci static struct my_window 27402f4aeb0Sopenharmony_ci get_window(struct my_config config) 27502f4aeb0Sopenharmony_ci { 27602f4aeb0Sopenharmony_ci XSetWindowAttributes attr; 27702f4aeb0Sopenharmony_ci unsigned long mask; 27802f4aeb0Sopenharmony_ci 27902f4aeb0Sopenharmony_ci struct my_window window = { 28002f4aeb0Sopenharmony_ci .config = config, 28102f4aeb0Sopenharmony_ci }; 28202f4aeb0Sopenharmony_ci 28302f4aeb0Sopenharmony_ci attr.colormap = config.colormap; 28402f4aeb0Sopenharmony_ci mask = CWColormap; 28502f4aeb0Sopenharmony_ci 28602f4aeb0Sopenharmony_ci window.x11 = XCreateWindow(config.dpy.x11, 28702f4aeb0Sopenharmony_ci DefaultRootWindow(config.dpy.x11), // parent 28802f4aeb0Sopenharmony_ci 0, 0, // x, y 28902f4aeb0Sopenharmony_ci 256, 256, // width, height 29002f4aeb0Sopenharmony_ci 0, // border_width 29102f4aeb0Sopenharmony_ci config.x11->depth, 29202f4aeb0Sopenharmony_ci InputOutput, // class 29302f4aeb0Sopenharmony_ci config.x11->visual, 29402f4aeb0Sopenharmony_ci mask, // valuemask 29502f4aeb0Sopenharmony_ci &attr); // attributes 29602f4aeb0Sopenharmony_ci if (!window.x11) { 29702f4aeb0Sopenharmony_ci abort(); 29802f4aeb0Sopenharmony_ci } 29902f4aeb0Sopenharmony_ci 30002f4aeb0Sopenharmony_ci #ifdef USE_EGL_KHR_PLATFORM_X11 30102f4aeb0Sopenharmony_ci window.egl = eglCreatePlatformWindowSurface(config.dpy.egl, 30202f4aeb0Sopenharmony_ci config.egl, 30302f4aeb0Sopenharmony_ci &window.x11, 30402f4aeb0Sopenharmony_ci NULL); 30502f4aeb0Sopenharmony_ci #else 30602f4aeb0Sopenharmony_ci window.egl = eglCreateWindowSurface(config.dpy.egl, 30702f4aeb0Sopenharmony_ci config.egl, 30802f4aeb0Sopenharmony_ci window.x11, 30902f4aeb0Sopenharmony_ci NULL); 31002f4aeb0Sopenharmony_ci #endif 31102f4aeb0Sopenharmony_ci 31202f4aeb0Sopenharmony_ci if (window.egl == EGL_NO_SURFACE) { 31302f4aeb0Sopenharmony_ci abort(); 31402f4aeb0Sopenharmony_ci } 31502f4aeb0Sopenharmony_ci 31602f4aeb0Sopenharmony_ci return window; 31702f4aeb0Sopenharmony_ci } 31802f4aeb0Sopenharmony_ci 31902f4aeb0Sopenharmony_ci static struct my_pixmap 32002f4aeb0Sopenharmony_ci get_pixmap(struct my_config config) 32102f4aeb0Sopenharmony_ci { 32202f4aeb0Sopenharmony_ci struct my_pixmap pixmap = { 32302f4aeb0Sopenharmony_ci .config = config, 32402f4aeb0Sopenharmony_ci }; 32502f4aeb0Sopenharmony_ci 32602f4aeb0Sopenharmony_ci pixmap.x11 = XCreatePixmap(config.dpy.x11, 32702f4aeb0Sopenharmony_ci DefaultRootWindow(config.dpy.x11), 32802f4aeb0Sopenharmony_ci 256, 256, // width, height 32902f4aeb0Sopenharmony_ci config.x11->depth); 33002f4aeb0Sopenharmony_ci if (!pixmap.x11) { 33102f4aeb0Sopenharmony_ci abort(); 33202f4aeb0Sopenharmony_ci } 33302f4aeb0Sopenharmony_ci 33402f4aeb0Sopenharmony_ci #ifdef USE_EGL_KHR_PLATFORM_X11 33502f4aeb0Sopenharmony_ci pixmap.egl = eglCreatePlatformPixmapSurface(config.dpy.egl, 33602f4aeb0Sopenharmony_ci config.egl, 33702f4aeb0Sopenharmony_ci &pixmap.x11, 33802f4aeb0Sopenharmony_ci NULL); 33902f4aeb0Sopenharmony_ci #else 34002f4aeb0Sopenharmony_ci pixmap.egl = eglCreatePixmapSurface(config.dpy.egl, 34102f4aeb0Sopenharmony_ci config.egl, 34202f4aeb0Sopenharmony_ci pixmap.x11, 34302f4aeb0Sopenharmony_ci NULL); 34402f4aeb0Sopenharmony_ci #endif 34502f4aeb0Sopenharmony_ci 34602f4aeb0Sopenharmony_ci if (pixmap.egl == EGL_NO_SURFACE) { 34702f4aeb0Sopenharmony_ci abort(); 34802f4aeb0Sopenharmony_ci } 34902f4aeb0Sopenharmony_ci 35002f4aeb0Sopenharmony_ci return pixmap; 35102f4aeb0Sopenharmony_ci } 35202f4aeb0Sopenharmony_ci 35302f4aeb0Sopenharmony_ci int 35402f4aeb0Sopenharmony_ci main(void) 35502f4aeb0Sopenharmony_ci { 35602f4aeb0Sopenharmony_ci check_extensions(); 35702f4aeb0Sopenharmony_ci 35802f4aeb0Sopenharmony_ci struct my_display dpy = get_display(); 35902f4aeb0Sopenharmony_ci struct my_config config = get_config(dpy); 36002f4aeb0Sopenharmony_ci struct my_window window = get_window(config); 36102f4aeb0Sopenharmony_ci struct my_pixmap pixmap = get_pixmap(config); 36202f4aeb0Sopenharmony_ci 36302f4aeb0Sopenharmony_ci return 0; 36402f4aeb0Sopenharmony_ci } 36502f4aeb0Sopenharmony_ci 36602f4aeb0Sopenharmony_ciRevision History 36702f4aeb0Sopenharmony_ci 36802f4aeb0Sopenharmony_ci Version 3, 2014/02/18 (Chad Versace) 36902f4aeb0Sopenharmony_ci - Update text to reflect resolution of issue #1. State that 37002f4aeb0Sopenharmony_ci <native_display> may be EGL_DEFAULT_DISPLAY. 37102f4aeb0Sopenharmony_ci - Explain in more detail how EGL connects to the default X11 display. 37202f4aeb0Sopenharmony_ci - Add and resolve issue #2. 37302f4aeb0Sopenharmony_ci 37402f4aeb0Sopenharmony_ci Version 2, 2014/02/11 (Chad Versace) 37502f4aeb0Sopenharmony_ci - Fix 2nd argument to XCreatePixmap in example code. 37602f4aeb0Sopenharmony_ci 37702f4aeb0Sopenharmony_ci Version 1, 2014/01/22 (Jon Leech) 37802f4aeb0Sopenharmony_ci - Promote EGL_EXT_platform_x11 to KHR to go with EGL 1.5. 379