]> Pileus Git - grits/commitdiff
Stub out an environment plugin.
authorAndy Spencer <andy753421@gmail.com>
Tue, 26 Jan 2010 01:58:28 +0000 (01:58 +0000)
committerAndy Spencer <andy753421@gmail.com>
Tue, 26 Jan 2010 01:58:28 +0000 (01:58 +0000)
TODO: do a halfway decent sky and stars rendering.

src/gis-opengl.c
src/gis_test.c
src/plugins/Makefile.am
src/plugins/env.c [new file with mode: 0644]
src/plugins/env.h [new file with mode: 0644]

index d5f9cf0b6e63e151b340a3aeb05e2d0e6a697e84..e18a309cbfee65c635bc599f4f6acd3e50e75393 100644 (file)
@@ -88,7 +88,7 @@ static void _set_visuals(GisOpenGL *self)
 
        float material_ambient[]  = {0.2, 0.2, 0.2, 1.0};
        float material_diffuse[]  = {0.8, 0.8, 0.8, 1.0};
-       float material_specular[] = {0.0, 0.0, 0.0, 1.0};
+       float material_specular[] = {0.1, 0.1, 0.1, 1.0};
        float material_emission[] = {0.0, 0.0, 0.0, 1.0};
        glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT,  material_ambient);
        glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE,  material_diffuse);
@@ -102,12 +102,6 @@ static void _set_visuals(GisOpenGL *self)
        glRotatef(lat, 1, 0, 0);
        glRotatef(-lon, 0, 1, 0);
 
-       /* Misc */
-       gdouble rg   = MAX(0, 1-(elev/20000));
-       gdouble blue = MAX(0, 1-(elev/50000));
-       glClearColor(MIN(0.65,rg), MIN(0.65,rg), MIN(1,blue), 1.0f);
-       glColor4f(1, 1, 1, 1);
-
        glDisable(GL_ALPHA_TEST);
 
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
index 4c0785a4e938b9d7e252349be00cb55ad35b6556..83252e0ad8a14a5b11f5eb89a707dd5224b09f85 100644 (file)
@@ -61,6 +61,7 @@ int main(int argc, char **argv)
 
        gis_plugins_load(plugins, "bmng", viewer, prefs);
        gis_plugins_load(plugins, "srtm", viewer, prefs);
+       gis_plugins_load(plugins, "env",  viewer, prefs);
        gis_plugins_load(plugins, "test", viewer, prefs);
 
        gdk_threads_enter();
index 905bfd79cf2ce6a615ae6afb0e8593f403fbe4e5..d0fd720c2c1d7c8cfa2ba63ae192d14f2b0a908f 100644 (file)
@@ -7,9 +7,10 @@ LIBS        = $(top_srcdir)/src/libgis.la
 
 pluginsdir  = "$(libdir)/gis"
 
-plugins_LTLIBRARIES = bmng.la srtm.la test.la
+plugins_LTLIBRARIES = bmng.la srtm.la env.la test.la
 bmng_la_SOURCES     = bmng.c bmng.h
 srtm_la_SOURCES     = srtm.c srtm.h
+env_la_SOURCES      = env.c  env.h
 test_la_SOURCES     = test.c test.h
 
 noinst_LTLIBRARIES  = teapot.la
