+/******************
+ * Object drawing *
+ ******************/
+static void _gis_opengl_draw_triangle(GisOpenGL *self, GisTriangle *tri)
+{
+}
+
+static void _gis_opengl_draw_quad(GisOpenGL *self, GisQuad *quad)
+{
+}
+
+static void _gis_opengl_draw_callback(GisOpenGL *self, GisCallback *cb)
+{
+}
+
+static void _gis_opengl_draw_marker(GisOpenGL *self, GisMarker *marker)
+{
+ GisProjection *proj = (GisProjection*)self->sphere->view;
+ GisPoint *point = gis_object_center(marker);
+ gis_point_project(point, proj);
+
+ double width = GTK_WIDGET(self)->allocation.width;
+ double height = GTK_WIDGET(self)->allocation.height;
+
+ cairo_set_source_rgba(self->canvas, 1, 1, 1, 1);
+ cairo_arc(self->canvas, point->px, height-point->py, 4, 0, 2*G_PI);
+ cairo_fill(self->canvas);
+ cairo_move_to(self->canvas, point->px+4, height-point->py-8);
+ cairo_set_font_size(self->canvas, 10);
+ cairo_show_text(self->canvas, marker->label);
+}
+
+static void gis_opengl_draw_object(GisOpenGL *self, GisObject *object)
+{
+ g_debug("GisOpenGL: draw_object - Drawing object of type %d", object->type);
+ switch (object->type) {
+ case GIS_TYPE_TRIANGLE: _gis_opengl_draw_triangle(self, GIS_TRIANGLE(object)); break;
+ case GIS_TYPE_QUAD : _gis_opengl_draw_quad (self, GIS_QUAD (object)); break;
+ case GIS_TYPE_CALLBACK: _gis_opengl_draw_callback(self, GIS_CALLBACK(object)); break;
+ case GIS_TYPE_MARKER : _gis_opengl_draw_marker (self, GIS_MARKER (object)); break;
+ default: g_warning("GisOpenGL: draw_object - invalid type %d", object->type);
+ }
+}
+static void gis_opengl_draw_objects(GisOpenGL *self)
+{
+ g_debug("GisOpenGL: draw_objects");
+
+ double width = GTK_WIDGET(self)->allocation.width;
+ double height = GTK_WIDGET(self)->allocation.height;
+ cairo_surface_t *surface = cairo_get_target(self->canvas);
+ int stride = cairo_image_surface_get_stride(surface);
+ guchar *data = cairo_image_surface_get_data(surface);
+ memset(data, 0, height*stride);
+
+ /* Draw objects */
+ for (GList *cur = GIS_VIEWER(self)->objects; cur; cur = cur->next)
+ gis_opengl_draw_object(self, cur->data);
+
+ /* Copy canvas to opengl */
+ glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity();
+ glDisable(GL_CULL_FACE);
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_LIGHTING);
+ glDisable(GL_COLOR_MATERIAL);
+ glEnable(GL_TEXTURE_2D);
+ glBindTexture(GL_TEXTURE_2D, self->canvas_tex);
+ //glTexSubImage2D(GL_TEXTURE_2D, 0, 0,0, width,height,
+ // GL_RGBA, GL_UNSIGNED_BYTE, data);
+ glBegin(GL_QUADS);
+ glTexCoord2d(0, 0); glVertex3f(-1, 1, 1);
+ glTexCoord2d(1, 0); glVertex3f( 1, 1, 1);
+ glTexCoord2d(1, 1); glVertex3f( 1, -1, 1);
+ glTexCoord2d(0, 1); glVertex3f(-1, -1, 1);
+ glEnd();
+ glMatrixMode(GL_PROJECTION); glPopMatrix();
+ glMatrixMode(GL_MODELVIEW); glPopMatrix();
+}
+