summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
b9f5eb2)
- Clean up some gdk_thread_{enter,leave} calls
- Fix bug in gis_viewer_add (linked list handling)
- Call gtk_gl_init from gis-test (not sure if this is important)
roam_sphere_draw(opengl->sphere);
//roam_sphere_draw_normals(opengl->sphere);
#else
roam_sphere_draw(opengl->sphere);
//roam_sphere_draw_normals(opengl->sphere);
#else
+ g_mutex_lock(opengl->objects_lock);
g_tree_foreach(opengl->objects, _draw_level, opengl);
g_tree_foreach(opengl->objects, _draw_level, opengl);
+ g_mutex_unlock(opengl->objects_lock);
if (opengl->wireframe) {
glClear(GL_DEPTH_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
if (opengl->wireframe) {
glClear(GL_DEPTH_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
event->keyval, event->state, GDK_plus);
guint kv = event->keyval;
event->keyval, event->state, GDK_plus);
guint kv = event->keyval;
/* Testing */
if (kv == GDK_w) {
opengl->wireframe = !opengl->wireframe;
/* Testing */
if (kv == GDK_w) {
opengl->wireframe = !opengl->wireframe;
else if (kv == GDK_p) roam_sphere_merge_one(opengl->sphere);
else if (kv == GDK_r) roam_sphere_split_merge(opengl->sphere);
else if (kv == GDK_u) roam_sphere_update_errors(opengl->sphere);
else if (kv == GDK_p) roam_sphere_merge_one(opengl->sphere);
else if (kv == GDK_r) roam_sphere_split_merge(opengl->sphere);
else if (kv == GDK_u) roam_sphere_update_errors(opengl->sphere);
gtk_widget_queue_draw(GTK_WIDGET(opengl));
gtk_widget_queue_draw(GTK_WIDGET(opengl));
-#else
- gdk_threads_enter();
static gboolean on_idle(GisOpenGL *opengl)
{
//g_debug("GisOpenGL: on_idle");
static gboolean on_idle(GisOpenGL *opengl)
{
//g_debug("GisOpenGL: on_idle");
g_mutex_lock(opengl->sphere_lock);
if (roam_sphere_split_merge(opengl->sphere))
gtk_widget_queue_draw(GTK_WIDGET(opengl));
g_mutex_unlock(opengl->sphere_lock);
g_mutex_lock(opengl->sphere_lock);
if (roam_sphere_split_merge(opengl->sphere))
gtk_widget_queue_draw(GTK_WIDGET(opengl));
g_mutex_unlock(opengl->sphere_lock);
{
g_assert(GIS_IS_OPENGL(_opengl));
GisOpenGL *opengl = GIS_OPENGL(_opengl);
{
g_assert(GIS_IS_OPENGL(_opengl));
GisOpenGL *opengl = GIS_OPENGL(_opengl);
- _load_object(opengl, object);
g_mutex_lock(opengl->objects_lock);
g_mutex_lock(opengl->objects_lock);
+ _load_object(opengl, object);
struct RenderLevel *level = g_tree_lookup(opengl->objects, (gpointer)key);
if (!level) {
level = g_new0(struct RenderLevel, 1);
struct RenderLevel *level = g_tree_lookup(opengl->objects, (gpointer)key);
if (!level) {
level = g_new0(struct RenderLevel, 1);
}
GList *list = sort ? &level->sorted : &level->unsorted;
/* Put the link in the list */
}
GList *list = sort ? &level->sorted : &level->unsorted;
/* Put the link in the list */
- GList *next = g_new0(GList, 1);
- next->data = object;
- next->prev = list;
- next->next = list->next;
- list->next = next;
+ GList *link = g_new0(GList, 1);
+ link->data = object;
+ link->prev = list;
+ link->next = list->next;
+ if (list->next)
+ list->next->prev = link;
+ list->next = link;
g_mutex_unlock(opengl->objects_lock);
g_mutex_unlock(opengl->objects_lock);
}
static GisObject *gis_opengl_remove(GisViewer *_opengl, gpointer _link)
{
g_assert(GIS_IS_OPENGL(_opengl));
GisOpenGL *opengl = GIS_OPENGL(_opengl);
}
static GisObject *gis_opengl_remove(GisViewer *_opengl, gpointer _link)
{
g_assert(GIS_IS_OPENGL(_opengl));
GisOpenGL *opengl = GIS_OPENGL(_opengl);
+ g_mutex_lock(opengl->objects_lock);
GList *link = _link;
GisObject *object = link->data;
_unload_object(opengl, object);
GList *link = _link;
GisObject *object = link->data;
_unload_object(opengl, object);
- g_mutex_lock(opengl->objects_lock);
/* Just unlink and free it, link->prev is assured */
link->prev->next = link->next;
if (link->next)
/* Just unlink and free it, link->prev is assured */
link->prev->next = link->next;
if (link->next)
#include <config.h>
#include <gtk/gtk.h>
#include <config.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#include "gis.h"
#include <gdk/gdkkeysyms.h>
#include "gis.h"
g_thread_init(NULL);
gdk_threads_init();
gtk_init(&argc, &argv);
g_thread_init(NULL);
gdk_threads_init();
gtk_init(&argc, &argv);
+ gtk_gl_init(&argc, &argv);
prefs = gis_prefs_new(NULL, NULL);
plugins = gis_plugins_new(g_getenv("GIS_PLUGIN_PATH"), prefs);
prefs = gis_prefs_new(NULL, NULL);
plugins = gis_plugins_new(g_getenv("GIS_PLUGIN_PATH"), prefs);
double lat, lon, elev, pan;
gis_viewer_get_location(viewer, &lat, &lon, &elev);
pan = MIN(elev/(EARTH_R/2), 30);
double lat, lon, elev, pan;
gis_viewer_get_location(viewer, &lat, &lon, &elev);
pan = MIN(elev/(EARTH_R/2), 30);
switch (event->keyval) {
case GDK_Left: case GDK_h: gis_viewer_pan(viewer, 0, -pan, 0); break;
case GDK_Down: case GDK_j: gis_viewer_pan(viewer, -pan, 0, 0); break;
switch (event->keyval) {
case GDK_Left: case GDK_h: gis_viewer_pan(viewer, 0, -pan, 0); break;
case GDK_Down: case GDK_j: gis_viewer_pan(viewer, -pan, 0, 0); break;