{
struct wlsc_surface *es = (struct wlsc_surface *) surface;
struct wlsc_compositor *ec = es->compositor;
+ EGLImageKHR image;
EGLint attribs[] = {
EGL_WIDTH, 0,
EGL_HEIGHT, 0,
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);
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);
}
struct wl_display *display, uint32_t id)
{
fprintf(stderr, "sent request to invalid object\n");
+ abort();
}
static void
uint32_t id, uint32_t opcode)
{
fprintf(stderr, "sent invalid request opcode\n");
+ abort();
}
static void
struct wl_display *display)
{
fprintf(stderr, "server out of memory\n");
+ abort();
}
static void
struct wl_list link;
};
-void
-wl_client_destroy(struct wl_client *client);
-
WL_EXPORT void
wl_client_post_event(struct wl_client *client, struct wl_object *sender,
uint32_t opcode, ...)
interface->destroy(NULL, (struct wl_surface *) object);
}
-void
+WL_EXPORT void
wl_client_destroy(struct wl_client *client)
{
struct wl_surface *surface;