[Xquartz-changes] [281] AppleSGLX/trunk/tests
source_changes at macosforge.org
source_changes at macosforge.org
Tue Mar 3 16:13:42 PST 2009
Revision: 281
http://trac.macosforge.org/projects/xquartz/changeset/281
Author: gstaplin at apple.com
Date: 2009-03-03 16:13:42 -0800 (Tue, 03 Mar 2009)
Log Message:
-----------
Add an improved version of the surface test.
This version destroys the window between:
glXMakeCurrent(dpy, None, ctx); and
glXMakeCurrent(dpy, mainwin, ctx);
It seems to be leaking in the client here, but leaks
is reporting 0 leaks, which would seem to indicate
we have a list or similar data structure that isn't
being delinked.
Modified Paths:
--------------
AppleSGLX/trunk/tests/tests.mk
AppleSGLX/trunk/tests/triangle_glx/triangle_glx.mk
Added Paths:
-----------
AppleSGLX/trunk/tests/triangle_glx/triangle_glx_surface-2.c
Modified: AppleSGLX/trunk/tests/tests.mk
===================================================================
--- AppleSGLX/trunk/tests/tests.mk 2009-03-03 20:22:24 UTC (rev 280)
+++ AppleSGLX/trunk/tests/tests.mk 2009-03-04 00:13:42 UTC (rev 281)
@@ -32,5 +32,7 @@
$(TEST_BUILD_DIR)/glxpixmap_destroy_invalid \
$(TEST_BUILD_DIR)/multisample_glx \
$(TEST_BUILD_DIR)/glthreads \
- $(TEST_BUILD_DIR)/triangle_glx_surface
+ $(TEST_BUILD_DIR)/triangle_glx_surface \
+ $(TEST_BUILD_DIR)/triangle_glx_surface-2
+
Modified: AppleSGLX/trunk/tests/triangle_glx/triangle_glx.mk
===================================================================
--- AppleSGLX/trunk/tests/triangle_glx/triangle_glx.mk 2009-03-03 20:22:24 UTC (rev 280)
+++ AppleSGLX/trunk/tests/triangle_glx/triangle_glx.mk 2009-03-04 00:13:42 UTC (rev 281)
@@ -3,3 +3,6 @@
$(TEST_BUILD_DIR)/triangle_glx_surface: tests/triangle_glx/triangle_glx_surface.c $(LIBGL)
$(CC) tests/triangle_glx/triangle_glx_surface.c -Iinclude -o $(TEST_BUILD_DIR)/triangle_glx_surface $(LINK_TEST)
+
+$(TEST_BUILD_DIR)/triangle_glx_surface-2: tests/triangle_glx/triangle_glx_surface-2.c $(LIBGL)
+ $(CC) tests/triangle_glx/triangle_glx_surface-2.c -Iinclude -o $(TEST_BUILD_DIR)/triangle_glx_surface-2 $(LINK_TEST)
Added: AppleSGLX/trunk/tests/triangle_glx/triangle_glx_surface-2.c
===================================================================
--- AppleSGLX/trunk/tests/triangle_glx/triangle_glx_surface-2.c (rev 0)
+++ AppleSGLX/trunk/tests/triangle_glx/triangle_glx_surface-2.c 2009-03-04 00:13:42 UTC (rev 281)
@@ -0,0 +1,132 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <GL/glx.h>
+
+Window mainwin;
+GLXContext ctx;
+Window root, win;
+XVisualInfo *visinfo;
+XSetWindowAttributes attr;
+
+void draw(Display *dpy, Window w) {
+ printf("draw window 0x%lx\n", w);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glLoadIdentity();
+ glColor3f(0.5f, 0.5f, 1.0f);
+ glBegin(GL_TRIANGLES);
+ glVertex3f( 0.0f, 1.0f, 0.0f);
+ glVertex3f(-1.0f,-1.0f, 0.0f);
+ glVertex3f( 1.0f,-1.0f, 0.0f);
+ glEnd();
+ glXSwapBuffers(dpy, w);
+}
+
+void resize(Display *dpy, Window w, int width, int height) {
+ glViewport(0, 0, width, height);
+ draw(dpy, w);
+}
+
+void event_loop(Display *dpy) {
+ XEvent event;
+
+ while(1) {
+ if(XPending(dpy) > 0) {
+ XNextEvent(dpy, &event);
+
+ switch(event.type) {
+ case Expose:
+ draw(dpy, mainwin);
+ break;
+
+ case ConfigureNotify:
+ resize(dpy, mainwin, event.xconfigure.width,
+ event.xconfigure.height);
+ break;
+ }
+ }
+
+ draw(dpy, mainwin);
+ /* This should destroy the surface. */
+ glXMakeCurrent(dpy, None, ctx);
+
+ XSync(dpy, False);
+
+ printf("destroying mainwin 0x%lx\n", mainwin);
+ XDestroyWindow(dpy, mainwin);
+
+ mainwin = XCreateWindow(dpy, root, /*x*/ 0, /*y*/ 0,
+ /*width*/ 400, /*height*/ 400,
+ 0, visinfo->depth, InputOutput,
+ visinfo->visual,
+ CWBackPixel | CWBorderPixel
+ | CWColormap | CWEventMask,
+ &attr);
+
+ printf("created mainwin 0x%lx\n", mainwin);
+
+ /* This should recreate the surface. */
+ glXMakeCurrent(dpy, mainwin, ctx);
+ }
+}
+
+int main() {
+ Display *dpy;
+ int attrib[] = { GLX_RGBA,
+ GLX_RED_SIZE, 8,
+ GLX_GREEN_SIZE, 8,
+ GLX_BLUE_SIZE, 8,
+ GLX_DEPTH_SIZE, 24,
+ GLX_DOUBLEBUFFER,
+ None };
+ int eventbase, errorbase;
+ int screen;
+
+ dpy = XOpenDisplay(NULL);
+
+ if(NULL == dpy) {
+ fprintf(stderr, "error: unable to open display!\n");
+ return EXIT_FAILURE;
+ }
+
+ if(!glXQueryExtension(dpy, &eventbase, &errorbase)) {
+ fprintf(stderr, "GLX is not available!\n");
+ return EXIT_FAILURE;
+ }
+
+ screen = DefaultScreen(dpy);
+ root = RootWindow(dpy, screen);
+
+ visinfo = glXChooseVisual(dpy, screen, attrib);
+
+ if(!visinfo) {
+ fprintf(stderr, "error: couldn't get an RGBA, double-buffered visual!\n");
+ return EXIT_FAILURE;
+ }
+
+ attr.background_pixel = 0;
+ attr.border_pixel = 0;
+ attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone);
+ attr.event_mask = StructureNotifyMask | ExposureMask;
+
+ mainwin = win = XCreateWindow(dpy, root, /*x*/ 0, /*y*/ 0,
+ /*width*/ 400, /*height*/ 400,
+ 0, visinfo->depth, InputOutput,
+ visinfo->visual,
+ CWBackPixel | CWBorderPixel | CWColormap | CWEventMask,
+ &attr);
+
+ ctx = glXCreateContext(dpy, visinfo, NULL, True );
+ if(!ctx) {
+ fprintf(stderr, "error: glXCreateContext failed!\n");
+ return EXIT_FAILURE;
+ }
+
+ XMapWindow(dpy, win);
+
+ glXMakeCurrent(dpy, win, ctx);
+
+ event_loop(dpy);
+
+ return EXIT_SUCCESS;
+}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/xquartz-changes/attachments/20090303/1f94016d/attachment.html>
More information about the Xquartz-changes
mailing list