diff --git a/src/compositor.c b/src/compositor.c index 11756d7a..90b9dfac 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -184,16 +184,10 @@ weston_surface_create(struct weston_compositor *compositor, wl_list_init(&surface->link); wl_list_init(&surface->buffer_link); - glGenTextures(1, &surface->texture); - glBindTexture(GL_TEXTURE_2D, surface->texture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - surface->surface.resource.client = NULL; surface->compositor = compositor; surface->visual = WESTON_NONE_VISUAL; - surface->shader = &compositor->texture_shader; surface->image = EGL_NO_IMAGE_KHR; surface->x = x; surface->y = y; @@ -216,6 +210,22 @@ weston_surface_create(struct weston_compositor *compositor, return surface; } +static void +weston_surface_set_color(struct weston_surface *surface, + GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) +{ + if (alpha == 1) + surface->visual = WESTON_RGB_VISUAL; + else + surface->visual = WESTON_ARGB_VISUAL; + + surface->color[0] = red; + surface->color[1] = green; + surface->color[2] = blue; + surface->color[3] = alpha; + surface->shader = &surface->compositor->solid_shader; +} + WL_EXPORT void weston_surface_damage_rectangle(struct weston_surface *surface, int32_t x, int32_t y, @@ -390,7 +400,17 @@ weston_buffer_attach(struct wl_buffer *buffer, struct wl_surface *surface) struct weston_compositor *ec = es->compositor; struct wl_list *surfaces_attached_to; - glBindTexture(GL_TEXTURE_2D, es->texture); + if (!es->texture) { + glGenTextures(1, &es->texture); + glBindTexture(GL_TEXTURE_2D, es->texture); + glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + es->shader = &ec->texture_shader; + } else { + glBindTexture(GL_TEXTURE_2D, es->texture); + } if (wl_buffer_is_shm(buffer)) { es->pitch = wl_shm_buffer_get_stride(buffer) / 4;