X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=src%2Froam.c;h=4bc294c08097c644ab0fa771e9e25c0b60c13218;hb=1ccb2426332856ef04f0bfb35716520a94e0d32c;hp=9f2474f6105f0f74c10f65b961a6e08e1a4a4663;hpb=f510823bdc5b77fa0c5336ad608f13f251a0ada5;p=grits diff --git a/src/roam.c b/src/roam.c index 9f2474f..4bc294c 100644 --- a/src/roam.c +++ b/src/roam.c @@ -22,11 +22,9 @@ #include #include -#include "gis-world.h" - +#include "gis-util.h" #include "roam.h" - /** * TODO: * - Optimize for memory consumption @@ -34,19 +32,6 @@ * - Target polygon count/detail */ -/* Misc */ -RoamView *roam_view_new() -{ - return g_new0(RoamView, 1); -} -void roam_view_update(RoamView *view) -{ - glGetDoublev (GL_MODELVIEW_MATRIX, view->model); - glGetDoublev (GL_PROJECTION_MATRIX, view->proj); - glGetIntegerv(GL_VIEWPORT, view->view); - view->version++; -} - /* For GPQueue comparators */ static gint tri_cmp(RoamTriangle *a, RoamTriangle *b, gpointer data) { @@ -535,16 +520,23 @@ RoamSphere *roam_sphere_new() return self; } +void roam_sphere_update_view(RoamSphere *self) +{ + if (!self->view) + self->view = g_new0(RoamView, 1); + glGetDoublev (GL_MODELVIEW_MATRIX, self->view->model); + glGetDoublev (GL_PROJECTION_MATRIX, self->view->proj); + glGetIntegerv(GL_VIEWPORT, self->view->view); + self->view->version++; +} void roam_sphere_update_errors(RoamSphere *self) { g_debug("RoamSphere: update_errors - polys=%d", self->polys); - if (!self->view) - self->view = roam_view_new(); - roam_view_update(self->view); - GPtrArray *tris = g_pqueue_get_array(self->triangles); GPtrArray *dias = g_pqueue_get_array(self->diamonds); + roam_sphere_update_view(self); + for (int i = 0; i < tris->len; i++) { RoamTriangle *tri = tris->pdata[i]; roam_triangle_update_errors(tri, self); @@ -672,7 +664,8 @@ GList *roam_sphere_get_intersect(RoamSphere *self, * time = 30 * 2*333 * i_cost = 20000 * i_cost */ GList *list = NULL; for (int i = 0; i < G_N_ELEMENTS(self->roots); i++) - list = _roam_sphere_get_intersect_rec(self->roots[i], list, n, s, e, w); + list = _roam_sphere_get_intersect_rec(self->roots[i], + list, n, s, e, w); return list; } void roam_sphere_free_tri(RoamTriangle *tri)