]> Pileus Git - grits/blobdiff - src/gis-opengl.c
Add z-index to tiles
[grits] / src / gis-opengl.c
index a70c6a8ebb3e251fda82c3a24ab2b711a514d5af..57cfb471e901894d3b510c9f0e3b99aabbf50b10 100644 (file)
@@ -115,7 +115,9 @@ static void _set_visuals(GisOpenGL *opengl)
        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
        //glShadeModel(GL_FLAT);
 
+       g_mutex_lock(opengl->sphere_lock);
        roam_sphere_update_view(opengl->sphere);
+       g_mutex_unlock(opengl->sphere_lock);
 }
 
 
@@ -176,7 +178,9 @@ static void _draw_tile(GisOpenGL *opengl, GisTile *tile, GList *triangles)
                if (lat[2] == 90 || lat[2] == -90) xy[2][0] = 0.5;
 
                glEnable(GL_TEXTURE_2D);
+               glEnable(GL_POLYGON_OFFSET_FILL);
                glBindTexture(GL_TEXTURE_2D, *(guint*)tile->data);
+               glPolygonOffset(0, -tile->zindex);
                glBegin(GL_TRIANGLES);
                glNormal3dv(tri->p.r->norm); glTexCoord2dv(xy[0]); glVertex3dv((double*)tri->p.r);
                glNormal3dv(tri->p.m->norm); glTexCoord2dv(xy[1]); glVertex3dv((double*)tri->p.m);
@@ -306,7 +310,9 @@ static void _draw_object(GisOpenGL *opengl, GisObject *object)
        } else if (GIS_IS_TILE(object)) {
                glEnable(GL_DEPTH_TEST);
                glDepthFunc(GL_LESS);
+               g_mutex_lock(opengl->sphere_lock);
                _draw_tiles(opengl, GIS_TILE(object));
+               g_mutex_unlock(opengl->sphere_lock);
        }
        glPopAttrib();
        glMatrixMode(GL_PROJECTION); glPopMatrix();
@@ -478,7 +484,9 @@ static gboolean on_key_press(GisOpenGL *opengl, GdkEventKey *event, gpointer _)
 static gboolean _update_errors_cb(gpointer _opengl)
 {
        GisOpenGL *opengl = _opengl;
+       g_mutex_lock(opengl->sphere_lock);
        roam_sphere_update_errors(opengl->sphere);
+       g_mutex_unlock(opengl->sphere_lock);
        opengl->ue_source = 0;
        return FALSE;
 }