Esempio n. 1
0
/**
 * 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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
/**
 * 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;
}