---
 src/compositor.c     |  2 --
 src/compositor.h     |  6 ----
 src/gles2-renderer.c | 87 +++++++++++++++++++++++++++++-----------------------
 3 files changed, 48 insertions(+), 47 deletions(-)

diff --git a/src/compositor.c b/src/compositor.c
index bd95e8c..587fded 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -242,8 +242,6 @@ weston_surface_create(struct weston_compositor *compositor)
                return NULL;
        }
 
-       surface->num_textures = 0;
-       surface->num_images = 0;
        pixman_region32_init(&surface->texture_damage);
 
        surface->buffer = NULL;
diff --git a/src/compositor.h b/src/compositor.h
index 32a78f5..a398a74 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -397,8 +397,6 @@ struct weston_region {
 struct weston_surface {
        struct wl_surface surface;
        struct weston_compositor *compositor;
-       GLuint textures[3];
-       int num_textures;
        pixman_region32_t texture_damage;
        pixman_region32_t clip;
        pixman_region32_t damage;
@@ -458,10 +456,6 @@ struct weston_surface {
 
        struct wl_list frame_callback_list;
 
-       EGLImageKHR images[3];
-       GLenum target;
-       int num_images;
-
        struct wl_buffer *buffer;
        struct wl_listener buffer_destroy_listener;
 
diff --git a/src/gles2-renderer.c b/src/gles2-renderer.c
index a256a57..f740155 100644
--- a/src/gles2-renderer.c
+++ b/src/gles2-renderer.c
@@ -47,6 +47,13 @@ struct gles2_output_state {
 struct gles2_surface_state {
        GLfloat color[4];
        struct gles2_shader *shader;
+
+       GLuint textures[3];
+       int num_textures;
+
+       EGLImageKHR images[3];
+       GLenum target;
+       int num_images;
 };
 
 struct gles2_renderer {
@@ -686,7 +693,7 @@ shader_uniforms(struct gles2_shader *shader,
        glUniform4fv(shader->color_uniform, 1, gs->color);
        glUniform1f(shader->alpha_uniform, surface->alpha);
 
-       for (i = 0; i < surface->num_textures; i++)
+       for (i = 0; i < gs->num_textures; i++)
                glUniform1i(shader->tex_uniforms[i], i);
 }
 
@@ -731,11 +738,11 @@ draw_surface(struct weston_surface *es, struct 
weston_output *output,
        else
                filter = GL_NEAREST;
 
-       for (i = 0; i < es->num_textures; i++) {
+       for (i = 0; i < gs->num_textures; i++) {
                glActiveTexture(GL_TEXTURE0 + i);
-               glBindTexture(es->target, es->textures[i]);
-               glTexParameteri(es->target, GL_TEXTURE_MIN_FILTER, filter);
-               glTexParameteri(es->target, GL_TEXTURE_MAG_FILTER, filter);
+               glBindTexture(gs->target, gs->textures[i]);
+               glTexParameteri(gs->target, GL_TEXTURE_MIN_FILTER, filter);
+               glTexParameteri(gs->target, GL_TEXTURE_MAG_FILTER, filter);
        }
 
        /* blended region is whole surface minus opaque region: */
@@ -994,6 +1001,8 @@ gles2_renderer_read_pixels(struct weston_output *output,
 static void
 gles2_renderer_flush_damage(struct weston_surface *surface)
 {
+       struct gles2_surface_state *gs = get_surface_state(surface);
+
 #ifdef GL_UNPACK_ROW_LENGTH
        pixman_box32_t *rectangles;
        void *data;
@@ -1012,7 +1021,7 @@ gles2_renderer_flush_damage(struct weston_surface 
*surface)
        if (!pixman_region32_not_empty(&surface->texture_damage))
                return;
 
-       glBindTexture(GL_TEXTURE_2D, surface->textures[0]);
+       glBindTexture(GL_TEXTURE_2D, gs->textures[0]);
 
        if (!surface->compositor->has_unpack_subimage) {
                glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT,
@@ -1045,23 +1054,23 @@ done:
 }
 
 static void
-ensure_textures(struct weston_surface *es, int num_textures)
+ensure_textures(struct gles2_surface_state *gs, int num_textures)
 {
        int i;
 
-       if (num_textures <= es->num_textures)
+       if (num_textures <= gs->num_textures)
                return;
 
-       for (i = es->num_textures; i < num_textures; i++) {
-               glGenTextures(1, &es->textures[i]);
-               glBindTexture(es->target, es->textures[i]);
-               glTexParameteri(es->target,
+       for (i = gs->num_textures; i < num_textures; i++) {
+               glGenTextures(1, &gs->textures[i]);
+               glBindTexture(gs->target, gs->textures[i]);
+               glTexParameteri(gs->target,
                                GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-               glTexParameteri(es->target,
+               glTexParameteri(gs->target,
                                GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
        }
-       es->num_textures = num_textures;
-       glBindTexture(es->target, 0);
+       gs->num_textures = num_textures;
+       glBindTexture(gs->target, 0);
 }
 
 static void
@@ -1074,22 +1083,22 @@ gles2_renderer_attach(struct weston_surface *es, struct 
wl_buffer *buffer)
        int i, num_planes;
 
        if (!buffer) {
-               for (i = 0; i < es->num_images; i++) {
-                       ec->destroy_image(gr->egl_display, es->images[i]);
-                       es->images[i] = NULL;
+               for (i = 0; i < gs->num_images; i++) {
+                       ec->destroy_image(gr->egl_display, gs->images[i]);
+                       gs->images[i] = NULL;
                }
-               es->num_images = 0;
-               glDeleteTextures(es->num_textures, es->textures);
-               es->num_textures = 0;
+               gs->num_images = 0;
+               glDeleteTextures(gs->num_textures, gs->textures);
+               gs->num_textures = 0;
                return;
        }
 
        if (wl_buffer_is_shm(buffer)) {
                es->pitch = wl_shm_buffer_get_stride(buffer) / 4;
-               es->target = GL_TEXTURE_2D;
+               gs->target = GL_TEXTURE_2D;
 
-               ensure_textures(es, 1);
-               glBindTexture(GL_TEXTURE_2D, es->textures[0]);
+               ensure_textures(gs, 1);
+               glBindTexture(GL_TEXTURE_2D, gs->textures[0]);
                glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT,
                             es->pitch, buffer->height, 0,
                             GL_BGRA_EXT, GL_UNSIGNED_BYTE, NULL);
@@ -1099,10 +1108,10 @@ gles2_renderer_attach(struct weston_surface *es, struct 
wl_buffer *buffer)
                        gs->shader = &gr->texture_shader_rgba;
        } else if (ec->query_buffer(gr->egl_display, buffer,
                                    EGL_TEXTURE_FORMAT, &format)) {
-               for (i = 0; i < es->num_images; i++)
-                       ec->destroy_image(gr->egl_display, es->images[i]);
-               es->num_images = 0;
-               es->target = GL_TEXTURE_2D;
+               for (i = 0; i < gs->num_images; i++)
+                       ec->destroy_image(gr->egl_display, gs->images[i]);
+               gs->num_images = 0;
+               gs->target = GL_TEXTURE_2D;
                switch (format) {
                case EGL_TEXTURE_RGB:
                case EGL_TEXTURE_RGBA:
@@ -1112,7 +1121,7 @@ gles2_renderer_attach(struct weston_surface *es, struct 
wl_buffer *buffer)
                        break;
                case EGL_TEXTURE_EXTERNAL_WL:
                        num_planes = 1;
-                       es->target = GL_TEXTURE_EXTERNAL_OES;
+                       gs->target = GL_TEXTURE_EXTERNAL_OES;
                        gs->shader = &gr->texture_shader_egl_external;
                        break;
                case EGL_TEXTURE_Y_UV_WL:
@@ -1129,25 +1138,25 @@ gles2_renderer_attach(struct weston_surface *es, struct 
wl_buffer *buffer)
                        break;
                }
 
-               ensure_textures(es, num_planes);
+               ensure_textures(gs, num_planes);
                for (i = 0; i < num_planes; i++) {
                        attribs[0] = EGL_WAYLAND_PLANE_WL;
                        attribs[1] = i;
                        attribs[2] = EGL_NONE;
-                       es->images[i] = ec->create_image(gr->egl_display,
+                       gs->images[i] = ec->create_image(gr->egl_display,
                                                         NULL,
                                                         EGL_WAYLAND_BUFFER_WL,
                                                         buffer, attribs);
-                       if (!es->images[i]) {
+                       if (!gs->images[i]) {
                                weston_log("failed to create img for plane 
%d\n", i);
                                continue;
                        }
-                       es->num_images++;
+                       gs->num_images++;
 
                        glActiveTexture(GL_TEXTURE0 + i);
-                       glBindTexture(es->target, es->textures[i]);
-                       ec->image_target_texture_2d(es->target,
-                                                   es->images[i]);
+                       glBindTexture(gs->target, gs->textures[i]);
+                       ec->image_target_texture_2d(gs->target,
+                                                   gs->images[i]);
                }
 
                es->pitch = buffer->width;
@@ -1194,10 +1203,10 @@ gles2_renderer_destroy_surface(struct weston_surface 
*surface)
        struct gles2_renderer *gr = get_renderer(ec);
        int i;
 
-       glDeleteTextures(surface->num_textures, surface->textures);
+       glDeleteTextures(gs->num_textures, gs->textures);
 
-       for (i = 0; i < surface->num_images; i++)
-               ec->destroy_image(gr->egl_display, surface->images[i]);
+       for (i = 0; i < gs->num_images; i++)
+               ec->destroy_image(gr->egl_display, gs->images[i]);
 
        free(gs);
 }
-- 
1.8.0

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to