diff options
author | Eric Anholt <[email protected]> | 2010-05-21 09:32:38 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2010-05-21 12:20:39 -0700 |
commit | 68fc4b415e322f6744299e39864fbc377c6eff74 (patch) | |
tree | 4bafffd8b0105174f3c5c0ae327a005be9145990 /progs/xdemos/glxpixmap.c | |
parent | e4f4489e3fc0b36d72821b55794fb843b2b7fa5f (diff) |
Remove demos that have moved to git+ssh://git.freedesktop.org/git/mesa/demos.
The remaining programs are ones I've had difficulty finding a build
environment for to make the build system or are unit tests that should
probably live next to their code instead. Hopefully people can bring
over the build for remaining pieces they care about.
Diffstat (limited to 'progs/xdemos/glxpixmap.c')
-rw-r--r-- | progs/xdemos/glxpixmap.c | 187 |
1 files changed, 0 insertions, 187 deletions
diff --git a/progs/xdemos/glxpixmap.c b/progs/xdemos/glxpixmap.c deleted file mode 100644 index e1abd22ceef..00000000000 --- a/progs/xdemos/glxpixmap.c +++ /dev/null @@ -1,187 +0,0 @@ - - -/* - * A demonstration of using the GLXPixmap functions. This program is in - * the public domain. - * - * Brian Paul - */ - - -#include <GL/gl.h> -#define GLX_GLXEXT_PROTOTYPES -#include <GL/glx.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - - -static GLXContext ctx; -static XVisualInfo *visinfo; -static GC gc; - - - -static Window make_rgb_window( Display *dpy, - unsigned int width, unsigned int height ) -{ - const int sbAttrib[] = { GLX_RGBA, - GLX_RED_SIZE, 1, - GLX_GREEN_SIZE, 1, - GLX_BLUE_SIZE, 1, - None }; - const int dbAttrib[] = { GLX_RGBA, - GLX_RED_SIZE, 1, - GLX_GREEN_SIZE, 1, - GLX_BLUE_SIZE, 1, - GLX_DOUBLEBUFFER, - None }; - int scrnum; - XSetWindowAttributes attr; - unsigned long mask; - Window root; - Window win; - - scrnum = DefaultScreen( dpy ); - root = RootWindow( dpy, scrnum ); - - visinfo = glXChooseVisual( dpy, scrnum, (int *) sbAttrib ); - if (!visinfo) { - visinfo = glXChooseVisual( dpy, scrnum, (int *) dbAttrib ); - if (!visinfo) { - printf("Error: couldn't get an RGB visual\n"); - exit(1); - } - } - - /* window attributes */ - attr.background_pixel = 0; - attr.border_pixel = 0; - /* TODO: share root colormap if possible */ - attr.colormap = XCreateColormap( dpy, root, visinfo->visual, AllocNone); - attr.event_mask = StructureNotifyMask | ExposureMask; - mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; - - win = XCreateWindow( dpy, root, 0, 0, width, height, - 0, visinfo->depth, InputOutput, - visinfo->visual, mask, &attr ); - - /* make an X GC so we can do XCopyArea later */ - gc = XCreateGC( dpy, win, 0, NULL ); - - /* need indirect context */ - ctx = glXCreateContext( dpy, visinfo, NULL, False ); - if (!ctx) { - printf("Error: glXCreateContext failed\n"); - exit(-1); - } - - printf("Direct rendering: %s\n", glXIsDirect(dpy, ctx) ? "Yes" : "No"); - - return win; -} - - -static GLXPixmap make_pixmap( Display *dpy, Window win, - unsigned int width, unsigned int height, - Pixmap *pixmap) -{ - Pixmap pm; - GLXPixmap glxpm; - XWindowAttributes attr; - - pm = XCreatePixmap( dpy, win, width, height, visinfo->depth ); - if (!pm) { - printf("Error: XCreatePixmap failed\n"); - exit(-1); - } - - XGetWindowAttributes( dpy, win, &attr ); - - /* - * IMPORTANT: - * Use the glXCreateGLXPixmapMESA funtion when using Mesa because - * Mesa needs to know the colormap associated with a pixmap in order - * to render correctly. This is because Mesa allows RGB rendering - * into any kind of visual, not just TrueColor or DirectColor. - */ -#ifdef GLX_MESA_pixmap_colormap - if (strstr(glXQueryExtensionsString(dpy, 0), "GLX_MESA_pixmap_colormap")) { - /* stand-alone Mesa, specify the colormap */ - glxpm = glXCreateGLXPixmapMESA( dpy, visinfo, pm, attr.colormap ); - } - else { - glxpm = glXCreateGLXPixmap( dpy, visinfo, pm ); - } -#else - /* This will work with Mesa too if the visual is TrueColor or DirectColor */ - glxpm = glXCreateGLXPixmap( dpy, visinfo, pm ); -#endif - - if (!glxpm) { - printf("Error: GLXCreateGLXPixmap failed\n"); - exit(-1); - } - - *pixmap = pm; - - return glxpm; -} - - - -static void event_loop( Display *dpy, GLXPixmap pm ) -{ - XEvent event; - - while (1) { - XNextEvent( dpy, &event ); - - switch (event.type) { - case Expose: - printf("Redraw\n"); - /* copy the image from GLXPixmap to window */ - XCopyArea( dpy, pm, event.xany.window, /* src, dest */ - gc, 0, 0, 300, 300, /* gc, src pos, size */ - 0, 0 ); /* dest pos */ - break; - case ConfigureNotify: - /* nothing */ - break; - } - } -} - - - -int main( int argc, char *argv[] ) -{ - Display *dpy; - Window win; - Pixmap pm; - GLXPixmap glxpm; - - dpy = XOpenDisplay(NULL); - - win = make_rgb_window( dpy, 300, 300 ); - glxpm = make_pixmap( dpy, win, 300, 300, &pm ); - - glXMakeCurrent( dpy, glxpm, ctx ); - printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); - - /* Render an image into the pixmap */ - glShadeModel( GL_FLAT ); - glClearColor( 0.5, 0.5, 0.5, 1.0 ); - glClear( GL_COLOR_BUFFER_BIT ); - glViewport( 0, 0, 300, 300 ); - glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0 ); - glColor3f( 0.0, 1.0, 1.0 ); - glRectf( -0.75, -0.75, 0.75, 0.75 ); - glFlush(); - glXWaitGL(); - - XMapWindow( dpy, win ); - - event_loop( dpy, pm ); - return 0; -} |