diff options
Diffstat (limited to 'progs/xdemos/opencloseopen.c')
-rw-r--r-- | progs/xdemos/opencloseopen.c | 189 |
1 files changed, 0 insertions, 189 deletions
diff --git a/progs/xdemos/opencloseopen.c b/progs/xdemos/opencloseopen.c deleted file mode 100644 index 756096095e..0000000000 --- a/progs/xdemos/opencloseopen.c +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. - * (C) Copyright IBM Corporation 2003 - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <X11/Xlib.h> -#include <GL/gl.h> -#include <GL/glx.h> - -/** \file opencloseopen.c - * Simple test for Mesa bug #508473. Create a window and rendering context. - * Draw a single frame. Close the window, destroy the context, and close - * the display. Re-open the display, create a new window and context. This - * should work, but, at least as of Mesa 5.1, it segfaults. See the bug - * report for more details. - * - * Most of the code here was lifed from various other Mesa xdemos. - */ - -static void -draw(void) -{ - glViewport(0, 0, 300, 300); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - - glShadeModel(GL_FLAT); - glClearColor(0.5, 0.5, 0.5, 1.0); - glClear(GL_COLOR_BUFFER_BIT); - - /* draw blue quad */ - glLoadIdentity(); - glColor3f(0.3, 0.3, 1.0); - glPushMatrix(); - glRotatef(0, 0, 0, 1); - glBegin(GL_POLYGON); - glVertex2f(-0.5, -0.25); - glVertex2f( 0.5, -0.25); - glVertex2f( 0.5, 0.25); - glVertex2f(-0.5, 0.25); - glEnd(); - glPopMatrix();} - - -/* - * Create an RGB, double-buffered window. - * Return the window and context handles. - */ -static void -make_window( const char * dpyName, const char *name, - int x, int y, int width, int height, - Display **dpyRet, Window *winRet, GLXContext *ctxRet) -{ - int attrib[] = { 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; - GLXContext ctx; - XVisualInfo *visinfo; - Display *dpy; - - dpy = XOpenDisplay(dpyName); - if (!dpy) { - printf("Error: couldn't open display %s\n", XDisplayName(dpyName)); - exit(1); - } - - *dpyRet = dpy; - scrnum = DefaultScreen( dpy ); - root = RootWindow( dpy, scrnum ); - - visinfo = glXChooseVisual( dpy, scrnum, attrib ); - if (!visinfo) { - printf("Error: couldn't get an RGB, Double-buffered visual\n"); - exit(1); - } - - /* window attributes */ - attr.background_pixel = 0; - attr.border_pixel = 0; - attr.colormap = XCreateColormap( dpy, root, visinfo->visual, AllocNone); - attr.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask; - mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; - - win = XCreateWindow( dpy, root, 0, 0, width, height, - 0, visinfo->depth, InputOutput, - visinfo->visual, mask, &attr ); - - /* set hints and properties */ - { - XSizeHints sizehints; - sizehints.x = x; - sizehints.y = y; - sizehints.width = width; - sizehints.height = height; - sizehints.flags = USSize | USPosition; - XSetNormalHints(dpy, win, &sizehints); - XSetStandardProperties(dpy, win, name, name, - None, (char **)NULL, 0, &sizehints); - } - - ctx = glXCreateContext( dpy, visinfo, NULL, True ); - if (!ctx) { - printf("Error: glXCreateContext failed\n"); - exit(1); - } - - XFree(visinfo); - - *winRet = win; - *ctxRet = ctx; -} - - -static void -destroy_window( Display *dpy, Window win, GLXContext ctx ) -{ - glXMakeCurrent(dpy, None, NULL); - glXDestroyContext(dpy, ctx); - XDestroyWindow(dpy, win); - XCloseDisplay(dpy); -} - - -int -main(int argc, char *argv[]) -{ - Display *dpy; - Window win; - GLXContext ctx; - char *dpyName = NULL; - int i; - - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "-display") == 0) { - dpyName = argv[i+1]; - i++; - } - } - - printf("If this program segfaults, then Mesa bug #508473 is probably " - "back.\n"); - make_window(dpyName, "Open-close-open", 0, 0, 300, 300, &dpy, &win, &ctx); - XMapWindow(dpy, win); - glXMakeCurrent(dpy, win, ctx); - - draw(); - glXSwapBuffers(dpy, win); - sleep(2); - - destroy_window(dpy, win, ctx); - - make_window(dpyName, "Open-close-open", 0, 0, 300, 300, &dpy, &win, &ctx); - XMapWindow(dpy, win); - glXMakeCurrent(dpy, win, ctx); - destroy_window(dpy, win, ctx); - - return 0; -} |