[PATCH weston 4/4] clients & tests: use eglCreatePlatformWindowSurfaceEXT when supported
Derek Foreman
derekf at osg.samsung.com
Mon Feb 23 10:20:31 PST 2015
I think there are a few place in here where compilation breaks without
EGL_EXT_platform_base. the if (create_platform_window) statements...
On 17/02/15 09:48 AM, Jonny Lamb wrote:
> ---
> clients/nested-client.c | 18 ++++++++++++++----
> clients/simple-egl.c | 18 ++++++++++++++----
> clients/subsurfaces.c | 18 +++++++++++++++---
> clients/window.c | 17 +++++++++++++----
> tests/buffer-count-test.c | 21 ++++++++++++++++-----
> 5 files changed, 72 insertions(+), 20 deletions(-)
>
> diff --git a/clients/nested-client.c b/clients/nested-client.c
> index fbf5350..46decd8 100644
> --- a/clients/nested-client.c
> +++ b/clients/nested-client.c
> @@ -241,6 +241,7 @@ static const struct wl_registry_listener registry_listener = {
>
> #ifdef EGL_EXT_platform_base
> static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
> +static PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window = NULL;
> #endif
>
> static struct nested_client *
> @@ -292,6 +293,8 @@ nested_client_create(void)
> if (strstr(extensions, "EGL_EXT_platform_wayland")) {
> get_platform_display =
> (void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
> + create_platform_window =
> + (void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
> } else {
> fprintf(stderr, "error: no wayland egl support\n");
> return NULL;
> @@ -332,10 +335,17 @@ nested_client_create(void)
> client->native = wl_egl_window_create(client->surface,
> client->width, client->height);
>
> - client->egl_surface =
> - eglCreateWindowSurface(client->egl_display,
> - client->egl_config,
> - client->native, NULL);
> + if (create_platform_window) {
> + client->egl_surface =
> + create_platform_window(client->egl_display,
> + client->egl_config,
> + client->native, NULL);
> + } else {
> + client->egl_surface =
> + eglCreateWindowSurface(client->egl_display,
> + client->egl_config,
> + client->native, NULL);
> + }
>
> eglMakeCurrent(client->egl_display, client->egl_surface,
> client->egl_surface, client->egl_context);
> diff --git a/clients/simple-egl.c b/clients/simple-egl.c
> index 1162eb4..7be61a8 100644
> --- a/clients/simple-egl.c
> +++ b/clients/simple-egl.c
> @@ -127,6 +127,7 @@ static int running = 1;
>
> #ifdef EGL_EXT_platform_base
> static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
> +static PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window = NULL;
> #endif
>
> static void
> @@ -161,6 +162,8 @@ init_egl(struct display *display, struct window *window)
> if (strstr(extensions, "EGL_EXT_platform_wayland")) {
> get_platform_display =
> (void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
> + create_platform_window =
> + (void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
> } else {
> fprintf(stderr, "error: no wayland egl support\n");
> exit(1);
> @@ -402,10 +405,17 @@ create_surface(struct window *window)
> wl_egl_window_create(window->surface,
> window->geometry.width,
> window->geometry.height);
> - window->egl_surface =
> - eglCreateWindowSurface(display->egl.dpy,
> - display->egl.conf,
> - window->native, NULL);
> + if (create_platform_window) {
> + window->egl_surface =
> + create_platform_window(display->egl.dpy,
> + display->egl.conf,
> + window->native, NULL);
> + } else {
> + window->egl_surface =
> + eglCreateWindowSurface(display->egl.dpy,
> + display->egl.conf,
> + window->native, NULL);
> + }
>
> if (display->shell) {
> create_xdg_surface(window, display);
> diff --git a/clients/subsurfaces.c b/clients/subsurfaces.c
> index d15d5a5..5081bc7 100644
> --- a/clients/subsurfaces.c
> +++ b/clients/subsurfaces.c
> @@ -192,6 +192,7 @@ egl_print_config_info(struct egl_state *egl)
>
> #ifdef EGL_EXT_platform_base
> static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
> +static PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window = NULL;
> #endif
>
> static struct egl_state *
> @@ -225,6 +226,8 @@ egl_state_create(struct wl_display *display)
> if (strstr(extensions, "EGL_EXT_platform_wayland")) {
> get_platform_display =
> (void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
> + create_platform_window =
> + (void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
> } else {
> fprintf(stderr, "error: no wayland egl support\n");
> exit(1);
> @@ -443,9 +446,18 @@ triangle_create_egl_surface(struct triangle *tri, int width, int height)
>
> tri->wl_surface = widget_get_wl_surface(tri->widget);
> tri->egl_window = wl_egl_window_create(tri->wl_surface, width, height);
> - tri->egl_surface = eglCreateWindowSurface(tri->egl->dpy,
> - tri->egl->conf,
> - tri->egl_window, NULL);
> +
> + if (create_platform_window) {
> + tri->egl_surface =
> + create_platform_window(tri->egl->dpy,
> + tri->egl->conf,
> + tri->egl_window, NULL);
> + } else {
> + tri->egl_surface =
> + eglCreateWindowSurface(tri->egl->dpy,
> + tri->egl->conf,
> + tri->egl_window, NULL);
> + }
>
> ret = eglMakeCurrent(tri->egl->dpy, tri->egl_surface,
> tri->egl_surface, tri->egl->ctx);
> diff --git a/clients/window.c b/clients/window.c
> index dc08f59..e572af6 100644
> --- a/clients/window.c
> +++ b/clients/window.c
> @@ -639,10 +639,17 @@ egl_window_surface_create(struct display *display,
> rectangle->width,
> rectangle->height);
>
> - surface->egl_surface = eglCreateWindowSurface(display->dpy,
> - display->argb_config,
> - surface->egl_window,
> - NULL);
> + if (create_platform_window) {
> + surface->egl_surface =
> + create_platform_window(display->dpy,
> + display->argb_config,
> + surface->egl_window, NULL);
> + } else {
> + surface->egl_surface =
> + eglCreateWindowSurface(display->dpy,
> + display->argb_config,
> + surface->egl_window, NULL);
> + }
>
> surface->cairo_surface =
> cairo_gl_surface_create_for_egl(display->argb_device,
> @@ -5395,6 +5402,8 @@ init_egl(struct display *d)
> if (strstr(extensions, "EGL_EXT_platform_wayland")) {
> get_platform_display =
> (void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
> + create_platform_window =
> + (void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
> } else {
> fprintf(stderr, "error: no wayland egl support\n");
> return -1;
> diff --git a/tests/buffer-count-test.c b/tests/buffer-count-test.c
> index 1912b62..e99dc70 100644
> --- a/tests/buffer-count-test.c
> +++ b/tests/buffer-count-test.c
> @@ -44,6 +44,7 @@ struct test_data {
>
> #ifdef EGL_EXT_platform_base
> static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
> +static PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window = NULL;
> #endif
>
> static int
> @@ -79,6 +80,8 @@ init_egl(struct test_data *test_data)
> if (strstr(extensions, "EGL_EXT_platform_wayland")) {
> get_platform_display =
> (void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
> + create_platform_window =
> + (void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
> } else {
> fprintf(stderr, "error: no wayland egl support\n");
> return -1;
> @@ -117,11 +120,19 @@ init_egl(struct test_data *test_data)
> wl_egl_window_create(surface->wl_surface,
> surface->width,
> surface->height);
> - test_data->egl_surface =
> - eglCreateWindowSurface(test_data->egl_dpy,
> - test_data->egl_conf,
> - (EGLNativeWindowType) native_window,
> - NULL);
> +
> + if (create_platform_window) {
> + test_data->egl_surface =
> + create_platform_window(test_data->egl_dpy,
> + test_data->egl_conf,
> + (void *) native_window, NULL);
> + } else {
> + test_data->egl_surface =
> + eglCreateWindowSurface(test_data->egl_dpy,
> + test_data->egl_conf,
> + (EGLNativeWindowType) native_window,
> + NULL);
> + }
>
> ret = eglMakeCurrent(test_data->egl_dpy, test_data->egl_surface,
> test_data->egl_surface, test_data->egl_ctx);
>
More information about the wayland-devel
mailing list