summaryrefslogtreecommitdiff
path: root/progs/xdemos/opencloseopen.c
diff options
context:
space:
mode:
Diffstat (limited to 'progs/xdemos/opencloseopen.c')
-rw-r--r--progs/xdemos/opencloseopen.c189
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;
-}