diff --git a/src/plugins/env.c b/src/plugins/env.c
new file mode 100644 (file)
index 0000000..7deea1f
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2009 Andy Spencer <spenceal@rose-hulman.edu>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <math.h>
+#include <gtk/gtkgl.h>
+#include <GL/gl.h>
+
+#include <gis/gis.h>
+
+#include "env.h"
+
+/***********
+ * Helpers *
+ ***********/
+static gpointer expose(GisCallback *callback, gpointer _self)
+{
+       GisPluginEnv *self = GIS_PLUGIN_ENV(_self);
+       g_debug("GisPluginEnv: expose");
+
+       gdouble lat, lon, elev;
+       gis_viewer_get_location(self->viewer, &lat, &lon, &elev);
+
+       /* Misc */
+       gdouble rg   = MAX(0, 1-(elev/20000));
+       gdouble blue = MAX(0, 1-(elev/50000));
+       glClearColor(MIN(0.65,rg), MIN(0.65,rg), MIN(1,blue), 1.0f);
+       glClear(GL_COLOR_BUFFER_BIT);
+
+       /* Attempt to render an atmosphere */
+       /*
+       glEnable(GL_COLOR_MATERIAL);
+       glDisable(GL_CULL_FACE);
+       glDisable(GL_LIGHTING);
+
+       glBlendFunc(GL_ONE, GL_ONE);
+
+       glMatrixMode(GL_MODELVIEW);
+
+       elev = -EARTH_R;
+       for (elev = -EARTH_R; elev < 0; elev += EARTH_R/10) {
+               glPushMatrix();
+               glColor4f(0.3, 0.3, 1.0, 0.2);
+               gis_viewer_center_position(self->viewer, lat, lon, elev);
+
+               glBegin(GL_TRIANGLE_FAN);
+               glVertex3f(0, 0, 0);
+               for (gdouble i = 0; i <= 2*G_PI; i += G_PI/10) {
+                       gint rad = 1*EARTH_R + 300000;
+                       glVertex3f(rad*sin(i), rad*cos(i), 0);
+                       g_message("%f %f %f", 3*EARTH_R*sin(i), 3*EARTH_R*cos(i), 0.);
+               }
+               glEnd();
+               glPopMatrix();
+       }
+       */
+
+       return NULL;
+}
+
+
+/***********
+ * Methods *
+ ***********/
+GisPluginEnv *gis_plugin_env_new(GisViewer *viewer, GisPrefs *prefs)
+{
+       g_debug("GisPluginEnv: new");
+       GisPluginEnv *self = g_object_new(GIS_TYPE_PLUGIN_ENV, NULL);
+       self->viewer = viewer;
+
+       /* Add renderers */
+       GisCallback *callback = gis_callback_new(expose, self);
+       gis_viewer_add(viewer, GIS_OBJECT(callback), GIS_LEVEL_BACKGROUND, 0);
+
+       return self;
+}
+
+
+/****************
+ * GObject code *
+ ****************/
+/* Plugin init */
+static void gis_plugin_env_plugin_init(GisPluginInterface *iface);
+G_DEFINE_TYPE_WITH_CODE(GisPluginEnv, gis_plugin_env, G_TYPE_OBJECT,
+               G_IMPLEMENT_INTERFACE(GIS_TYPE_PLUGIN,
+                       gis_plugin_env_plugin_init));
+static void gis_plugin_env_plugin_init(GisPluginInterface *iface)
+{
+       g_debug("GisPluginEnv: plugin_init");
+       /* Add methods to the interface */
+}
+/* Class/Object init */
+static void gis_plugin_env_init(GisPluginEnv *self)
+{
+       g_debug("GisPluginEnv: init");
+       /* Set defaults */
+}
+static void gis_plugin_env_dispose(GObject *gobject)
+{
+       g_debug("GisPluginEnv: dispose");
+       GisPluginEnv *self = GIS_PLUGIN_ENV(gobject);
+       /* Drop references */
+       G_OBJECT_CLASS(gis_plugin_env_parent_class)->dispose(gobject);
+}
+static void gis_plugin_env_class_init(GisPluginEnvClass *klass)
+{
+       g_debug("GisPluginEnv: class_init");
+       GObjectClass *gobject_class = (GObjectClass*)klass;
+       gobject_class->dispose  = gis_plugin_env_dispose;
+}
diff --git a/src/plugins/env.h b/src/plugins/env.h
new file mode 100644 (file)
index 0000000..dc59ded
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2009 Andy Spencer <spenceal@rose-hulman.edu>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __ENV_H__
+#define __ENV_H__
+
+#include <glib-object.h>
+
+#define GIS_TYPE_PLUGIN_ENV            (gis_plugin_env_get_type ())
+#define GIS_PLUGIN_ENV(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj),   GIS_TYPE_PLUGIN_ENV, GisPluginEnv))
+#define GIS_IS_PLUGIN_ENV(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj),   GIS_TYPE_PLUGIN_ENV))
+#define GIS_PLUGIN_ENV_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST   ((klass), GIS_TYPE_PLUGIN_ENV, GisPluginEnvClass))
+#define GIS_IS_PLUGIN_ENV_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE   ((klass), GIS_TYPE_PLUGIN_ENV))
+#define GIS_PLUGIN_ENV_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),   GIS_TYPE_PLUGIN_ENV, GisPluginEnvClass))
+
+typedef struct _GisPluginEnv      GisPluginEnv;
+typedef struct _GisPluginEnvClass GisPluginEnvClass;
+
+struct _GisPluginEnv {
+       GObject parent_instance;
+
+       /* instance members */
+       GisViewer       *viewer;
+};
+
+struct _GisPluginEnvClass {
+       GObjectClass parent_class;
+};
+
+GType gis_plugin_env_get_type();
+
+/* Methods */
+GisPluginEnv *gis_plugin_env_new(GisViewer *viewer, GisPrefs *prefs);
+
+#endif