if (gl_renderer_output_create(&output->base,
output->fb->native_window) < 0) {
- gl_renderer_destroy(&compositor->base);
+ compositor->base.renderer->destroy(&compositor->base);
return -1;
}
android_seat_destroy(compositor->seat);
- gl_renderer_destroy(base);
+ base->renderer->destroy(base);
/* destroys outputs, too */
weston_compositor_shutdown(&compositor->base);
return &compositor->base;
err_gl:
- gl_renderer_destroy(&compositor->base);
+ compositor->base.renderer->destroy(&compositor->base);
err_output:
android_output_destroy(&output->base);
err_compositor:
weston_compositor_shutdown(ec);
- gl_renderer_destroy(ec);
+ ec->renderer->destroy(ec);
destroy_sprites(d);
gbm_device_destroy(d->gbm);
wl_list_for_each_safe(weston_seat, next, &ec->base.seat_list, link)
evdev_input_destroy(weston_seat);
err_sprite:
- gl_renderer_destroy(&ec->base);
+ ec->base.renderer->destroy(&ec->base);
gbm_device_destroy(ec->gbm);
destroy_sprites(ec);
err_udev_dev:
{
struct headless_compositor *c = (struct headless_compositor *) ec;
- noop_renderer_destroy(ec);
+ ec->renderer->destroy(ec);
weston_seat_release(&c->fake_seat);
weston_compositor_shutdown(ec);
/* destroys outputs, too */
weston_compositor_shutdown(&compositor->base);
- gl_renderer_destroy(&compositor->base);
+ compositor->base.renderer->destroy(&compositor->base);
tty_destroy(compositor->tty);
bcm_host_deinit();
return &compositor->base;
out_gl:
- gl_renderer_destroy(&compositor->base);
+ compositor->base.renderer->destroy(&compositor->base);
out_tty:
tty_destroy(compositor->tty);
static void
wayland_destroy(struct weston_compositor *ec)
{
- gl_renderer_destroy(ec);
+ ec->renderer->destroy(ec);
weston_compositor_shutdown(ec);
return &c->base;
err_gl:
- gl_renderer_destroy(&c->base);
+ c->base.renderer->destroy(&c->base);
err_display:
wl_display_disconnect(c->parent.wl_display);
err_compositor:
weston_compositor_shutdown(ec); /* destroys outputs, too */
- if (compositor->use_pixman)
- pixman_renderer_destroy(ec);
- else
- gl_renderer_destroy(ec);
+ ec->renderer->destroy(ec);
XCloseDisplay(compositor->dpy);
free(ec);
err_x11_input:
x11_input_destroy(c);
err_renderer:
- if (c->use_pixman)
- pixman_renderer_destroy(&c->base);
- else
- gl_renderer_destroy(&c->base);
+ c->base.renderer->destroy(&c->base);
err_xdisplay:
XCloseDisplay(c->dpy);
err_free:
float red, float green,
float blue, float alpha);
void (*destroy_surface)(struct weston_surface *surface);
+ void (*destroy)(struct weston_compositor *ec);
};
struct weston_compositor {
int
noop_renderer_init(struct weston_compositor *ec);
-void
-noop_renderer_destroy(struct weston_compositor *ec);
struct weston_compositor *
backend_init(struct wl_display *display, int argc, char *argv[],
return get_output_state(output)->egl_surface;
}
-WL_EXPORT void
+static void
gl_renderer_destroy(struct weston_compositor *ec)
{
struct gl_renderer *gr = get_renderer(ec);
gr->base.create_surface = gl_renderer_create_surface;
gr->base.surface_set_color = gl_renderer_surface_set_color;
gr->base.destroy_surface = gl_renderer_destroy_surface;
+ gr->base.destroy = gl_renderer_destroy;
gr->egl_display = eglGetDisplay(display);
if (gr->egl_display == EGL_NO_DISPLAY) {
void
gl_renderer_set_border(struct weston_compositor *ec, int32_t width, int32_t height, void *data,
int32_t *edges);
-void
-gl_renderer_destroy(struct weston_compositor *ec);
void
gl_renderer_print_egl_error_state(void);
{
}
-WL_EXPORT void
+static void
noop_renderer_destroy(struct weston_compositor *ec)
{
free(ec->renderer);
renderer->create_surface = noop_renderer_create_surface;
renderer->surface_set_color = noop_renderer_surface_set_color;
renderer->destroy_surface = noop_renderer_destroy_surface;
+ renderer->destroy = noop_renderer_destroy;
ec->renderer = renderer;
return 0;
free(ps);
}
-WL_EXPORT void
+static void
pixman_renderer_destroy(struct weston_compositor *ec)
{
free(ec->renderer);
renderer->create_surface = pixman_renderer_create_surface;
renderer->surface_set_color = pixman_renderer_surface_set_color;
renderer->destroy_surface = pixman_renderer_destroy_surface;
+ renderer->destroy = pixman_renderer_destroy;
ec->renderer = renderer;
return 0;
#include "compositor.h"
-void
-pixman_renderer_destroy(struct weston_compositor *ec);
-
int
pixman_renderer_init(struct weston_compositor *ec);