From: Andy Spencer Date: Sat, 23 Jan 2010 00:00:54 +0000 (+0000) Subject: Template for tessellation example, currently broke X-Git-Tag: v0.4~140 X-Git-Url: http://pileus.org/git/?p=grits;a=commitdiff_plain;h=6b3c66017c6b7f8ea7b95d0b867777bc17525b2c Template for tessellation example, currently broke --- diff --git a/examples/sorting/.gitignore b/examples/sorting/.gitignore index ff6c75e..005dc9a 100644 --- a/examples/sorting/.gitignore +++ b/examples/sorting/.gitignore @@ -1 +1,2 @@ sort +tes diff --git a/examples/sorting/mkfile b/examples/sorting/mkfile index c432924..e65f26d 100644 --- a/examples/sorting/mkfile +++ b/examples/sorting/mkfile @@ -1,6 +1,7 @@ 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 diff --git a/examples/sorting/tes.c b/examples/sorting/tes.c new file mode 100644 index 0000000..135ce5e --- /dev/null +++ b/examples/sorting/tes.c @@ -0,0 +1,109 @@ +#include +#include +#include +#include +#include +#include + +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); +}