gl-renderer: Split gl_renderer_attach() into smaller functions
This commit is contained in:
committed by
Kristian Høgsberg
parent
6be5f439d5
commit
047e9b97b3
+49
-24
@@ -1201,31 +1201,13 @@ ensure_textures(struct gl_surface_state *gs, int num_textures)
|
||||
}
|
||||
|
||||
static void
|
||||
gl_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
|
||||
gl_renderer_attach_shm(struct weston_surface *es, struct weston_buffer *buffer,
|
||||
struct wl_shm_buffer *shm_buffer)
|
||||
{
|
||||
struct weston_compositor *ec = es->compositor;
|
||||
struct gl_renderer *gr = get_renderer(ec);
|
||||
struct gl_surface_state *gs = get_surface_state(es);
|
||||
struct wl_shm_buffer *shm_buffer;
|
||||
EGLint attribs[3], format;
|
||||
int i, num_planes;
|
||||
|
||||
weston_buffer_reference(&gs->buffer_ref, buffer);
|
||||
|
||||
if (!buffer) {
|
||||
for (i = 0; i < gs->num_images; i++) {
|
||||
gr->destroy_image(gr->egl_display, gs->images[i]);
|
||||
gs->images[i] = NULL;
|
||||
}
|
||||
gs->num_images = 0;
|
||||
glDeleteTextures(gs->num_textures, gs->textures);
|
||||
gs->num_textures = 0;
|
||||
gs->buffer_type = BUFFER_TYPE_NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
shm_buffer = wl_shm_buffer_get(buffer->resource);
|
||||
if (shm_buffer) {
|
||||
buffer->shm_buffer = shm_buffer;
|
||||
buffer->width = wl_shm_buffer_get_width(shm_buffer);
|
||||
buffer->height = wl_shm_buffer_get_height(shm_buffer);
|
||||
@@ -1253,9 +1235,18 @@ gl_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
|
||||
gs->shader = &gr->texture_shader_rgbx;
|
||||
else
|
||||
gs->shader = &gr->texture_shader_rgba;
|
||||
} else if (gr->query_buffer(gr->egl_display,
|
||||
(struct wl_buffer *)buffer->resource,
|
||||
EGL_TEXTURE_FORMAT, &format)) {
|
||||
}
|
||||
|
||||
static void
|
||||
gl_renderer_attach_egl(struct weston_surface *es, struct weston_buffer *buffer,
|
||||
uint32_t format)
|
||||
{
|
||||
struct weston_compositor *ec = es->compositor;
|
||||
struct gl_renderer *gr = get_renderer(ec);
|
||||
struct gl_surface_state *gs = get_surface_state(es);
|
||||
EGLint attribs[3];
|
||||
int i, num_planes;
|
||||
|
||||
buffer->legacy_buffer = (struct wl_buffer *)buffer->resource;
|
||||
gr->query_buffer(gr->egl_display, buffer->legacy_buffer,
|
||||
EGL_WIDTH, &buffer->width);
|
||||
@@ -1317,7 +1308,41 @@ gl_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
|
||||
gs->pitch = buffer->width;
|
||||
gs->height = buffer->height;
|
||||
gs->buffer_type = BUFFER_TYPE_EGL;
|
||||
} else {
|
||||
}
|
||||
|
||||
static void
|
||||
gl_renderer_attach(struct weston_surface *es, struct weston_buffer *buffer)
|
||||
{
|
||||
struct weston_compositor *ec = es->compositor;
|
||||
struct gl_renderer *gr = get_renderer(ec);
|
||||
struct gl_surface_state *gs = get_surface_state(es);
|
||||
struct wl_shm_buffer *shm_buffer;
|
||||
EGLint format;
|
||||
int i;
|
||||
|
||||
weston_buffer_reference(&gs->buffer_ref, buffer);
|
||||
|
||||
if (!buffer) {
|
||||
for (i = 0; i < gs->num_images; i++) {
|
||||
gr->destroy_image(gr->egl_display, gs->images[i]);
|
||||
gs->images[i] = NULL;
|
||||
}
|
||||
gs->num_images = 0;
|
||||
glDeleteTextures(gs->num_textures, gs->textures);
|
||||
gs->num_textures = 0;
|
||||
gs->buffer_type = BUFFER_TYPE_NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
shm_buffer = wl_shm_buffer_get(buffer->resource);
|
||||
|
||||
if (shm_buffer)
|
||||
gl_renderer_attach_shm(es, buffer, shm_buffer);
|
||||
else if (gr->query_buffer(gr->egl_display,
|
||||
(struct wl_buffer *)buffer->resource,
|
||||
EGL_TEXTURE_FORMAT, &format))
|
||||
gl_renderer_attach_egl(es, buffer, format);
|
||||
else {
|
||||
weston_log("unhandled buffer type!\n");
|
||||
weston_buffer_reference(&gs->buffer_ref, NULL);
|
||||
gs->buffer_type = BUFFER_TYPE_NULL;
|
||||
|
||||
Reference in New Issue
Block a user