]> Pileus Git - grits/blob - examples/sorting/tes.c
Template for tessellation example, currently broke
[grits] / examples / sorting / tes.c
1 #include <gtk/gtk.h>
2 #include <gtk/gtkgl.h>
3 #include <gdk/gdkkeysyms.h>
4 #include <GL/gl.h>
5 #include <GL/glu.h>
6 #include <stdlib.h>
7
8 static gboolean on_expose(GtkWidget *drawing, GdkEventExpose *event, gpointer _)
9 {
10         //glClearColor(0.5, 0.5, 1.0, 1.0);
11         glClearColor(0.0, 0.0, 0.0, 0.0);
12         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
13
14         /* No sorting, just add */
15         glEnable(GL_BLEND);
16         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
17         //glBlendFunc(GL_ONE, GL_ONE);
18
19         /* Lighting */
20         glMatrixMode(GL_MODELVIEW);
21         glLoadIdentity();
22         float light_ambient[]  = {0.3f, 0.3f, 0.1f, 1.0f};
23         float light_diffuse[]  = {0.9f, 0.9f, 0.9f, 1.0f};
24         float light_position[] = {-30.0f, 50.0f, 40.0f, 1.0f};
25         glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
26         glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
27         glLightfv(GL_LIGHT0, GL_POSITION, light_position);
28         glEnable(GL_COLOR_MATERIAL);
29         glEnable(GL_LIGHTING);
30         glEnable(GL_LIGHT0);
31
32         /* Projection */
33         glMatrixMode(GL_PROJECTION);
34         glLoadIdentity();
35         glFrustum(-1,1, -1,1, 2,10);
36
37         glMatrixMode(GL_MODELVIEW);
38         glLoadIdentity();
39         gluLookAt(0,2,-3, 0,0,0, 0,1,0);
40
41         /* Draw polys */
42         glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
43
44         glColor4f(1, 0, 0, 0.5);
45         glBegin(GL_TRIANGLE_STRIP);
46         glVertex3i(-1,  1,  1);
47         glVertex3i(-1, -1,  1);
48         glVertex3i( 1,  1, -1);
49         glVertex3i( 1, -1, -1);
50         glEnd();
51
52         glColor4f(0, 1, 0, 0.5);
53         glBegin(GL_TRIANGLE_STRIP);
54         glVertex3i( 1,  1,  1);
55         glVertex3i( 1, -1,  1);
56         glVertex3i(-1,  1, -1);
57         glVertex3i(-1, -1, -1);
58         glEnd();
59
60         /* Flush */
61         GdkGLDrawable *gldrawable = gdk_gl_drawable_get_current();
62         if (gdk_gl_drawable_is_double_buffered(gldrawable))
63                 gdk_gl_drawable_swap_buffers(gldrawable);
64         else
65                 glFlush();
66         return FALSE;
67 }
68
69 static gboolean on_configure(GtkWidget *drawing, GdkEventConfigure *event, gpointer _)
70 {
71         glViewport(0, 0,
72                 drawing->allocation.width,
73                 drawing->allocation.height);
74         return FALSE;
75 }
76
77 static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer _)
78 {
79         if (event->keyval == GDK_q)
80                 gtk_main_quit();
81         return FALSE;
82 }
83
84 int main(int argc, char **argv)
85 {
86         gtk_init(&argc, &argv);
87
88         GtkWidget   *window   = gtk_window_new(GTK_WINDOW_TOPLEVEL);
89         GtkWidget   *drawing  = gtk_drawing_area_new();
90         GdkGLConfig *glconfig = gdk_gl_config_new_by_mode((GdkGLConfigMode)(
91                         GDK_GL_MODE_RGBA   | GDK_GL_MODE_DEPTH |
92                         GDK_GL_MODE_DOUBLE | GDK_GL_MODE_ALPHA));
93         g_signal_connect(window,  "destroy",         G_CALLBACK(gtk_main_quit), NULL);
94         g_signal_connect(window,  "key-press-event", G_CALLBACK(on_key_press),  NULL);
95         g_signal_connect(drawing, "expose-event",    G_CALLBACK(on_expose),     NULL);
96         g_signal_connect(drawing, "configure-event", G_CALLBACK(on_configure),  NULL);
97         gtk_widget_set_gl_capability(drawing, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
98         gtk_container_add(GTK_CONTAINER(window), drawing);
99         gtk_widget_show_all(window);
100
101         /* OpenGL setup */
102         GdkGLContext  *glcontext  = gtk_widget_get_gl_context(GTK_WIDGET(drawing));
103         GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(GTK_WIDGET(drawing));
104         gdk_gl_drawable_gl_begin(gldrawable, glcontext);
105
106         gtk_main();
107
108         gdk_gl_drawable_gl_end(gldrawable);
109 }