+static void gis_opengl_set_height_func(GisViewer *_opengl, GisBounds *bounds,
+ RoamHeightFunc height_func, gpointer user_data, gboolean update)
+{
+ GisOpenGL *opengl = GIS_OPENGL(_opengl);
+ /* TODO: get points? */
+ g_mutex_lock(opengl->sphere_lock);
+ GList *triangles = roam_sphere_get_intersect(opengl->sphere, TRUE,
+ bounds->n, bounds->s, bounds->e, bounds->w);
+ for (GList *cur = triangles; cur; cur = cur->next) {
+ RoamTriangle *tri = cur->data;
+ RoamPoint *points[] = {tri->p.l, tri->p.m, tri->p.r, tri->split};
+ for (int i = 0; i < G_N_ELEMENTS(points); i++) {
+ if (bounds->n >= points[i]->lat && points[i]->lat >= bounds->s &&
+ bounds->e >= points[i]->lon && points[i]->lon >= bounds->w) {
+ points[i]->height_func = height_func;
+ points[i]->height_data = user_data;
+ roam_point_update_height(points[i]);
+ }
+ }
+ }
+ g_list_free(triangles);
+ g_mutex_unlock(opengl->sphere_lock);
+}