- guint *tex = g_new0(guint, 1);
- glGenTextures(1, tex);
- glBindTexture(GL_TEXTURE_2D, *tex);
-
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glPixelStorei(GL_PACK_ALIGNMENT, 1);
- glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0,
- (alpha ? GL_RGBA : GL_RGB), GL_UNSIGNED_BYTE, pixels);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
- glFlush();
-
- tile->data = tex;
- gtk_widget_queue_draw(GTK_WIDGET(self->viewer));
- g_object_unref(pixbuf);
- return FALSE;
-}
-
-static void _load_tile(GisTile *tile, gpointer _self)
-{
- GisPluginMap *self = _self;
- g_debug("GisPluginMap: _load_tile start %p", g_thread_self());
- char *path = gis_wms_fetch(self->wms, tile, GIS_ONCE, NULL, NULL);
- struct _LoadTileData *data = g_new0(struct _LoadTileData, 1);
- data->self = self;
- data->tile = tile;
- data->pixbuf = gdk_pixbuf_new_from_file(path, NULL);
- if (data->pixbuf) {
- g_idle_add_full(G_PRIORITY_LOW, _load_tile_cb, data, NULL);
- } else {
- g_warning("GisPluginMap: _load_tile - Error loading pixbuf %s", path);
- g_remove(path);
- }
- g_free(path);
- g_debug("GisPluginMap: _load_tile end %p", g_thread_self());
-}
-
-static gboolean _free_tile_cb(gpointer data)
-{
- glDeleteTextures(1, data);
- g_free(data);
- return FALSE;
-}
-static void _free_tile(GisTile *tile, gpointer _self)
-{
- GisPluginMap *self = _self;
- g_debug("GisPluginMap: _free_tile: %p=%d", tile->data, *(guint*)tile->data);
- g_idle_add_full(G_PRIORITY_LOW, _free_tile_cb, tile->data, NULL);