*/
#include <time.h>
+#include <string.h>
#include <glib/gstdio.h>
#include <GL/gl.h>
gint width = gdk_pixbuf_get_width(pixbuf);
gint height = gdk_pixbuf_get_height(pixbuf);
+ /* Draw a border */
+ //gint border = 10;
+ //gint stride = gdk_pixbuf_get_rowstride(pixbuf);
+ //for (int i = 0; i < border; i++) {
+ // memset(&pixels[( i)*stride], 0xff, stride);
+ // memset(&pixels[(height-i)*stride], 0xff, stride);
+ //}
+ //for (int i = 0; i < height; i++) {
+ // memset(&pixels[(i*stride)], 0xff, border*4);
+ // memset(&pixels[(i*stride)+((width-border)*4)], 0xff, border*4);
+ //}
+
guint *tex = g_new0(guint, 1);
glGenTextures(1, tex);
glBindTexture(GL_TEXTURE_2D, *tex);
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_NEAREST);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
+ 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);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glFlush();
tile->data = tex;
{
g_debug("GisPluginSat: _update_tiles");
GisPluginSat *sat = _sat;
- g_mutex_lock(sat->mutex);
+ if (!g_mutex_trylock(sat->mutex))
+ return NULL;
gdouble lat, lon, elev;
gis_viewer_get_location(sat->viewer, &lat, &lon, &elev);
gis_tile_update(sat->tiles,
g_thread_create(_update_tiles, sat, FALSE, NULL);
}
+static gpointer _threaded_init(GisPluginSat *sat)
+{
+ _load_tile(sat->tiles, sat);
+ _update_tiles(sat);
+ return NULL;
+}
+
/***********
* Methods *
***********/
sat->viewer = g_object_ref(viewer);
/* Load initial tiles */
- _load_tile(sat->tiles, sat);
- g_thread_create(_update_tiles, sat, FALSE, NULL);
+ g_thread_create((GThreadFunc)_threaded_init, sat, FALSE, NULL);
/* Connect signals */
sat->sigid = g_signal_connect(sat->viewer, "location-changed",