struct wl_drm * wayland_drm_init(struct wl_display *display, char *device_name, struct wayland_drm_callbacks *callbacks, void *user_data) { struct wl_drm *drm; drm = malloc(sizeof *drm); drm->display = display; drm->device_name = strdup(device_name); drm->callbacks = callbacks; drm->user_data = user_data; drm->object.interface = &wl_drm_interface; drm->object.implementation = (void (**)(void)) &drm_interface; wl_display_add_object(display, &drm->object); wl_display_add_global(display, &drm->object, post_drm_device); return drm; }
static void cogland_compositor_create_output (CoglandCompositor *compositor, int x, int y, int width, int height) { CoglandOutput *output = g_slice_new0 (CoglandOutput); CoglFramebuffer *fb; GError *error = NULL; output->wayland_output.interface = &wl_output_interface; wl_display_add_object (compositor->wayland_display, &output->wayland_output); wl_display_add_global (compositor->wayland_display, &output->wayland_output, cogland_output_post_geometry); output->onscreen = cogl_onscreen_new (compositor->cogl_context, width, height); /* Eventually there will be an implicit allocate on first use so this * will become optional... */ fb = COGL_FRAMEBUFFER (output->onscreen); if (!cogl_framebuffer_allocate (fb, &error)) g_error ("Failed to allocate framebuffer: %s\n", error->message); cogl_onscreen_show (output->onscreen); #if 0 cogl_framebuffer_set_viewport (fb, x, y, width, height); #else cogl_push_framebuffer (fb); cogl_set_viewport (-x, -y, compositor->virtual_width, compositor->virtual_height); cogl_pop_framebuffer (); #endif compositor->outputs = g_list_prepend (compositor->outputs, output); }