summaryrefslogtreecommitdiff
path: root/progs/miniglx/miniglxsample.c
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2003-08-06 17:47:15 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2003-08-06 17:47:15 +0000
commita7ea785a104a2254ace3b17ff0bde8231295f0fa (patch)
treea62b678f19e4114fe522c3ba83bb404c15199c2a /progs/miniglx/miniglxsample.c
parentfb4d5492e01dffc83ce9129263409eebf4b220aa (diff)
miniglx test programs
Diffstat (limited to 'progs/miniglx/miniglxsample.c')
-rw-r--r--progs/miniglx/miniglxsample.c127
1 files changed, 127 insertions, 0 deletions
diff --git a/progs/miniglx/miniglxsample.c b/progs/miniglx/miniglxsample.c
new file mode 100644
index 0000000000..bea845c8ff
--- /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;
+}