compositor: Create surfaces neutral, select shader later

We only setup the shader and create the texture once we attach a buffer
or set a color.
diff --git a/src/compositor.c b/src/compositor.c
index 11756d7..90b9dfa 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -184,16 +184,10 @@
 	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 @@
 	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 @@
 	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;