press f key to toggle front/back drawing/copying

This commit is contained in:
Brian Paul 2003-12-05 00:39:48 +00:00
parent eed5ac284c
commit 15f7f4e31f
1 changed files with 41 additions and 7 deletions

View 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");
}