]> Pileus Git - aweather/blob - src/opengl.c
got levels working, plus faster
[aweather] / src / opengl.c
1 #include <config.h>
2 #include <gtk/gtk.h>
3 #include <gtk/gtkgl.h>
4 #include <GL/gl.h>
5
6 static gboolean expose_start(GtkWidget *da, GdkEventExpose *event, gpointer user_data)
7 {
8         GdkGLContext *glcontext = gtk_widget_get_gl_context(da);
9         GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(da);
10
11         if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext)) {
12                 g_assert_not_reached();
13         }
14
15         /* draw in here */
16         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
17 }
18 /* Plugins run stuff here */
19 static gboolean expose_end(GtkWidget *da, GdkEventExpose *event, gpointer user_data)
20 {
21         GdkGLContext *glcontext = gtk_widget_get_gl_context(da);
22         GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(da);
23
24         if (gdk_gl_drawable_is_double_buffered(gldrawable))
25                 gdk_gl_drawable_swap_buffers(gldrawable);
26         else
27                 glFlush();
28
29         gdk_gl_drawable_gl_end(gldrawable);
30
31         return FALSE;
32 }
33 static gboolean configure(GtkWidget *da, GdkEventConfigure *event, gpointer user_data)
34 {
35         GdkGLContext *glcontext = gtk_widget_get_gl_context(da);
36         GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(da);
37
38         if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
39                 g_assert_not_reached();
40
41         glLoadIdentity();
42         glViewport(0, 0, da->allocation.width, da->allocation.height);
43         glOrtho(-10,10,-10,10,-20050,10000);
44         glEnable(GL_BLEND);
45         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
46
47         glScalef(10., 10., 10.);
48         
49         gdk_gl_drawable_gl_end(gldrawable);
50
51         return FALSE;
52 }
53
54 gboolean opengl_init(GtkDrawingArea *drawing, GtkNotebook *config)
55 {
56         /* Set up OpenGL Stuff */
57         g_signal_connect(drawing, "configure-event", G_CALLBACK(configure), NULL);
58         
59         //g_signal_connect(drawing, "expose-event", G_CALLBACK(expose), NULL);
60         g_signal_connect      (drawing, "expose-event", G_CALLBACK(expose_start), NULL);
61         g_signal_connect_after(drawing, "expose-event", G_CALLBACK(expose_end),   NULL);
62 }