summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2009-02-09 15:31:16 -0800
committerEric Anholt <eric@anholt.net>2009-02-09 15:31:16 -0800
commit3229ce8d26592965597cba18cc6d38593732fcf2 (patch)
treef52a0d5aa6cc31cad3ce7476adc222ed2690cd35
parent15b05c5009fca69942135b588582f70ec82811cf (diff)
[gl] Use new window interfaces so we don't have to ReadPixels to show results.
-rw-r--r--cairogears.c53
1 files changed, 30 insertions, 23 deletions
diff --git a/cairogears.c b/cairogears.c
index 7599276..be402e9 100644
--- a/cairogears.c
+++ b/cairogears.c
@@ -240,9 +240,15 @@ main (int argc, char **argv)
XSelectInput (dpy, win, StructureNotifyMask);
- win_surface = cairo_xlib_surface_create (dpy, win,
- DefaultVisual (dpy, DefaultScreen (dpy)),
- width, height);
+ if (output_type != GL_TYPE) {
+ win_surface = cairo_xlib_surface_create (dpy, win,
+ DefaultVisual (dpy, DefaultScreen (dpy)),
+ width, height);
+ } else {
+ ctx = cairogears_gl_context_create(dpy);
+ win_surface = cairo_gl_surface_create_for_window(ctx, win,
+ width, height);
+ }
switch (output_type) {
case XRENDER_TYPE:
@@ -251,9 +257,7 @@ main (int argc, char **argv)
break;
case GL_TYPE:
- ctx = cairogears_gl_context_create(dpy);
- surface = cairo_gl_surface_create(ctx, CAIRO_CONTENT_COLOR_ALPHA,
- width, height);
+ surface = cairo_surface_reference (win_surface);
break;
case IMAGE_TYPE:
@@ -321,7 +325,12 @@ main (int argc, char **argv)
width = event.xconfigure.width;
height = event.xconfigure.height;
- cairo_xlib_surface_set_size (win_surface, width, height);
+ if (output_type != GL_TYPE) {
+ cairo_xlib_surface_set_size (win_surface,
+ width, height);
+ } else {
+ cairo_gl_surface_set_size (win_surface, width, height);
+ }
cairo_surface_destroy (surface);
switch (output_type) {
case XRENDER_TYPE:
@@ -333,12 +342,7 @@ main (int argc, char **argv)
break;
case GL_TYPE:
- surface = cairo_gl_surface_create (ctx,
- CAIRO_CONTENT_COLOR_ALPHA,
- width, height);
-
-
- fprintf(stderr, "resize %d %d %p\n", width, height, surface);
+ surface = cairo_surface_reference (win_surface);
break;
case IMAGE_TYPE:
@@ -382,19 +386,22 @@ main (int argc, char **argv)
}
if (visible) {
- cairo_t *cr2 = cairo_create (win_surface);
- cairo_set_source_surface (cr2, cairo_get_target (cr), 0, 0);
- cairo_paint (cr2);
+ if (output_type != GL_TYPE) {
+ cairo_t *cr2 = cairo_create (win_surface);
+ cairo_set_source_surface (cr2, cairo_get_target (cr), 0, 0);
+ cairo_paint (cr2);
+
+ if (cairo_status (cr2)) {
+ fprintf (stderr, "test left context in error: %s\n",
+ cairo_status_to_string (cairo_status (cr2)));
+ exit (1);
+ }
- if (cairo_status (cr2)) {
- fprintf (stderr, "test left context in error: %s\n",
- cairo_status_to_string (cairo_status (cr2)));
- exit (1);
+ cairo_destroy (cr2);
+ } else {
+ cairo_gl_surface_swapbuffers (win_surface);
}
-
- cairo_destroy (cr2);
}
-
frame_cnt++;
}
}