7 static gboolean expose_start(GtkWidget *da, GdkEventExpose *event, gpointer user_data)
9 g_message("opengl:expose_start");
10 GdkGLContext *glcontext = gtk_widget_get_gl_context(da);
11 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(da);
13 if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext)) {
14 g_assert_not_reached();
18 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
21 /* Plugins run stuff here */
22 static gboolean expose_end(GtkWidget *da, GdkEventExpose *event, gpointer user_data)
24 g_message("opengl:expose_end");
26 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(da);
28 if (gdk_gl_drawable_is_double_buffered(gldrawable))
29 gdk_gl_drawable_swap_buffers(gldrawable);
33 gdk_gl_drawable_gl_end(gldrawable);
37 static gboolean configure_start(GtkWidget *da, GdkEventConfigure *event, gpointer user_data)
39 GdkGLContext *glcontext = gtk_widget_get_gl_context(da);
40 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(da);
42 if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
43 g_assert_not_reached();
45 glViewport(0, 0, da->allocation.width, da->allocation.height);
48 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
50 glMatrixMode(GL_PROJECTION);
52 //glRotatef(0, 0, 2, 45);
53 gluPerspective(45.0f, 1, 0.1f, 10000000.0f);
54 //glFrustum(-1, 1, -1, 1, -1, 1);
56 glMatrixMode(GL_MODELVIEW);
58 double scale = 500*1000; // 500 km
59 //glOrtho(-scale,scale,-scale,scale,-10000,10000);
60 glTranslatef(0.0, 0.0, -2.5*scale);
61 glRotatef(-45, 1, 0, 0);
65 static gboolean configure_end(GtkWidget *da, GdkEventConfigure *event, gpointer user_data)
67 GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(da);
68 gdk_gl_drawable_gl_end(gldrawable);
72 gboolean opengl_init(GtkDrawingArea *drawing, GtkNotebook *config)
74 /* Set up OpenGL Stuff */
75 g_signal_connect (drawing, "configure-event", G_CALLBACK(configure_start), NULL);
76 g_signal_connect_after(drawing, "configure-event", G_CALLBACK(configure_end), NULL);
77 g_signal_connect (drawing, "expose-event", G_CALLBACK(expose_start), NULL);
78 g_signal_connect_after(drawing, "expose-event", G_CALLBACK(expose_end), NULL);