diff options
| author | Kristian Høgsberg <krh@bitplanet.net> | 2010-08-05 17:44:31 -0400 |
|---|---|---|
| committer | Kristian Høgsberg <krh@bitplanet.net> | 2010-08-05 17:44:31 -0400 |
| commit | c071f4d00802ec417828b80cdea046b703cd8915 (patch) | |
| tree | 39a0fa1d2ee9d45595e70da959a606194da80cb9 /compositor.c | |
| parent | Implement server side move override (diff) | |
| download | wayland-c071f4d00802ec417828b80cdea046b703cd8915.tar wayland-c071f4d00802ec417828b80cdea046b703cd8915.tar.gz wayland-c071f4d00802ec417828b80cdea046b703cd8915.tar.bz2 wayland-c071f4d00802ec417828b80cdea046b703cd8915.tar.lz wayland-c071f4d00802ec417828b80cdea046b703cd8915.tar.xz wayland-c071f4d00802ec417828b80cdea046b703cd8915.tar.zst wayland-c071f4d00802ec417828b80cdea046b703cd8915.zip | |
Handle failure to reference a buffer name better
Diffstat (limited to 'compositor.c')
| -rw-r--r-- | compositor.c | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/compositor.c b/compositor.c index da1a658..0ce2d09 100644 --- a/compositor.c +++ b/compositor.c @@ -442,6 +442,7 @@ surface_attach(struct wl_client *client, { struct wlsc_surface *es = (struct wlsc_surface *) surface; struct wlsc_compositor *ec = es->compositor; + EGLImageKHR image; EGLint attribs[] = { EGL_WIDTH, 0, EGL_HEIGHT, 0, @@ -450,14 +451,36 @@ surface_attach(struct wl_client *client, EGL_NONE }; + attribs[1] = width; + attribs[3] = height; + attribs[5] = stride / 4; + + image = eglCreateImageKHR(ec->display, ec->context, + EGL_DRM_IMAGE_MESA, + (EGLClientBuffer) name, attribs); + if (image == NULL) { + /* FIXME: Define a real exception event instead of + * abusing this one */ + wl_client_post_event(client, ec->wl_display, + WL_DISPLAY_INVALID_OBJECT, 0); + fprintf(stderr, "failed to create image for name %d\n", name); + return; + } + if (visual == &ec->argb_visual) es->visual = &ec->argb_visual; else if (visual == &ec->premultiplied_argb_visual) es->visual = &ec->premultiplied_argb_visual; else if (visual == &ec->rgb_visual) es->visual = &ec->rgb_visual; - else - /* FIXME: Smack client with an exception event */; + else { + /* FIXME: Define a real exception event instead of + * abusing this one */ + wl_client_post_event(client, ec->display, + WL_DISPLAY_INVALID_OBJECT, 0); + fprintf(stderr, "invalid visual in surface_attach\n"); + return; + } glBindTexture(GL_TEXTURE_2D, es->texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); @@ -468,13 +491,8 @@ surface_attach(struct wl_client *client, if (es->image) eglDestroyImageKHR(ec->display, es->image); - attribs[1] = width; - attribs[3] = height; - attribs[5] = stride / 4; + es->image = image; - es->image = eglCreateImageKHR(ec->display, ec->context, - EGL_DRM_IMAGE_MESA, - (EGLClientBuffer) name, attribs); glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, es->image); } |
