Mesa (master): xeglgears: Clean up the code a bit

Kristian Høgsberg krh at kemper.freedesktop.org
Fri Feb 26 18:19:54 UTC 2010


Module: Mesa
Branch: master
Commit: 88c174d182139e9433db70b81393276250c8ee20
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=88c174d182139e9433db70b81393276250c8ee20

Author: Kristian Høgsberg <krh at bitplanet.net>
Date:   Fri Feb 26 13:18:37 2010 -0500

xeglgears: Clean up the code a bit

Still a mess...

---

 progs/egl/xeglgears.c |   77 ++++++++++++++++++++++++++++--------------------
 1 files changed, 45 insertions(+), 32 deletions(-)

diff --git a/progs/egl/xeglgears.c b/progs/egl/xeglgears.c
index 2f9ece4..dd2c7e8 100644
--- a/progs/egl/xeglgears.c
+++ b/progs/egl/xeglgears.c
@@ -344,6 +344,8 @@ struct egl_manager {
 
    EGLBoolean verbose;
    EGLint major, minor;
+
+   GC gc;
 };
 
 static struct egl_manager *
@@ -475,6 +477,8 @@ egl_manager_create_window(struct egl_manager *eman, const char *name,
       }
    }
 
+   eman->gc = XCreateGC(eman->xdpy, eman->xwin, 0, NULL);
+
    XMapWindow(eman->xdpy, eman->xwin);
 
    return EGL_TRUE;
@@ -531,6 +535,8 @@ egl_manager_destroy(struct egl_manager *eman)
    if (eman->xpix != None)
       XFreePixmap(eman->xdpy, eman->xpix);
 
+   XFreeGC(eman->xdpy, eman->gc);
+
    free(eman);
 }
 
@@ -581,10 +587,26 @@ texture_gears(struct egl_manager *eman, int surface_type)
 }
 
 static void
+copy_gears(struct egl_manager *eman,
+	   EGLint tile_w, EGLint tile_h, EGLint w, EGLint h)
+{
+   int x, y;
+
+   eglWaitClient();
+
+   for (x = 0; x < w; x += tile_w) {
+      for (y = 0; y < h; y += tile_h) {
+
+	 XCopyArea(eman->xdpy, eman->xpix, eman->xwin, eman->gc,
+		   0, 0, tile_w, tile_h, x, y);
+      }
+   }
+}
+
+static void
 event_loop(struct egl_manager *eman, EGLint surface_type, EGLint w, EGLint h)
 {
-   GC gc = XCreateGC(eman->xdpy, eman->xwin, 0, NULL);
-   EGLint orig_w = w, orig_h = h;
+   int window_w = w, window_h = h;
 
    if (surface_type == EGL_PBUFFER_BIT)
       printf("there will be no screen update if "
@@ -599,10 +621,10 @@ event_loop(struct egl_manager *eman, EGLint surface_type, EGLint w, EGLint h)
             /* we'll redraw below */
             break;
          case ConfigureNotify:
-            w = event.xconfigure.width;
-            h = event.xconfigure.height;
+            window_w = event.xconfigure.width;
+            window_h = event.xconfigure.height;
             if (surface_type == EGL_WINDOW_BIT)
-               reshape(w, h);
+               reshape(window_w, window_h);
             break;
          case KeyPress:
             {
@@ -637,7 +659,6 @@ event_loop(struct egl_manager *eman, EGLint surface_type, EGLint w, EGLint h)
          static int frames = 0;
          static double tRot0 = -1.0, tRate0 = -1.0;
          double dt, t = current_time();
-         int x, y;
          if (tRot0 < 0.0)
             tRot0 = t;
          dt = t - tRot0;
@@ -649,41 +670,35 @@ event_loop(struct egl_manager *eman, EGLint surface_type, EGLint w, EGLint h)
              angle -= 3600.0;
 
          switch (surface_type) {
+         case GEARS_WINDOW:
+	    draw();
+            eglSwapBuffers(eman->dpy, eman->win);
+            break;
+
 	 case GEARS_PBUFFER:
+	    draw();
+	    if (!eglCopyBuffers(eman->dpy, eman->pbuf, eman->xpix))
+	       break;
+	    copy_gears(eman, w, h, window_w, window_h);
+	    break;
+
 	 case GEARS_PBUFFER_TEXTURE:
             eglMakeCurrent(eman->dpy, eman->pbuf, eman->pbuf, eman->ctx);
+	    draw();
+	    texture_gears(eman, surface_type);
 	    break;
 
 	 case GEARS_PIXMAP:
-	 case GEARS_PIXMAP_TEXTURE:
-            eglMakeCurrent(eman->dpy, eman->pix, eman->pix, eman->ctx);
+	    draw();
+	    copy_gears(eman, w, h, window_w, window_h);
 	    break;
-	 }
 
-         draw();
-         switch (surface_type) {
-         case GEARS_WINDOW:
-            eglSwapBuffers(eman->dpy, eman->win);
-            break;
-         case GEARS_PBUFFER_TEXTURE:
 	 case GEARS_PIXMAP_TEXTURE:
+            eglMakeCurrent(eman->dpy, eman->pix, eman->pix, eman->ctx);
+	    draw();
 	    texture_gears(eman, surface_type);
 	    break;
-         case GEARS_PBUFFER:
-	    if (!eglCopyBuffers(eman->dpy, eman->pbuf, eman->xpix))
-	       break;
-	    eglWaitClient();
-            /* fall through */
-         case GEARS_PIXMAP:
-            eglWaitClient();
-            for (x = 0; x < w; x += orig_w) {
-               for (y = 0; y < h; y += orig_h) {
-                  XCopyArea(eman->xdpy, eman->xpix, eman->xwin, gc,
-                            0, 0, orig_w, orig_h, x, y);
-               }
-            }
-            break;
-         }
+	 }
 
          frames++;
 
@@ -699,8 +714,6 @@ event_loop(struct egl_manager *eman, EGLint surface_type, EGLint w, EGLint h)
          }
       }
    }
-
-   XFreeGC(eman->xdpy, gc);
 }
 
 




More information about the mesa-commit mailing list