press f key to toggle front/back drawing/copying
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 5 Dec 2003 00:39:48 +0000 (00:39 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 5 Dec 2003 00:39:48 +0000 (00:39 +0000)
progs/xdemos/wincopy.c

index 39d471a5e54d1beb7731f4fc54647c65bf162898..3093553d5de070ef7f0db2a77238314b860b39e3 100644 (file)
@@ -1,9 +1,8 @@
-
 /*
  * Mesa 3-D graphics library
- * Version:  3.3
+ * Version:  5.1
  * 
- * Copyright (C) 1999  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
  * 
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -36,6 +35,7 @@
 
 #include <GL/gl.h>
 #include <GL/glx.h>
+#include <X11/keysym.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -52,6 +52,8 @@ static GLint Width[2], Height[2];
 
 static GLfloat Angle = 0.0;
 
+static GLboolean DrawFront = GL_FALSE;
+
 
 
 static Window
@@ -104,6 +106,15 @@ Redraw(void)
 
    Angle += 1.0;
 
+   if (DrawFront) {
+      glDrawBuffer(GL_FRONT);
+      glReadBuffer(GL_FRONT);
+   }
+   else {
+      glDrawBuffer(GL_BACK);
+      glReadBuffer(GL_BACK);
+   }
+
    glViewport(0, 0, Width[0], Height[0]);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
@@ -126,7 +137,10 @@ Redraw(void)
    glEnd();
    glPopMatrix();
 
-   glXSwapBuffers(Dpy, Win[0]);
+   if (DrawFront)
+      glFinish();
+   else
+      glXSwapBuffers(Dpy, Win[0]);
 
 
    /* copy image from window 0 to window 1 */
@@ -146,13 +160,16 @@ Redraw(void)
    glRasterPos2f(-1, -1);
 
    /* copy the image between windows */
-   glDrawBuffer(GL_FRONT);
    glCopyPixels(0, 0, Width[0], Height[0], GL_COLOR);
-   glDrawBuffer(GL_BACK);
 
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();
+
+   if (DrawFront)
+      glFinish();
+   else
+      glXSwapBuffers(Dpy, Win[1]);
 }
 
 
@@ -192,7 +209,22 @@ EventLoop(void)
                Resize(event.xany.window, event.xconfigure.width, event.xconfigure.height);
                break;
             case KeyPress:
-               return;
+               {
+                  char buf[100];
+                  KeySym keySym;
+                  XComposeStatus stat;
+                  XLookupString(&event.xkey, buf, sizeof(buf), &keySym, &stat);
+                  if (keySym == XK_Escape) {
+                        /* exit */
+                        return;
+                  }
+                  else if (buf[0] == 'f') {
+                     DrawFront = !DrawFront;
+                     printf("Drawing to %s buffer\n",
+                            DrawFront ? "GL_FRONT" : "GL_BACK");
+                  }
+               }
+               break;
             default:
                /*no-op*/ ;
          }
@@ -243,6 +275,8 @@ Init(void)
    Win[1] = CreateWindow(Dpy, ScrNum, visinfo,
                          350, 0, 300, 300, "dest window");
 
+   printf("Press Esc to exit\n");
+   printf("Press 'f' to toggle front/back buffer drawing\n");
 }