]> Pileus Git - grits/commitdiff
Template for tessellation example, currently broke
authorAndy Spencer <andy753421@gmail.com>
Sat, 23 Jan 2010 00:00:54 +0000 (00:00 +0000)
committerAndy Spencer <andy753421@gmail.com>
Mon, 25 Jan 2010 09:29:11 +0000 (09:29 +0000)
examples/sorting/.gitignore
examples/sorting/mkfile
examples/sorting/tes.c [new file with mode: 0644]

index ff6c75ed39a1033eb3e5836e1afd42ac1d4f837b..005dc9ab4225d3f7e3ec58b84ceb40a5cebf67c8 100644 (file)
@@ -1 +1,2 @@
 sort
 sort
+tes
index c43292487910fb9bda6f83f84e0c39021c1d8ac7..e65f26d264a1ca8b768424aa461bc625d38537fc 100644 (file)
@@ -1,6 +1,7 @@
 MKSHELL=/usr/lib/plan9/bin/rc
 MKSHELL=/usr/lib/plan9/bin/rc
-PROGS=sort
-sort_libs=`{pkg-config --libs gtkglext-1.0}
-sort_cflags=`{pkg-config --cflags gtkglext-1.0}
-default:V: sort-run
+PROGS=sort tes
+LIBS=`{pkg-config --libs gtkglext-1.0}
+CFLAGS=-Wall -g '--std=c99' `{pkg-config --cflags gtkglext-1.0}
+
+default:V: tes-run
 <$HOME/lib/mkcommon
 <$HOME/lib/mkcommon
diff --git a/examples/sorting/tes.c b/examples/sorting/tes.c
new file mode 100644 (file)
index 0000000..135ce5e
--- /dev/null
@@ -0,0 +1,109 @@
+#include <gtk/gtk.h>
+#include <gtk/gtkgl.h>
+#include <gdk/gdkkeysyms.h>
+#include <GL/gl.h>
+#include <GL/glu.h>
+#include <stdlib.h>
+
+static gboolean on_expose(GtkWidget *drawing, GdkEventExpose *event, gpointer _)
+{
+       //glClearColor(0.5, 0.5, 1.0, 1.0);
+       glClearColor(0.0, 0.0, 0.0, 0.0);
+       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+       /* No sorting, just add */
+       glEnable(GL_BLEND);
+       glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+       //glBlendFunc(GL_ONE, GL_ONE);
+
+       /* Lighting */
+       glMatrixMode(GL_MODELVIEW);
+       glLoadIdentity();
+       float light_ambient[]  = {0.3f, 0.3f, 0.1f, 1.0f};
+       float light_diffuse[]  = {0.9f, 0.9f, 0.9f, 1.0f};
+       float light_position[] = {-30.0f, 50.0f, 40.0f, 1.0f};
+       glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
+       glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
+       glLightfv(GL_LIGHT0, GL_POSITION, light_position);
+       glEnable(GL_COLOR_MATERIAL);
+       glEnable(GL_LIGHTING);
+       glEnable(GL_LIGHT0);
+
+       /* Projection */
+       glMatrixMode(GL_PROJECTION);
+       glLoadIdentity();
+       glFrustum(-1,1, -1,1, 2,10);
+
+       glMatrixMode(GL_MODELVIEW);
+       glLoadIdentity();
+       gluLookAt(0,2,-3, 0,0,0, 0,1,0);
+
+       /* Draw polys */
+       glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+
+       glColor4f(1, 0, 0, 0.5);
+       glBegin(GL_TRIANGLE_STRIP);
+       glVertex3i(-1,  1,  1);
+       glVertex3i(-1, -1,  1);
+       glVertex3i( 1,  1, -1);
+       glVertex3i( 1, -1, -1);
+       glEnd();
+
+       glColor4f(0, 1, 0, 0.5);
+       glBegin(GL_TRIANGLE_STRIP);
+       glVertex3i( 1,  1,  1);
+       glVertex3i( 1, -1,  1);
+       glVertex3i(-1,  1, -1);
+       glVertex3i(-1, -1, -1);
+       glEnd();
+
+       /* Flush */
+       GdkGLDrawable *gldrawable = gdk_gl_drawable_get_current();
+       if (gdk_gl_drawable_is_double_buffered(gldrawable))
+               gdk_gl_drawable_swap_buffers(gldrawable);
+       else
+               glFlush();
+       return FALSE;
+}
+
+static gboolean on_configure(GtkWidget *drawing, GdkEventConfigure *event, gpointer _)
+{
+       glViewport(0, 0,
+               drawing->allocation.width,
+               drawing->allocation.height);
+       return FALSE;
+}
+
+static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer _)
+{
+       if (event->keyval == GDK_q)
+               gtk_main_quit();
+       return FALSE;
+}
+
+int main(int argc, char **argv)
+{
+       gtk_init(&argc, &argv);
+
+       GtkWidget   *window   = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+       GtkWidget   *drawing  = gtk_drawing_area_new();
+       GdkGLConfig *glconfig = gdk_gl_config_new_by_mode((GdkGLConfigMode)(
+                       GDK_GL_MODE_RGBA   | GDK_GL_MODE_DEPTH |
+                       GDK_GL_MODE_DOUBLE | GDK_GL_MODE_ALPHA));
+       g_signal_connect(window,  "destroy",         G_CALLBACK(gtk_main_quit), NULL);
+       g_signal_connect(window,  "key-press-event", G_CALLBACK(on_key_press),  NULL);
+       g_signal_connect(drawing, "expose-event",    G_CALLBACK(on_expose),     NULL);
+       g_signal_connect(drawing, "configure-event", G_CALLBACK(on_configure),  NULL);
+       gtk_widget_set_gl_capability(drawing, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
+       gtk_container_add(GTK_CONTAINER(window), drawing);
+       gtk_widget_show_all(window);
+
+       /* OpenGL setup */
+       GdkGLContext  *glcontext  = gtk_widget_get_gl_context(GTK_WIDGET(drawing));
+       GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(GTK_WIDGET(drawing));
+       gdk_gl_drawable_gl_begin(gldrawable, glcontext);
+
+       gtk_main();
+
+       gdk_gl_drawable_gl_end(gldrawable);
+}