compositor: Introduce a weston_renderer object
Move the gles2 render functions to vfuncs on the renderer object.
diff --git a/src/gles2-renderer.c b/src/gles2-renderer.c
index 883c5ca..241b5bb 100644
--- a/src/gles2-renderer.c
+++ b/src/gles2-renderer.c
@@ -620,7 +620,7 @@
draw_surface(surface, output, damage);
}
-WL_EXPORT void
+static void
gles2_renderer_repaint_output(struct weston_output *output,
pixman_region32_t *output_damage)
{
@@ -674,7 +674,7 @@
}
-WL_EXPORT void
+static void
gles2_renderer_flush_damage(struct weston_surface *surface)
{
#ifdef GL_UNPACK_ROW_LENGTH
@@ -731,7 +731,7 @@
glBindTexture(es->target, 0);
}
-WL_EXPORT void
+static void
gles2_renderer_attach(struct weston_surface *es, struct wl_buffer *buffer)
{
struct weston_compositor *ec = es->compositor;
@@ -1035,12 +1035,21 @@
log_extensions("GL extensions", str ? str : "(null)");
}
+struct gles2_renderer {
+ struct weston_renderer base;
+};
+
WL_EXPORT int
gles2_renderer_init(struct weston_compositor *ec)
{
+ struct gles2_renderer *renderer;
const char *extensions;
int has_egl_image_external = 0;
+ renderer = malloc(sizeof *renderer);
+ if (renderer == NULL)
+ return -1;
+
log_egl_gl_info(ec->egl_display);
ec->image_target_texture_2d =
@@ -1115,5 +1124,10 @@
vertex_shader, solid_fragment_shader) < 0)
return -1;
+ renderer->base.repaint_output = gles2_renderer_repaint_output;
+ renderer->base.flush_damage = gles2_renderer_flush_damage;
+ renderer->base.attach = gles2_renderer_attach;
+ ec->renderer = &renderer->base;
+
return 0;
}