diff options
author | Eric Anholt <eric@anholt.net> | 2009-02-09 15:31:16 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2009-02-09 15:31:16 -0800 |
commit | 3229ce8d26592965597cba18cc6d38593732fcf2 (patch) | |
tree | f52a0d5aa6cc31cad3ce7476adc222ed2690cd35 | |
parent | 15b05c5009fca69942135b588582f70ec82811cf (diff) |
[gl] Use new window interfaces so we don't have to ReadPixels to show results.
-rw-r--r-- | cairogears.c | 53 |
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++; } } |