diff options
author | Keith Whitwell <[email protected]> | 2003-08-06 17:47:15 +0000 |
---|---|---|
committer | Keith Whitwell <[email protected]> | 2003-08-06 17:47:15 +0000 |
commit | a7ea785a104a2254ace3b17ff0bde8231295f0fa (patch) | |
tree | a62b678f19e4114fe522c3ba83bb404c15199c2a /progs/miniglx/miniglxsample.c | |
parent | fb4d5492e01dffc83ce9129263409eebf4b220aa (diff) |
miniglx test programs
Diffstat (limited to 'progs/miniglx/miniglxsample.c')
-rw-r--r-- | progs/miniglx/miniglxsample.c | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/progs/miniglx/miniglxsample.c b/progs/miniglx/miniglxsample.c new file mode 100644 index 00000000000..bea845c8ff7 --- /dev/null +++ b/progs/miniglx/miniglxsample.c @@ -0,0 +1,127 @@ + +#define USE_MINIGLX 1 /* 1 = use Mini GLX, 0 = use Xlib/GLX */ + +#include <stdio.h> +#include <stdlib.h> +#include <GL/gl.h> + +#if USE_MINIGLX +#include <GL/miniglx.h> +#else +#include <GL/glx.h> +#include <X11/Xlib.h> +#endif + +static void _subset_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ) +{ + glBegin( GL_QUADS ); + glVertex2f( x1, y1 ); + glVertex2f( x2, y1 ); + glVertex2f( x2, y2 ); + glVertex2f( x1, y2 ); + glEnd(); +} + + +/* + * Create a simple double-buffered RGBA window. + */ +static Window +MakeWindow(Display * dpy, unsigned int width, unsigned int height) +{ + int visAttributes[] = { + GLX_RGBA, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + GLX_DOUBLEBUFFER, + None + }; + XSetWindowAttributes attr; + unsigned long attrMask; + Window root; + Window win; + GLXContext ctx; + XVisualInfo *visinfo; + + root = RootWindow(dpy, 0); + + /* Choose GLX visual / pixel format */ + visinfo = glXChooseVisual(dpy, 0, visAttributes); + if (!visinfo) { + printf("Error: couldn't get an RGB, Double-buffered visual\n"); + exit(1); + } + + /* Create the window */ + attr.background_pixel = 0; + attr.border_pixel = 0; + attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone); + attrMask = CWBackPixel | CWBorderPixel | CWColormap; + win = XCreateWindow(dpy, root, 0, 0, width, height, + 0, visinfo->depth, InputOutput, + visinfo->visual, attrMask, &attr); + if (!win) { + printf("Error: XCreateWindow failed\n"); + exit(1); + } + + /* Display the window */ + XMapWindow(dpy, win); + + /* Create GLX rendering context */ + ctx = glXCreateContext(dpy, visinfo, NULL, True); + if (!ctx) { + printf("Error: glXCreateContext failed\n"); + exit(1); + } + + /* Bind the rendering context and window */ + glXMakeCurrent(dpy, win, ctx); + + glViewport(0, 0, width, height); + + return win; +} + + +/* + * Draw a few frames of a rotating square. + */ +static void +DrawFrames(Display * dpy, Window win) +{ + int angle; + glShadeModel(GL_FLAT); + glClearColor(0.5, 0.5, 0.5, 1.0); + for (angle = 0; angle < 360; angle += 10) { + glClear(GL_COLOR_BUFFER_BIT); + glColor3f(1.0, 1.0, 0.0); + glPushMatrix(); + glRotatef(angle, 0, 0, 1); + _subset_Rectf(-0.8, -0.8, 0.8, 0.8); + glPopMatrix(); + glXSwapBuffers(dpy, win); + sleep(1); + } +} + + +int +main(int argc, char *argv[]) +{ + Display *dpy; + Window win; + + dpy = XOpenDisplay(NULL); + if (!dpy) { + printf("Error: XOpenDisplay failed\n"); + return 1; + } + + win = MakeWindow(dpy, 300, 300); + + DrawFrames(dpy, win); + + return 0; +} |