/** * grits_plugin_env_new: * @viewer: the #GritsViewer to use for drawing * @prefs: the #GritsPrefs for storing configurations * * Create a new instance of the environment plugin. * * Returns: the new #GritsPluginEnv */ GritsPluginEnv *grits_plugin_env_new(GritsViewer *viewer, GritsPrefs *prefs) { g_debug("GritsPluginEnv: new"); GritsPluginEnv *env = g_object_new(GRITS_TYPE_PLUGIN_ENV, NULL); env->viewer = g_object_ref(viewer); env->prefs = g_object_ref(prefs); /* Add sky */ GritsCallback *sky = grits_callback_new(sky_expose, env); grits_viewer_add(viewer, GRITS_OBJECT(sky), GRITS_LEVEL_BACKGROUND, FALSE); env->refs = g_list_prepend(env->refs, sky); /* Add compass */ GritsCallback *compass = grits_callback_new(compass_expose, env); grits_viewer_add(viewer, GRITS_OBJECT(compass), GRITS_LEVEL_HUD, TRUE); g_signal_connect(compass, "clicked", G_CALLBACK(compass_click), viewer); grits_object_set_cursor(GRITS_OBJECT(compass), GDK_CROSS); env->refs = g_list_prepend(env->refs, compass); /* Add info */ //GritsCallback *info = grits_callback_new(info_expose, env); //grits_viewer_add(viewer, GRITS_OBJECT(info), GRITS_LEVEL_HUD, FALSE); //env->refs = g_list_prepend(env->refs, info); (void)info_expose; /* Add background */ //GritsTile *background = grits_tile_new(NULL, NORTH, SOUTH, EAST, WEST); //glGenTextures(1, &env->tex); //background->data = &env->tex; //grits_viewer_add(viewer, GRITS_OBJECT(background), GRITS_LEVEL_BACKGROUND, FALSE); //env->refs = g_list_prepend(env->refs, background); return env; }
static gboolean _draw_level(gpointer key, gpointer value, gpointer user_data) { g_debug("GritsOpenGL: _draw_level - level=%-4ld", (glong)key); GritsOpenGL *opengl = user_data; struct RenderLevel *level = value; int nsorted = 0, nunsorted = 0; GList *cur = NULL; /* Draw opaque objects without sorting */ glDepthMask(TRUE); glClear(GL_DEPTH_BUFFER_BIT); for (cur = level->unsorted.next; cur; cur = cur->next, nunsorted++) grits_object_draw(GRITS_OBJECT(cur->data), opengl); /* Freeze depth buffer and draw transparent objects sorted */ /* TODO: sorting */ //glDepthMask(FALSE); glAlphaFunc(GL_GREATER, 0.1); for (cur = level->sorted.next; cur; cur = cur->next, nsorted++) grits_object_draw(GRITS_OBJECT(cur->data), opengl); /* TODO: Prune empty levels */ g_debug("GritsOpenGL: _draw_level - drew %d,%d objects", nunsorted, nsorted); return FALSE; }
/** * grits_plugin_sat_new: * @viewer: the #GritsViewer to use for drawing * * Create a new instance of the satellite plugin. * * Returns: the new #GritsPluginSat */ GritsPluginSat *grits_plugin_sat_new(GritsViewer *viewer) { g_debug("GritsPluginSat: new"); GritsPluginSat *sat = g_object_new(GRITS_TYPE_PLUGIN_SAT, NULL); sat->viewer = g_object_ref(viewer); /* Load initial tiles */ gdouble lat, lon, elev; grits_viewer_get_location(viewer, &lat, &lon, &elev); _on_location_changed(viewer, lat, lon, elev, sat); /* Connect signals */ sat->sigid = g_signal_connect(sat->viewer, "location-changed", G_CALLBACK(_on_location_changed), sat); /* Add renderers */ grits_viewer_add(viewer, GRITS_OBJECT(sat->tiles), GRITS_LEVEL_WORLD, FALSE); return sat; }